import { NavLink } from 'react-router-dom' import { LayoutDashboard, Users, LogOut, Settings, FolderOpen, Shield, Menu as MenuIcon, Building2, User, ChevronDown, Cpu, Key, MessageSquare, BarChart3, Wallet, } from 'lucide-react' import type { LucideIcon } from 'lucide-react' import { useAuth } from '@/contexts/AuthContext' import { useState, useRef, useEffect } from 'react' import type { MenuItem } from '@/types' const iconMap: Record = { User, LayoutDashboard, Users, FolderOpen, Shield, Menu: MenuIcon, Building2, Settings, Cpu, Key, MessageSquare, BarChart3, Wallet, } function getIcon(iconName: string): LucideIcon { return iconMap[iconName] || LayoutDashboard } export function Sidebar() { const { user, logout, userMenus, currentOrg, userOrgs, switchOrg } = useAuth() const [orgDropdownOpen, setOrgDropdownOpen] = useState(false) const dropdownRef = useRef(null) useEffect(() => { function handleClickOutside(e: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) { setOrgDropdownOpen(false) } } document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, []) const handleSwitchOrg = async (orgId: number) => { await switchOrg(orgId) setOrgDropdownOpen(false) } const menuItems: MenuItem[] = userMenus.length > 0 ? userMenus : [] return ( ) } function cn(...classes: (string | undefined | false | null)[]) { return classes.filter(Boolean).join(' ') }