import { ReactNode } from 'react' import { Link, useLocation } from '@tanstack/react-router' import { ChevronRight } from 'lucide-react' import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible' import { SidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, useSidebar, } from '@/components/ui/sidebar' import { Badge } from '../ui/badge' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '../ui/dropdown-menu' import { NavCollapsible, NavItem, NavLink, type NavGroup } from './types' export function NavGroup({ title, items }: NavGroup) { const { state } = useSidebar() const href = useLocation({ select: (location) => location.href }) return ( {title} {items.map((item) => { const key = `${item.title}-${item.url}` if (!item.items) return if (state === 'collapsed') return ( ) return })} ) } const NavBadge = ({ children }: { children: ReactNode }) => ( {children} ) const SidebarMenuLink = ({ item, href }: { item: NavLink; href: string }) => { const { setOpenMobile } = useSidebar() return ( setOpenMobile(false)}> {item.icon && } {item.title} {item.badge && {item.badge}} ) } const SidebarMenuCollapsible = ({ item, href, }: { item: NavCollapsible href: string }) => { const { setOpenMobile } = useSidebar() return ( {item.icon && } {item.title} {item.badge && {item.badge}} {item.items.map((subItem) => ( setOpenMobile(false)}> {subItem.icon && } {subItem.title} {subItem.badge && {subItem.badge}} ))} ) } const SidebarMenuCollapsedDropdown = ({ item, href, }: { item: NavCollapsible href: string }) => { return ( {item.icon && } {item.title} {item.badge && {item.badge}} {item.title} {item.badge ? `(${item.badge})` : ''} {item.items.map((sub) => ( {sub.icon && } {sub.title} {sub.badge && ( {sub.badge} )} ))} ) } function checkIsActive(href: string, item: NavItem, mainNav = false) { return ( href === item.url || // /endpint?search=param href.split('?')[0] === item.url || // endpoint !!item?.items?.filter((i) => i.url === href).length || // if child nav is active (mainNav && href.split('/')[1] !== '' && href.split('/')[1] === item?.url?.split('/')[1]) ) }