'use client' import Link from 'next/link' import { usePathname } from 'next/navigation' import { HugeiconsIcon } from '@hugeicons/react' import { ChevronRightIcon, UserIcon } from '@hugeicons/core-free-icons' import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarRail, } from '@/components/ui/sidebar' import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { useAuth, type Role } from '@/contexts/auth-context' import { DASHBOARD_ITEM, NAV_GROUPS, type NavGroup, type NavItem } from '@/config/nav' function canSee(item: NavItem, permissions: string[]): boolean { if (!item.permission) return true return permissions.includes('*') || permissions.includes(item.permission) } function isGroupVisible(group: NavGroup, permissions: string[]): boolean { return group.items.some((item) => canSee(item, permissions)) } export function AppSidebar() { const { user, setRole, permissions } = useAuth() const pathname = usePathname() const dashboardActive = pathname === DASHBOARD_ITEM.href return (
D
Distribution
{/* Dashboard — standalone, not inside a collapsible group */} } isActive={dashboardActive} tooltip={DASHBOARD_ITEM.title} > {DASHBOARD_ITEM.title} {/* Collapsible groups */} {NAV_GROUPS.map((group) => { if (!isGroupVisible(group, permissions)) return null const visibleItems = group.items.filter((item) => canSee(item, permissions), ) const groupActive = visibleItems.some( (item) => pathname === item.href || (item.href !== '/' && pathname.startsWith(item.href)), ) return ( {/* Group trigger — looks like a regular nav button */} } isActive={groupActive} tooltip={group.title} > {group.title} {/* Sub-items with indent line */} {visibleItems.map((item) => { const isActive = pathname === item.href || (item.href !== '/' && pathname.startsWith(item.href)) return ( } isActive={isActive} > {item.title} ) })} ) })}
{user.fullName}
) }