"use client"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuItem as SidebarMenuSubItem, useSidebar, } from "@/components/ui/sidebar"; import { cn } from "@/lib/utils"; import { ChevronDown, ChevronUp } from "lucide-react"; import Link from "next/link"; import type React from "react"; import { useState } from "react"; export type Route = { id: string; title: string; icon?: React.ReactNode; link: string; subs?: { title: string; link: string; icon?: React.ReactNode; }[]; }; export default function DashboardNavigation({ routes }: { routes: Route[] }) { const { state } = useSidebar(); const isCollapsed = state === "collapsed"; const [openCollapsible, setOpenCollapsible] = useState(null); return ( {routes.map((route) => { const isOpen = !isCollapsed && openCollapsible === route.id; const hasSubRoutes = !!route.subs?.length; return ( {hasSubRoutes ? ( setOpenCollapsible(open ? route.id : null) } className="w-full" > }>{route.icon}{!isCollapsed && ( {route.title} )}{!isCollapsed && hasSubRoutes && ( {isOpen ? ( ) : ( )} )} {!isCollapsed && ( {route.subs?.map((subRoute) => ( }>{subRoute.title} ))} )} ) : ( }>{route.icon}{!isCollapsed && ( {route.title} )} )} ); })} ); }