import { useEffect, useRef, useState } from 'react' import { User } from '../types' import { useT, toggleLang } from '../i18n' interface Props { user: User sbUsers?: any[] onLogout: () => void onViewProfile?: () => void } const ROLE_COLOR: Record = { Manager: '#2563eb', Auditor: '#d97706', Employee: '#6b7280', Admin: '#7c3aed', 'X-Auditor': '#0f766e', Chairman: '#0f766e', } export default function UserMenu({ user, sbUsers = [], onLogout, onViewProfile }: Props) { const [open, setOpen] = useState(false) const ref = useRef(null) const t = useT() useEffect(() => { const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false) } document.addEventListener('mousedown', handler) return () => document.removeEventListener('mousedown', handler) }, []) const sbUser = sbUsers.find(u => u.name === user.name || u.username === user.name) const category = sbUser?.custom_category || user.role || 'User' const initials = (user.full_name || user.name || 'U').charAt(0).toUpperCase() const roleColor = ROLE_COLOR[user.role] || '#6b7280' return (
{open && (
{initials}
{user.full_name || user.name}
{user.name}
{category}
{ onViewProfile?.(); setOpen(false) }} /> { toggleLang(); setOpen(false) }} />
{ onLogout(); setOpen(false) }} />
)}
) } function MenuRow({ icon, label, color = '#374151', onClick }: { icon: string; label: string; color?: string; onClick: () => void }) { const [hover, setHover] = useState(false) return (
setHover(true)} onMouseLeave={() => setHover(false)} style={{ padding: '8px 14px', fontSize: 13, color, cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 9, background: hover ? (color === '#ef4444' ? '#fef2f2' : '#f9fafb') : 'white', transition: 'background 0.1s', }}> {icon} {label}
) }