import type { ReactNode } from "react"; import { FuelIcon, SettingsIcon, HelpCircleIcon, BookOpenIcon, TrendingDownIcon, RoadHorizonIcon, HouseIcon } from "@/components/ui/phosphor-icons"; export type SidebarNavItem = { title: string; path?: string; icon?: ReactNode; isActive?: boolean; subItems?: SidebarNavItem[]; }; export type SidebarNavGroup = { label?: string; items: SidebarNavItem[]; }; const ROLE_ALLOWED_MAP_PATHS: Record = { superadmin: ["/dashboard/poverty", "/dashboard/land", "/dashboard/gas-station"], admin_poverty: ["/dashboard/poverty"], admin_lands_roads: ["/dashboard/land"], admin_gas_stations: ["/dashboard/gas-station"], }; const checkIsActive = (activePath?: string, itemPath?: string): boolean => { if (!activePath || !itemPath) return false; if (itemPath.startsWith("#")) return false; // Ignore hash placeholders if (itemPath === "/dashboard") { return activePath === "/dashboard"; } return activePath === itemPath || activePath.startsWith(itemPath + "/"); }; export const getNavGroups = (activePath?: string, role?: string): SidebarNavGroup[] => { const allowedMapPaths = role ? (ROLE_ALLOWED_MAP_PATHS[role] ?? []) : null; const allMapItems = [ { title: "Peta Kemiskinan", path: "/dashboard/poverty", icon: , }, { title: "Lahan & Jalan", path: "/dashboard/land", icon: , }, { title: "SPBU & Charger", path: "/dashboard/gas-station", icon: , }, ]; const mapItems = allMapItems .filter((item) => !allowedMapPaths || allowedMapPaths.includes(item.path)) .map((item) => ({ ...item, isActive: checkIsActive(activePath, item.path) })); return [ { label: "Ikhtisar", items: [ { title: "Beranda", path: "/dashboard", icon: , isActive: checkIsActive(activePath, "/dashboard"), }, ], }, { label: "Peta Visual", items: mapItems, }, { label: "Administrasi", items: [ { title: "Pengaturan", path: "/dashboard/settings", icon: , isActive: checkIsActive(activePath, "/dashboard/settings"), }, ], }, ]; }; export const navGroups = getNavGroups(); export const footerNavLinks: SidebarNavItem[] = [ { title: "Pusat Bantuan", path: "#/help", icon: , }, { title: "Dokumentasi", path: "#/documentation", icon: , }, ]; export const getNavLinks = (activePath?: string, role?: string): SidebarNavItem[] => [ ...getNavGroups(activePath, role).flatMap((group) => group.items.flatMap((item) => item.subItems?.length ? [item, ...item.subItems] : [item] ) ), ...footerNavLinks, ]; export const navLinks = getNavLinks();