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 { NavItem, type NavGroup } from './types'
export function NavGroup({ title, items }: NavGroup) {
const { setOpenMobile } = useSidebar()
const href = useLocation({ select: (location) => location.href })
return (
{title}
{items.map((item) => {
if (!item.items) {
return (
setOpenMobile(false)}>
{item.icon && }
{item.title}
{item.badge && {item.badge}}
)
}
return (
{item.icon && }
{item.title}
{item.badge && {item.badge}}
{item.items.map((subItem) => (
setOpenMobile(false)}
>
{subItem.icon && }
{subItem.title}
{subItem.badge && (
{subItem.badge}
)}
))}
)
})}
)
}
const NavBadge = ({ children }: { children: ReactNode }) => (
{children}
)
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])
)
}