import { Link } from '@tanstack/react-router'; import { useTranslation } from 'react-i18next'; import { LayoutDashboard, Users, FileText, Package, Settings, X } from 'lucide-react'; import type { LucideIcon } from 'lucide-react'; import { cn } from '@/lib/utils'; import { useAuth } from '@/features/auth/context/auth-context'; import { useAvailabilityStatus } from '@/features/availability/services/useAvailability'; import { useSystemCapabilities } from '@/features/system/services/useSystemCapabilities'; import { LanguageSwitcher } from '@/i18n/LanguageSwitcher'; import { ThemeToggle } from './ThemeToggle'; import { UserMenu } from './UserMenu'; type Role = 'Owner' | 'Administrator' | 'User'; interface NavItem { to: string; labelKey: string; icon: LucideIcon; testId: string; roles?: Role[]; requiredModule?: string; } const ALLOWED_WHEN_UNAVAILABLE = ['/dashboard', '/settings']; const NAV_ITEMS: NavItem[] = [ { to: '/dashboard', labelKey: 'nav.dashboard', icon: LayoutDashboard, testId: 'nav-dashboard' }, { to: '/users', labelKey: 'nav.users', icon: Users, testId: 'nav-users', roles: ['Owner', 'Administrator'] }, { to: '/cms', labelKey: 'nav.cms', icon: FileText, testId: 'nav-cms', roles: ['Owner'], requiredModule: 'Master' }, { to: '/offerings', labelKey: 'nav.offerings', icon: Package, testId: 'nav-offerings', roles: ['Owner', 'Administrator'], requiredModule: 'Offerings', }, ]; const SETTINGS_ITEM: NavItem = { to: '/settings', labelKey: 'nav.settings', icon: Settings, testId: 'nav-settings', roles: ['Owner'], }; interface SidebarProps { onClose?: () => void; } export function Sidebar({ onClose }: SidebarProps = {}) { const { t } = useTranslation(); const { user } = useAuth(); const { data: availability } = useAvailabilityStatus(); const { data: capabilities } = useSystemCapabilities(); const role = user?.role as Role | undefined; const systemUnavailable = availability?.status === 'NotAvailable'; const visibleItems = NAV_ITEMS.filter( (item) => (!item.roles || (role && item.roles.includes(role))) && (!item.requiredModule || capabilities?.modules.includes(item.requiredModule)) ); const showSettings = !SETTINGS_ITEM.roles || (role && SETTINGS_ITEM.roles.includes(role)); return ( ); }