import React, {useState, useEffect, useLayoutEffect} from 'react'; import { IconButton, Dialog, Modal, Tooltip, DialogTitle, DialogContent } from '@material-ui/core'; import { FullscreenExit as FullscreenExitIcon, } from "@material-ui/icons"; import { useTheme } from '@material-ui/core/styles'; import { validateJson } from "../views/Workflows.jsx"; import ReactJson from "react-json-view"; import CodeMirror from '@uiw/react-codemirror'; import 'codemirror/keymap/sublime'; import 'codemirror/theme/gruvbox-dark.css'; const CodeEditor = (props) => { const { fieldCount, setFieldCount, actionlist, changeActionParameterCodeMirror, expansionModalOpen, setExpansionModalOpen, codedata, setcodedata } = props const [localcodedata, setlocalcodedata] = React.useState(codedata === undefined || codedata === null || codedata.length === 0 ? "" : codedata); // const {codelang, setcodelang} = props const theme = useTheme(); const [validation, setValidation] = React.useState(false); const [expOutput, setExpOutput] = React.useState(" "); function expectedOutput(input) { const found = input.match(/[$]{1}([a-zA-Z0-9_-]+\.?){1}([a-zA-Z0-9#_-]+\.?){0,}/g) //console.log(found) try{ // When the found array is empty. for (var i = 0; i < found.length; i++) { // console.log(found[i]); for (var j = 0; j < actionlist.length; j++) { if(found[i].slice(1,).toLowerCase() == actionlist[j].autocomplete.toLowerCase()){ input = input.replace(found[i], JSON.stringify(actionlist[j].example)); // console.log(input) // console.log(actionlist[j].example) } // console.log(actionlist[j].autocomplete); } } } catch (e) {} const tmpValidation = validateJson(input.valueOf()) //setValidation(true) if (tmpValidation.valid === true) { setValidation(true) setExpOutput(tmpValidation.result) } else { setExpOutput(input.valueOf()) setValidation(false) } } return ( { //setExpansionModalOpen(false) }} PaperProps={{ style: { backgroundColor: theme.palette.surfaceColor, color: "white", minWidth: 600, padding: 25, }, }} >
Code Editor
{ setlocalcodedata(value.getValue()) expectedOutput(value.getValue()) }} options={{ theme: 'gruvbox-dark', keyMap: 'sublime', mode: 'javascript', // mode: {codelang}, }} />
Output {validation === true ? { //handleReactJsonClipboard(copy); }} displayDataTypes={false} onSelect={(select) => { //HandleJsonCopy(validate.result, select, "exec"); }} name={"JSON autocompletion"} /> :

{expOutput}

}

JSON Validation: {validation ? "Correct" : "Incorrect"}

) } export default CodeEditor;