/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { useState, useEffect, forwardRef, useImperativeHandle, useRef } from "react"; import { EuiCodeEditor, EuiCodeEditorProps, EuiFormRow } from "@elastic/eui"; export interface JSONEditorProps extends Partial { disabled?: boolean; value: string; onChange?: (value: JSONEditorProps["value"]) => void; } export interface IJSONEditorRef { validate: () => Promise; getValue: () => string; setValue: (val: string) => void; } const JSONEditor = forwardRef(({ value, onChange, disabled, ...others }: JSONEditorProps, ref: React.Ref) => { const [tempEditorValue, setTempEditorValue] = useState(value); const [confirmModalVisible, setConfirmModalVisible] = useState(false); const valueRef = useRef(tempEditorValue); valueRef.current = tempEditorValue; useEffect(() => { setTempEditorValue(value); }, [value]); useImperativeHandle(ref, () => ({ validate: () => new Promise((resolve, reject) => { try { JSON.parse(tempEditorValue); setConfirmModalVisible(false); resolve(""); } catch (e) { setConfirmModalVisible(true); reject("Format validate error"); } }), getValue: () => valueRef.current, setValue: (val) => setTempEditorValue(val), })); return ( <>