import { GameStructure, Resource } from "@/payload-types"; import { convertLexicalToPlaintext } from "@payloadcms/richtext-lexical/plaintext"; import { pluralize } from "@/lib/utils"; import { Item, ItemContent, ItemDescription, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, } from "@/components/ui/item"; import { BrainIcon, DropletIcon, PackageOpenIcon, ZapIcon } from "lucide-react"; interface ResourceListProps { storedResources: GameStructure["storedResources"]; maxCapacityMass: number | null; } function getResourceIcon(type: Resource["type"]) { switch (type) { case "fluid": return ; case "energy": return ; case "abstract": return ; default: return ; } } export function ResourceList({ storedResources, maxCapacityMass }: ResourceListProps) { const resources = storedResources ?? []; if (resources.length === 0) { return ( Stored Resources No resources currently stored. ); } return ( Stored Resources {resources.length} resource type{resources.length !== 1 ? "s" : ""} {resources.map((entry, index) => { const resource = entry.resource as Resource; if (!resource || typeof resource === "number") return null; const mass = (resource.massPerUnit ?? 0) * entry.amount; const description = resource.description ? convertLexicalToPlaintext({ data: resource.description }) : null; return ( {resource.icon ? ( ) : ( getResourceIcon(resource.type) )} {resource.name} {entry.amount.toLocaleString()}{" "} {pluralize(entry.amount, resource.unitOfMeasure)} {description && ( {description} )} {entry.amount.toLocaleString()}{" "} {pluralize(entry.amount, resource.unitOfMeasure)} {mass > 0 && `${mass.toLocaleString()} kg mass`} {mass > 0 && " ยท "} {(resource.baseValue * entry.amount).toLocaleString()} value {index < resources.length - 1 && } ); })} ); }
No resources currently stored.