import React, { useCallback } from "react"; import { Label } from '../components/ui/label'; import { Textarea } from '../components/ui/textarea'; export type JsonValue = | string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }; export function SimpleJsonEditor(props: { value: JsonValue; onChange: (value: JsonValue) => void; label?: string; isExpanded?: boolean; rawData?: string; onChangeRaw?: (rawData: string) => void; }) { const [tempDataValue, setTempDataValue] = React.useState( props.rawData || JSON.stringify(props.value, null, 2) ); React.useEffect(() => { if (props.rawData !== undefined) { setTempDataValue(props.rawData); } }, [props.rawData]); const [dataParseError, setDataParseError] = React.useState(); const onValueChange = useCallback( (e: React.ChangeEvent) => { const newRawValue = e.target.value; setTempDataValue(newRawValue); if (props.onChangeRaw) { props.onChangeRaw(newRawValue); } try { const data = JSON.parse(newRawValue); setDataParseError(undefined); props.onChange(data); } catch (e) { setDataParseError((e as Error).message); } }, [props] ); return (
{props.label && }