2025-04-02 17:49:09 +05:45

69 lines
3.2 KiB
TypeScript

import { ChevronRight } from 'lucide-react';
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';
import {
SidebarGroup,
SidebarGroupLabel,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
SidebarMenuSub,
SidebarMenuSubButton,
SidebarMenuSubItem,
} from '@/components/ui/sidebar';
import { type NavGroup } from '@/types';
import { Link, usePage } from '@inertiajs/react';
export function NavMain({ navGroup }: { navGroup: NavGroup }) {
const page = usePage();
return (
<SidebarGroup>
<SidebarGroupLabel>Platform</SidebarGroupLabel>
<SidebarMenu>
{navGroup.items.map((navItem) =>
navItem.type === 'group' ? (
<Collapsible
key={navItem.title}
asChild
defaultOpen={navItem.items?.some((subItem) => subItem.href === page.url)}
className="group/collapsible"
>
<SidebarMenuItem>
<CollapsibleTrigger asChild>
<SidebarMenuButton tooltip={navItem.title}>
{navItem.icon && <navItem.icon />}
<span>{navItem.title}</span>
<ChevronRight className="ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" />
</SidebarMenuButton>
</CollapsibleTrigger>
<CollapsibleContent>
<SidebarMenuSub>
{navItem.items?.map((subItem) => (
<SidebarMenuSubItem key={subItem.title}>
<SidebarMenuSubButton asChild isActive={subItem.href === page.url}>
<Link href={subItem.href} prefetch>
<span>{subItem.title}</span>
</Link>
</SidebarMenuSubButton>
</SidebarMenuSubItem>
))}
</SidebarMenuSub>
</CollapsibleContent>
</SidebarMenuItem>
</Collapsible>
) : (
<SidebarMenuItem key={navItem.title}>
<SidebarMenuButton asChild isActive={navItem.href === page.url} tooltip={{ children: navItem.title }}>
<Link href={navItem.href} prefetch>
{navItem.icon && <navItem.icon />}
<span>{navItem.title}</span>
</Link>
</SidebarMenuButton>
</SidebarMenuItem>
),
)}
</SidebarMenu>
</SidebarGroup>
);
}