import {useState} from "react"; import {Check, Plus, Trash2, X} from "lucide-react"; import type { JSONSchemaType } from "../defs/types"; import PropertyEditor from "./PropertyEditor.tsx"; import styles from "../defs/styles.tsx"; import type {FieldVisibility} from "../defs/interfaces.tsx"; export const DefsEditor = ({ defs, onChange, rootSchema, visibility, }: { defs: Record, onChange: (defs: Record) => void, rootSchema: JSONSchemaType, visibility: FieldVisibility, }) => { const [isAddingDef, setIsAddingDef] = useState(false); const [newDefName, setNewDefName] = useState(''); const handleAddDef = () => { if (newDefName && !defs[newDefName]) { const newDefs = { ...defs }; newDefs[newDefName] = { type: 'object', properties: {} }; onChange(newDefs); setNewDefName(''); setIsAddingDef(false); } }; const handleDeleteDef = (defName: string) => { const newDefs = { ...defs }; delete newDefs[defName]; onChange(Object.keys(newDefs).length ? newDefs : {}); }; return (

Definitions ($defs)

{!isAddingDef ? ( ) : (
setNewDefName(e.target.value)} className="border border-gray-300 rounded px-2 py-1 mr-2" placeholder="Definition name" />
)}
{defs && Object.entries(defs).map(([defName, defSchema]) => (

{defName}

{ const newDefs = { ...defs }; newDefs[defName] = newDefSchema; onChange(newDefs); }} rootSchema={rootSchema} visibility={visibility} />
))} {(!defs || Object.keys(defs).length === 0) && (

No definitions yet. Add one to reference it elsewhere in your schema.

)}
); }; export default DefsEditor;