import { SidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, } from '@/components/ui/sidebar'; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible'; import { resolveUrl } from '@/lib/utils'; import { type NavItem } from '@/types'; import { Link, usePage } from '@inertiajs/react'; import { ChevronRight } from 'lucide-react'; import { useState } from 'react'; export function NavMain({ items = [] }: { items: NavItem[] }) { const page = usePage(); return ( Platform {items.map((item) => { const hasSubItems = item.items && item.items.length > 0; const isActive = item.href && page.url.startsWith(resolveUrl(item.href)); const hasActiveSubItem = hasSubItems && item.items?.some( (subItem) => subItem.href && page.url.startsWith(resolveUrl(subItem.href)), ); if (hasSubItems) { return ( ); } return ( {item.href ? ( {item.icon && } {item.title} ) : ( <> {item.icon && } {item.title} )} ); })} ); } function CollapsibleMenuItem({ item, page, isActive, }: { item: NavItem; page: ReturnType; isActive: boolean; }) { const [open, setOpen] = useState(isActive); return ( {item.icon && } {item.title} {item.items?.map((subItem) => { const subIsActive = subItem.href && page.url.startsWith(resolveUrl(subItem.href)); return ( {subItem.href ? ( {subItem.icon && ( )} {subItem.title} ) : ( <> {subItem.icon && ( )} {subItem.title} )} ); })} ); }