"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { BedDouble, Bell, BookOpenText, Building2, ClipboardCheck, Globe2, HeartPulse, LayoutDashboard, ListChecks, LockKeyhole, Radio, ReceiptText, Settings, ShieldAlert, TabletSmartphone, UserRoundCheck, Users, Wrench, } from "lucide-react"; import type { LucideIcon } from "lucide-react"; import type { Permission } from "@/modules/core/types"; import { navGroups, type NavIconKey, type NavItem } from "@/modules/shared/lib/navigation"; import { getWorkspaceHref, isWorkspacePathActive } from "@/modules/shared/lib/workspace-routing"; import { cn } from "@/lib/utils"; const iconMap: Record = { alerts: Radio, audit: ListChecks, beds: BedDouble, billing: ReceiptText, care: ClipboardCheck, dashboard: LayoutDashboard, devices: TabletSmartphone, emergency: ShieldAlert, family: UserRoundCheck, global: Globe2, health: HeartPulse, knowledge: BookOpenText, notices: Bell, organizations: Building2, roles: Settings, status: Wrench, users: Users, }; type AppSidebarNavProps = { organizationSlug?: string; permissions: Permission[]; }; type SidebarNavItem = NavItem & { canAccess: boolean; }; function canViewNavItem(item: NavItem, permissions: readonly Permission[]): boolean { if (permissions.includes("platform:manage")) { return true; } if (item.permission && !permissions.includes(item.permission)) { return false; } if (item.anyPermissions && !item.anyPermissions.some((permission) => permissions.includes(permission))) { return false; } return true; } export function AppSidebarNav({ organizationSlug, permissions }: AppSidebarNavProps): React.ReactElement { const pathname = usePathname(); const visibleNavGroups = navGroups.map((group): { label: string; items: SidebarNavItem[] } => ({ ...group, items: group.items.map((item) => ({ ...item, canAccess: canViewNavItem(item, permissions), })), })); return ( ); }