// src/components/layout/SidebarProfile.tsx "use client"; import { useState, useRef, useEffect } from "react"; import { User as UserIcon, Sun, Moon, LogOut } from "lucide-react"; import { useRouter } from "next/navigation"; import { useTheme } from "next-themes"; const ROLE_DISPLAY_NAMES: Record = { SUPER_ADMIN: 'Super Admin', TENANT_ADMIN: 'Tenant Admin', SOC_ANALYST: 'SOC Analyst', ENGINEER: 'Engineer', AGENT_VIEWER: 'Agent Viewer', }; const getRoleDisplayName = (role?: string) => { if (!role) return 'Standard User'; return ROLE_DISPLAY_NAMES[role] || 'Standard User'; }; interface ProfileProps { user: any; onOpenSettings: () => void; } export default function SidebarProfile({ user, onOpenSettings }: ProfileProps) { const [isAccountDropdownOpen, setIsAccountDropdownOpen] = useState(false); const accountDropdownRef = useRef(null); const router = useRouter(); const { theme, setTheme } = useTheme(); useEffect(() => { function handleClickOutside(event: MouseEvent) { if (accountDropdownRef.current && !accountDropdownRef.current.contains(event.target as Node)) { setIsAccountDropdownOpen(false); } } document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); const roleLabel = getRoleDisplayName(user?.role); const initial = user?.account_name ? user.account_name.charAt(0) : (user?.username ? user.username.charAt(0) : (user?.role === 'SUPER_ADMIN' ? 'A' : 'V')); return (
{isAccountDropdownOpen && (
{user?.profile_picture ? ( Profile ) : ( {initial} )}
{user?.account_name || user?.username || 'Loading...'} {roleLabel}
)}
); }