"use client"; import * as React from "react"; import { ArrowLeftRight, Bolt, Shield, Users, Maximize, Minimize, SparkleIcon, } from "lucide-react"; import { NavCore } from "@/components/frontend/blocks/NavCore"; import { NavSecondary } from "@/components/frontend/blocks/NavSecondary"; import { NavUser } from "@/components/frontend/blocks/NavUser"; import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "@/components/ui/sidebar"; import Image from "next/image"; import Link from "next/link"; import XPDisplay from "@/components/frontend/blocks/XPDisplay"; import type { ResolvedLevel } from "@/utils/xp/resolveLevel"; import type { User } from "@/payload-types"; import { Progress } from "@/components/ui/progress"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { updatePreferences } from "@/app/(frontend)/account/actions"; import { sidebarData } from "@/components/frontend/blocks/sidebarData"; const data = { navMain: [ { title: "Dashboard", url: "/", icon: Bolt, }, { title: "Roster", url: "/roster", icon: Users, }, { title: "Transfers", url: "/transfers", icon: ArrowLeftRight, }, ], ...sidebarData, }; export function AppSidebar({ user, xpLevel, adminUrl, hasIntelligence = true, hasLogistics = true, showCallsign = false, canImpersonate = false, preferences, ...props }: { user: { displayName: string; username: string; rank: string; }; xpLevel: ResolvedLevel; adminUrl?: string; hasIntelligence?: boolean; hasLogistics?: boolean; showCallsign?: boolean; canImpersonate?: boolean; preferences?: NonNullable; } & React.ComponentProps) { const [isMiniMode, setIsMiniMode] = React.useState( preferences?.display?.xpDisplayMini ?? false, ); // Re-sync when the saved preference changes (e.g. account page save + router.refresh()). const savedXpDisplayMini = preferences?.display?.xpDisplayMini ?? false; React.useEffect(() => { setIsMiniMode(savedXpDisplayMini); }, [savedXpDisplayMini]); const handleToggleXPMode = React.useCallback(async () => { try { await updatePreferences({ mutedAll: preferences?.notifications?.mutedAll ?? false, mutedTypes: preferences?.notifications?.mutedTypes ?? [], showCallsign: preferences?.display?.showCallsign ?? false, showVersionOverlay: preferences?.display?.showVersionOverlay ?? true, showBackgroundTexture: preferences?.display?.showBackgroundTexture ?? true, leadOrActual: preferences?.display?.leadOrActual ?? "lead", discordEnabled: preferences?.discord?.enabled ?? false, discordMutedTypes: preferences?.discord?.mutedTypes ?? [], xpDisplayMini: !isMiniMode, }); setIsMiniMode(!isMiniMode); } catch (error) { console.error("Failed to update XP display preference:", error); } }, [isMiniMode, preferences]); return ( {/*
Polaris Task Force Enterprise
*/}
Polaris Task Force
{hasIntelligence && ( typeof i.items === "object" ? { ...i, items: [...i.items] } : { ...i }, )} /> )} {hasLogistics && ( typeof i.items === "object" ? { ...i, items: [...i.items] } : { ...i }, )} /> )} {/**/}

{isMiniMode ? (
{xpLevel.levelName}

{xpLevel.levelDesc}

{xpLevel.xp.toLocaleString()}
) : ( )}
); }