Files
saladeaula.digital/apps/admin.saladeaula.digital/app/components/nav-main.tsx
2025-11-06 10:06:10 -03:00

84 lines
1.9 KiB
TypeScript

'use client'
import {
SidebarGroup,
SidebarGroupContent,
SidebarGroupLabel,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
useSidebar
} from '@repo/ui/components/ui/sidebar'
import { useIsMobile } from '@repo/ui/hooks/use-mobile'
import { type LucideIcon } from 'lucide-react'
import { NavLink, useParams } from 'react-router'
type NavItem = {
title: string
url: string
icon?: LucideIcon
}
export function NavMain({
data
}: {
data: {
navMain: NavItem[]
navContent: NavItem[]
}
}) {
return (
<>
<SidebarGroup>
<SidebarGroupContent>
<SidebarMenu>
{data.navMain.map((props, idx) => (
<SidebarMenuItemLink key={idx} {...props} />
))}
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
<SidebarGroup>
<SidebarGroupContent>
<SidebarMenu>
<SidebarGroupLabel>Gestão de matrículas</SidebarGroupLabel>
{data.navContent.map((props, idx) => (
<SidebarMenuItemLink key={idx} {...props} />
))}
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
</>
)
}
function SidebarMenuItemLink({ title, url, icon: Icon }: NavItem) {
const { orgid } = useParams()
const { toggleSidebar } = useSidebar()
const isMobile = useIsMobile()
const onToggle = () => (isMobile ? toggleSidebar() : null)
return (
<SidebarMenuItem key={title} onClick={onToggle}>
<NavLink to={`/${orgid}${url}`}>
{({ isActive }) => (
<SidebarMenuButton
asChild
className="data-[active=true]:text-lime-500"
isActive={isActive}
tooltip={title}
>
<span>
{Icon && <Icon />}
<span>{title}</span>
</span>
</SidebarMenuButton>
)}
</NavLink>
</SidebarMenuItem>
)
}