import { useMemo } from "react"; import { GffEditor, GffFieldType, getFieldValue, getLocStringText, type FieldOverrideProps, } from "./GffEditor"; interface ItemEditorProps { repo: string; filePath: string; content: string; onSave?: (content: string) => void; onSwitchToRaw?: () => void; } function BaseItemOverride({ value, onChange, field }: FieldOverrideProps) { const num = typeof value === "number" ? value : 0; return (
onChange(field.label, parseInt(e.target.value, 10))} className="w-24 rounded border px-2 py-1.5 text-sm" style={{ backgroundColor: "var(--forge-bg)", borderColor: "var(--forge-border)", color: "var(--forge-text)", }} /> (baseitems.2da row)
); } function CompactNumbersOverride({ value, onChange, field, data }: FieldOverrideProps) { const stackSize = typeof getFieldValue(data, "StackSize") === "number" ? (getFieldValue(data, "StackSize") as number) : 0; const cost = typeof getFieldValue(data, "Cost") === "number" ? (getFieldValue(data, "Cost") as number) : 0; const charges = typeof getFieldValue(data, "Charges") === "number" ? (getFieldValue(data, "Charges") as number) : 0; if (field.label !== "StackSize") return null; return (
{[ { label: "StackSize", display: "Stack", value: stackSize, max: 99 }, { label: "Cost", display: "Cost (gp)", value: cost, max: 999999 }, { label: "Charges", display: "Charges", value: charges, max: 255 }, ].map((item) => (
onChange(item.label, parseInt(e.target.value, 10))} className="w-24 rounded border px-2 py-1.5 text-sm" style={{ backgroundColor: "var(--forge-bg)", borderColor: "var(--forge-border)", color: "var(--forge-text)", }} />
))}
); } function BooleanFlagsOverride({ data, onChange }: FieldOverrideProps) { const flags = [ { label: "Identified", display: "Identified" }, { label: "Plot", display: "Plot" }, { label: "Stolen", display: "Stolen" }, { label: "Cursed", display: "Cursed" }, ]; return (
{flags.map((flag) => { const val = getFieldValue(data, flag.label); const checked = typeof val === "number" ? val !== 0 : Boolean(val); return ( ); })}
); } function PropertiesListOverride({ value }: FieldOverrideProps) { const list = Array.isArray(value) ? value : []; return (
Item Properties
{list.map((prop, i) => (
{typeof prop === "object" && prop !== null ? JSON.stringify(prop).slice(0, 80) : String(prop)}
))} {list.length === 0 && (

No item properties

)}
); } export function ItemEditor({ repo, filePath, content, onSave, onSwitchToRaw }: ItemEditorProps) { const fieldOverrides = useMemo(() => { const overrides = new Map React.ReactNode>(); overrides.set("BaseItem", (props) => ); overrides.set("StackSize", (props) => ); overrides.set("Cost", () => null); overrides.set("Charges", () => null); overrides.set("Identified", (props) => ); overrides.set("Plot", () => null); overrides.set("Stolen", () => null); overrides.set("Cursed", () => null); overrides.set("PropertiesList", (props) => ); return overrides; }, []); const itemName = useMemo(() => { try { const data = JSON.parse(content); const nameField = data.LocalizedName; return getLocStringText(nameField) || "(unnamed item)"; } catch { return "(unnamed item)"; } }, [content]); const headerSlot = (

{itemName}

); return ( ); }