"use client"; import { useMemo } from "react"; import { Backpack, Crosshair, Eye, Glasses, Rocket, Shield, Shirt, Target, User, } from "lucide-react"; import type { Asset, Loadout } from "@/payload-types"; import { WARDROBE_SLOT_LAYOUT, getLoadoutSlot, type WardrobeSlotIcon, type LoadoutSlots, type LockerGridItem, } from "@/lib/locker"; import { cn } from "@/lib/utils"; import { getAssetIcon } from "./LockerGrid"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; function slotIcon(icon: WardrobeSlotIcon, filled: boolean) { const cls = filled ? "size-3.5" : "size-3"; switch (icon) { case "head": return ; case "eye": return ; case "face": return ; case "chest": return ; case "torso": return ; case "back": return ; case "weapon": return ; case "sidearm": return ; case "heavy": return ; } } function resolveSlotAsset( value: LoadoutSlots[keyof LoadoutSlots], items: LockerGridItem[], ): Asset | null { if (value == null) return null; if (typeof value === "object" && "id" in value) return value as Asset; const id = value as number; return items.find((i) => i.assetId === id)?.asset ?? null; } export function Wardrobe({ loadout, items, onSlotClick, }: { loadout: Loadout; items: LockerGridItem[]; onSlotClick: (slotName: string) => void; }) { const slots = (loadout.slots ?? {}) as LoadoutSlots; const filled = useMemo(() => { const set = new Set(); for (const layout of WARDROBE_SLOT_LAYOUT) { const value = slots[layout.name]; if (value != null) set.add(layout.zone); } return set; }, [slots]); return (
Character wardrobe reflecting the equipped loadout {WARDROBE_SLOT_LAYOUT.map((layout) => { const value = slots[layout.name]; const asset = resolveSlotAsset(value, items); return (
{layout.label} {asset ? asset.name : "Empty"}
); })}
); }