"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarRail, SidebarSeparator, } from "@/components/ui/sidebar"; import { adminNavIconBySegment } from "@/modules/_config/admin-nav-icons"; import { ADMIN_BASE } from "@/modules/_config/admin-nav"; import { useAdminProfile } from "@/stores/admin-session"; function isActive(pathname: string, item: { href: string; activeMatchPrefix?: string; segment?: string }): boolean { const { href, activeMatchPrefix, segment } = item; const prefix = activeMatchPrefix ?? href; if (prefix === ADMIN_BASE || prefix === `${ADMIN_BASE}/`) { return pathname === ADMIN_BASE || pathname === `${ADMIN_BASE}/`; } // Keep "settings" independent from its child routes like /admin/settings/currencies. if (segment === "settings") { return pathname === href; } return pathname === prefix || pathname.startsWith(`${prefix}/`); } export function AdminAppSidebar() { const { t } = useTranslation(["common", "dashboard", "players", "draws", "config", "wallet", "risk", "settlement", "jackpot", "reconcile", "tickets", "audit"]); const pathname = usePathname(); const profile = useAdminProfile(); const visibleNav = useMemo( () => (profile?.navigation ?? []).filter((item) => item.segment !== "risk"), [profile?.navigation], ); return ( } className="h-full min-h-0 justify-start px-1 py-0 hover:bg-transparent group-data-[collapsible=icon]:justify-center" >
N lotto
{t("sidebar.workspace", { ns: "common", defaultValue: "Workspace" })} {visibleNav.map((item) => { const Icon = adminNavIconBySegment[item.segment]; return ( } className="font-medium text-sidebar-foreground/90 hover:text-sidebar-accent-foreground data-active:bg-red-600 data-active:text-white data-active:shadow-sm" > {t(`nav.${item.segment}`, { ns: "common", defaultValue: item.label })} ); })} ); }