// src/components/layout/SidebarProfile.tsx "use client"; import { useState, useRef, useEffect } from "react"; import { User as UserIcon, LogOut, Eye } from "lucide-react"; import { useRouter } from "next/navigation"; import { SafeImage } from "../ui/SafeImage"; import { getViewAsStatusSync } from "@/lib/admin-api"; const ROLE_DISPLAY_NAMES: Record = { SUPER_ADMIN: 'Super Admin', EXECUTIVE: 'Executive', TENANT_ADMIN: 'Tenant Admin', SOC_ANALYST: 'SOC Analyst', ENGINEER: 'Engineer', AGENT_VIEWER: 'Agent Viewer', // Company-facing roles — client/customer accounts COMPANY_ADMIN: 'Company Admin', COMPANY_OPERATOR: 'Company Operator', COMPANY_VIEWER: 'Company 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 [viewAsStatus, setViewAsStatus] = useState(null); const accountDropdownRef = useRef(null); const router = useRouter(); 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); }, []); useEffect(() => { // Cek apakah sedang dalam mode View-As untuk menampilkan label yang benar const status = getViewAsStatusSync(); setViewAsStatus(status); }, []); // Jika dalam View-As mode, gunakan label dari view-as (bukan role dari server yang jadi AGENT_VIEWER) const isViewAsMode = viewAsStatus?.active; // Bangun label yang ditampilkan di sidebar bawah profil const roleLabel = (() => { if (!isViewAsMode) return getRoleDisplayName(user?.role); const viewAsType = viewAsStatus?.view_as_type; if (viewAsType === 'user') { const userName = viewAsStatus?.user_name || 'Unknown'; const userRole = viewAsStatus?.user_role || ''; const roleShort = ROLE_DISPLAY_NAMES[userRole] || userRole.replace(/_/g, ' '); return `Viewing as: ${userName} (${roleShort})`; } // Direct agent view-as: tampilkan label agent const agentLabel = viewAsStatus?.agent_label || viewAsStatus?.agent_uuid || 'Unknown'; return `Viewing Agent: ${agentLabel}`; })(); const initial = user?.account_name ? user.account_name.charAt(0) : (user?.username ? user.username.charAt(0) : 'U'); return (
{isAccountDropdownOpen && (
{user?.profile_picture ? ( ) : ( {initial} )}
{user?.account_name || user?.username || 'Loading...'} {isViewAsMode ? ( {(() => { const vt = viewAsStatus?.view_as_type; if (vt === 'user') { const un = viewAsStatus?.user_name || 'Unknown'; const ur = ROLE_DISPLAY_NAMES[viewAsStatus?.user_role] || viewAsStatus?.user_role?.replace(/_/g, ' ') || ''; return `${un} (${ur})`; } return viewAsStatus?.agent_label || viewAsStatus?.agent_uuid || 'Unknown'; })()} ) : ( {getRoleDisplayName(user?.role)} )}
{!isViewAsMode && ( )}
)}
); }