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}
>
)}
);
})}
);
}