"use client"; import { CheckCircle2Icon, PencilIcon, TrashIcon } from "lucide-react"; import type { Asset, Loadout } from "@/payload-types"; import { Button } from "@/components/ui/button"; import { Item, ItemContent, ItemHeader, ItemTitle } from "@/components/ui/item"; import { getAssetTypeLabel, LOADOUT_SLOTS, type LockerGridItem, type LoadoutSlots } from "@/lib/locker"; function resolveSlotValue(value: LoadoutSlots[keyof LoadoutSlots]): Asset | null { if (value == null) return null; if (typeof value === "object" && "id" in value) return value as Asset; return null; } function slotDisplayName(asset: Asset, ownedItems: LockerGridItem[]): string { const custom = ownedItems.find((i) => i.assetId === asset.id)?.equipment?.customName?.trim(); return custom || asset.name; } interface LoadoutCardProps { loadout: Loadout; ownedItems: LockerGridItem[]; onEdit: () => void; onDelete: () => void; onEquip: () => void; } export function LoadoutCard({ loadout, ownedItems, onEdit, onDelete, onEquip }: LoadoutCardProps) { const slots = (loadout.slots ?? {}) as LoadoutSlots; const filled = LOADOUT_SLOTS.filter((slot) => { const v = slots[slot.name]; return v != null && (typeof v !== "object" || (typeof v === "object" && "id" in v)); }); return ( {loadout.name} {loadout.equipped && ( Equipped )} {loadout.description && ( {loadout.description} )}
{filled.length === 0 && ( No equipment assigned. )} {filled.map((slot) => { const value = slots[slot.name]; const asset = resolveSlotValue(value); if (!asset) return null; return ( {slot.label}: {slotDisplayName(asset, ownedItems)} ({getAssetTypeLabel(asset.assetType)}) ); })}
); }