60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import { Link } from '@inertiajs/react';
|
|
import {
|
|
SidebarGroup,
|
|
SidebarGroupLabel,
|
|
SidebarMenu,
|
|
SidebarMenuButton,
|
|
SidebarMenuItem,
|
|
} from '@/components/ui/sidebar';
|
|
import { useCurrentUrl } from '@/hooks/use-current-url';
|
|
import { toUrl } from '@/lib/utils';
|
|
import type { NavItem } from '@/types';
|
|
|
|
export function NavMain({
|
|
items,
|
|
title = 'Navegação',
|
|
}: {
|
|
items: NavItem[];
|
|
title?: string;
|
|
}) {
|
|
const { isCurrentOrParentUrl, currentUrl } = useCurrentUrl();
|
|
const receivingOrder = /^\/ordens\/\d+\/recepcoes/.test(currentUrl);
|
|
|
|
return (
|
|
<SidebarGroup className="px-2 py-0">
|
|
<SidebarGroupLabel>{title}</SidebarGroupLabel>
|
|
<SidebarMenu>
|
|
{items.map((item) => (
|
|
<SidebarMenuItem key={item.title}>
|
|
<SidebarMenuButton
|
|
asChild
|
|
isActive={
|
|
(toUrl(item.href) === '/recepcoes' &&
|
|
receivingOrder) ||
|
|
(isCurrentOrParentUrl(item.href) &&
|
|
!(
|
|
toUrl(item.href) === '/ordens' &&
|
|
receivingOrder
|
|
))
|
|
}
|
|
tooltip={{ children: item.title }}
|
|
>
|
|
{item.fullPage ? (
|
|
<a href={toUrl(item.href)}>
|
|
{item.icon && <item.icon />}
|
|
<span>{item.title}</span>
|
|
</a>
|
|
) : (
|
|
<Link href={item.href} prefetch>
|
|
{item.icon && <item.icon />}
|
|
<span>{item.title}</span>
|
|
</Link>
|
|
)}
|
|
</SidebarMenuButton>
|
|
</SidebarMenuItem>
|
|
))}
|
|
</SidebarMenu>
|
|
</SidebarGroup>
|
|
);
|
|
}
|