/** * This is used only for storybook stories. Internally. */ /* eslint-disable react-perf/jsx-no-new-function-as-prop */ /* eslint-disable react-perf/jsx-no-new-object-as-prop */ import type { dia } from '@joint/core'; interface CellExplorerProps { readonly cell: dia.Cell.JSON; readonly onChange?: (cell: dia.Cell.JSON) => void; } interface Props { readonly keyName: string; readonly parentKey?: string; readonly value: unknown; readonly onChange: (newValue: unknown) => void; } const MARGIN = '8px'; function EditableField({ keyName, parentKey, value, onChange }: Readonly) { const handleChange = (key: string, newValue: unknown) => { if (typeof value === 'object' && value !== null) { onChange({ ...value, [key]: newValue }); } else { onChange(newValue); } }; const parseValue = (inputValue: string) => { if (typeof value === 'number') { return Number.isNaN(Number(inputValue)) ? value : Number(inputValue); } return inputValue; }; if (typeof value === 'object' && value !== null) { return (
{Object.entries(value).map(([key, value_]) => ( handleChange(key, newValue)} /> ))}
); } return (
onChange(parseValue(event.target.value))} style={{ marginLeft: MARGIN }} />
); } function CellExplorer({ cell, onChange }: Readonly) { const handleInputChange = (key: string, value: unknown) => { if (onChange) { onChange({ ...cell, [key]: value }); } }; return (

Cell ID: {cell.id}

{Object.entries(cell).map(([key, value]) => { return ( handleInputChange(key, newValue)} /> ); })}
); } interface CellsExplorerProps { readonly elements: dia.Cell.JSON[]; readonly onChange: (cells: dia.Cell.JSON[]) => void; } function CellsExplorer({ elements: cells, onChange }: Readonly) { return (
{cells.map((cell) => { if (!cell) { return null; } return ( { const updatedCells = cells.map((c) => { if (!c) { return c; } if (c.id === newCell.id) { return newCell; } return c; }); onChange(updatedCells); }} /> ); })}
); } export { CellExplorer, CellsExplorer };