'use client'; import * as React from 'react'; import { ChevronRight, Package } from 'lucide-react'; import { NavUser } from '@/components/nav-user'; import { filterMenuItems, menuItems, type MenuItem, } from '@/config/menu.config'; import { usePermissions } from '@/hooks/usePermissions'; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible'; import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarRail, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarGroup, SidebarGroupLabel, } from '@/components/ui/sidebar'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { useAppStore } from '@/store/app.store'; export function AppSidebar({ ...props }: React.ComponentProps) { const pathname = usePathname(); const { hasPermission } = usePermissions(); const authUser = useAppStore((state) => state.user); const navItems = filterMenuItems(menuItems, hasPermission); const user = { name: [authUser?.first_name, authUser?.last_name].filter(Boolean).join(' ') || 'Admin', email: authUser?.email || '', avatar: authUser?.profile_photo_url || '/avatars/profile.jpg', }; return (
Vision Road Analytics Platform
{navItems.map((item) => ( ))}
); } function SidebarNavItem({ item, pathname, }: { item: MenuItem; pathname: string; }) { const isActive = item.path ? pathname === item.path : false; const isChildActive = item.children?.some((child) => child.path === pathname) ?? false; const hasChildren = Boolean(item.children?.length); if (hasChildren) { return ( {item.title} {item.children?.map((child) => ( {child.path ? ( {child.title} ) : null} ))} ); } return ( {item.path ? ( {item.title} ) : ( {item.title} )} ); }