Uecko_ERP/packages/rdx-ui/src/components/layout/nav-main.tsx

77 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-05-17 19:12:01 +00:00
import {
2025-09-22 09:24:19 +00:00
Collapsible,
CollapsibleContent,
CollapsibleTrigger,
2025-05-17 19:12:01 +00:00
SidebarGroup,
SidebarGroupContent,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
2025-09-22 09:24:19 +00:00
SidebarMenuSub,
SidebarMenuSubButton,
SidebarMenuSubItem,
2025-09-16 17:59:58 +00:00
} from "@repo/shadcn-ui/components";
2025-12-01 18:51:53 +00:00
import { ChevronRightIcon, type LucideIcon, PlusCircleIcon } from "lucide-react";
2025-09-16 17:59:58 +00:00
import { useNavigate } from "react-router";
2025-05-17 19:12:01 +00:00
2025-09-22 09:24:19 +00:00
type NavMainItem = {
title: string;
url?: string;
icon?: LucideIcon;
isActive?: boolean;
items?: {
2025-05-17 19:12:01 +00:00
title: string;
url: string;
}[];
2025-09-22 09:24:19 +00:00
};
2025-12-01 18:51:53 +00:00
export function NavMain({ items }: { items: NavMainItem[] }) {
2025-09-16 17:59:58 +00:00
const navigate = useNavigate();
2025-05-17 19:12:01 +00:00
return (
<SidebarGroup>
2025-12-01 18:51:53 +00:00
<SidebarGroupContent className="flex flex-col gap-2">
2025-05-17 19:12:01 +00:00
<SidebarMenu>
2025-12-01 18:51:53 +00:00
<SidebarMenuItem className="flex items-center gap-2">
2025-05-17 19:12:01 +00:00
<SidebarMenuButton
2025-12-01 18:51:53 +00:00
className="hidden min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground"
tooltip="Quick Create"
2025-05-17 19:12:01 +00:00
>
<PlusCircleIcon />
<span>Quick Create</span>
</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
<SidebarMenu>
{items.map((item) => (
2025-12-01 18:51:53 +00:00
<Collapsible asChild className="group/collapsible" defaultOpen={true} key={item.title}>
<SidebarMenuItem className="mb-6">
2025-09-22 09:24:19 +00:00
<CollapsibleTrigger asChild>
<SidebarMenuButton tooltip={item.title}>
{item.icon && <item.icon />}
2025-12-01 18:51:53 +00:00
<span className="font-semibold">{item.title}</span>
<ChevronRightIcon className="ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" />
2025-09-22 09:24:19 +00:00
</SidebarMenuButton>
</CollapsibleTrigger>
<CollapsibleContent>
<SidebarMenuSub>
{item.items?.map((subItem) => (
<SidebarMenuSubItem key={subItem.title}>
<SidebarMenuSubButton asChild>
<a href={subItem.url}>
<span>{subItem.title}</span>
</a>
</SidebarMenuSubButton>
</SidebarMenuSubItem>
))}
</SidebarMenuSub>
</CollapsibleContent>
</SidebarMenuItem>
</Collapsible>
2025-05-17 19:12:01 +00:00
))}
</SidebarMenu>
</SidebarGroupContent>
</SidebarGroup>
);
}