import { useEffect, useState } from 'react'; import { widget, WidgetPlugin, StringNode, ParentNode, getData, JsonError, DefaultNodeOptions, getErrors, WidgetField, JsonNode } from '@sagold/react-json-editor'; import { Textarea } from '@mantine/core'; import { widgetInputProps } from '../components/widgetInputProps'; import { WidgetMenuItems } from '../components/widgetmenu/WidgetMenu'; const invalidJsonError: JsonError = { type: 'error', name: 'InvalidJsonError', code: 'invalid-json-error', message: 'Invalid json format', data: { pointer: '#', value: {}, schema: {} } } as const; export type SimpleJsonOptions = { /** if false, will hide title. will hide complete title-header if no menu-actions are available */ showHeader?: boolean; /** internal option for menu action items */ widgetMenuItems?: WidgetMenuItems; } & DefaultNodeOptions; export const SimpleJsonWidget = (props: any) => { const node = props!.node as JsonNode; if (node.schema.type === 'string') { return ; } return ; }; export const SimpleJsonStringWidget = widget, string>(({ node, options, setValue }) => { const [error, setError] = useState(undefined); const [internalValue, setInternalValue] = useState(node.value ?? ''); useEffect(() => { let value = node.value ?? ''; try { value = JSON.stringify(JSON.parse(value), null, 2); } catch { /* ignore */ } setInternalValue(value); }, [setInternalValue, node.value]); let errors = node.errors.map((error) => error.message).join('\n'); if (error) { errors = `${error.message}${node.errors.length ? `\n${node.errors.map((e) => e.message).join('\n')}` : ''}`; } return (