"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import type { Loadout } from "@/payload-types"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { setLoadoutSlot, equipLoadout } from "@/app/(frontend)/locker/actions"; import { getLoadoutSlot, getWardrobeSlot, type LoadoutSlots, type LockerGridItem, } from "@/lib/locker"; import { Wardrobe } from "./Wardrobe"; import { WardrobeSlotPicker } from "./WardrobeSlotPicker"; import { cn } from "@/lib/utils"; interface LockerCharacterPanelProps { loadouts: Loadout[]; items: LockerGridItem[]; } export function LockerCharacterPanel({ loadouts, items }: LockerCharacterPanelProps) { const router = useRouter(); const equippedLoadout = loadouts.find((loadout) => loadout.equipped) ?? null; const [pickerSlot, setPickerSlot] = useState(null); const [busy, setBusy] = useState(false); const slots = (equippedLoadout?.slots ?? {}) as LoadoutSlots; const pickerLayout = pickerSlot ? getWardrobeSlot(pickerSlot) : null; const pickerConfig = pickerSlot ? getLoadoutSlot(pickerSlot) : null; async function changeLoadout(id: string) { setBusy(true); const result = await equipLoadout(Number(id)); setBusy(false); if (result.success) router.refresh(); } async function pickSlot(assetId: number | null) { if (!equippedLoadout || !pickerSlot) return { success: false, error: "No loadout equipped." }; setBusy(true); const result = await setLoadoutSlot(equippedLoadout.id, pickerSlot, assetId); setBusy(false); if (result.success) { setPickerSlot(null); router.refresh(); } return result; } return (

CHARACTER

EQUIPMENT STATUS

Click a slot to equip
{pickerLayout && pickerConfig && ( { if (!open) setPickerSlot(null); }} slot={pickerConfig} items={items} currentValue={slots[pickerSlot as keyof LoadoutSlots] ?? null} busy={busy} onPick={pickSlot} /> )}
); }