"use client"; import * as React from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { Disclosure, DisclosureButton, DisclosurePanel } from "@headlessui/react"; import { ChevronRight, PanelLeftClose, PanelLeftOpen } from "lucide-react"; import { useAuth } from "@/context/AuthContext"; export type AdminNavItem = { label: string; href: string; icon?: React.ReactNode; }; export type AdminNavGroup = { label: string; icon?: React.ReactNode; items: AdminNavItem[]; }; function cx(...classes: Array) { return classes.filter(Boolean).join(" "); } function isActiveRoute(pathname: string, href: string) { // Exact match for /admin, prefix match for nested pages if (href === "/admin") return pathname === "/admin"; return pathname === href || pathname.startsWith(`${href}/`); } function groupHasActiveItem(pathname: string, group: AdminNavGroup) { return group.items.some((i) => isActiveRoute(pathname, i.href)); } export default function AdminLeftNavigation({ collapsed, onToggleCollapsed, groups, }: { collapsed: boolean; onToggleCollapsed: () => void; groups: AdminNavGroup[]; }) { const pathname = usePathname() || "/admin"; const { user } = useAuth(); const identity = user?.displayName?.trim() || user?.username?.trim() || user?.email?.trim() || user?.uuid || "Admin"; const secondary = user?.email && user.email !== identity ? user.email : null; return ( ); }