import React, { useEffect } from 'react'; import { createPortal } from 'react-dom'; import { useNavigate } from 'react-router-dom'; import { ShieldAlert, LogOut, Ban, Mail, Building2, Fingerprint, Lock, } from 'lucide-react'; import { BrandLogo } from '../ui/BrandLogo'; import { AuthUserProfile, UserClaims } from '../../auth/AuthProvider'; import { cancelSessionExpiration, dismissSubordinateModals } from '../../services/sessionExpiration'; interface PartnerAccessDeniedModalProps { user: AuthUserProfile | null; claims: UserClaims; sub: string; onLogout: () => Promise; } export const PartnerAccessDeniedModal: React.FC = ({ user, claims, sub, onLogout, }) => { const navigate = useNavigate(); // Clear any existing session prompt and close background dialogs useEffect(() => { cancelSessionExpiration(); dismissSubordinateModals(); }, []); const displayName = user?.name || (claims.name as string) || (claims.preferred_username as string) || 'Authenticated User'; const displayEmail = user?.email || (claims.email as string) || (claims['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] as string) || ''; const tenant = user?.tenant || (claims.tenant as string) || (claims.org as string) || 'Statutory Enterprise'; const role = user?.role || (claims.role as string) || 'Partner'; const handleLogoutClick = async () => { await onLogout(); navigate('/', { replace: true }); }; const modalContent = (

Partner Portal Required

Accounts with the Partner role must access the Partner Portal.

User {displayName}
{displayEmail && (
Email {displayEmail}
)}
Role {role}

The Console is reserved for statutory administrators and programme managers.

); return typeof document !== 'undefined' ? createPortal(modalContent, document.body) : modalContent; };