import { useState, useCallback, useContext } from 'react' import PropTypes from 'prop-types' import { Flex, Alert, Card, Spin, Splitter, Button, Modal, Segmented, Popover } from 'antd' import { LoadingOutlined, CaretDownOutlined } from '@ant-design/icons' import ExclamationOctagonIcon from '../../Icons/ExclamationOctagonIcon.jsx' import CheckCircleIcon from '../../Icons/CheckCircleIcon.jsx' import MagicWandIcon from '../../Icons/MagicWandIcon.jsx' import ObjectProperty from '../common/ObjectProperty.jsx' import TemplatePreview from './TemplatePreview.jsx' import DataTree from './DataTree.jsx' import { ApiServerContext } from '../context/ApiServerContext.jsx' //import { useMediaQuery } from 'react-responsive' const TemplateEditor = ({ objectData, loading, collapseState, isEditing, style, form, setObjectData }) => { const { fetchTemplateFormat } = useContext(ApiServerContext) const [testObjectOpen, setTestObjectOpen] = useState(false) const [testObjectViewMode, setTestObjectViewMode] = useState('Tree') const [previewMessage, setPreviewMessage] = useState('No issues found.') const [previewError, setPreviewError] = useState(false) const [formatLoading, setFormatLoading] = useState(false) //const isMobile = useMediaQuery({ maxWidth: 768 }) const handlePreviewMessage = useCallback((message, isError) => { if (isError) { setPreviewMessage( Compile error. } /> ) } else { setPreviewMessage(message) } setPreviewError(isError) }, []) const handleFormatCode = useCallback(async () => { const content = form?.getFieldValue?.('content') ?? objectData?.content if (content == null || typeof content !== 'string') { return } setFormatLoading(true) try { const result = await fetchTemplateFormat(content) if (result?.error) { handlePreviewMessage(result.error, true) return } if (result?.content == null) { return } form?.setFieldValue?.('content', result.content) setObjectData?.((prev) => ({ ...prev, content: result.content })) } finally { setFormatLoading(false) } }, [ form, objectData?.content, fetchTemplateFormat, handlePreviewMessage, setObjectData ]) return ( <> {collapseState.preview == true && ( setTestObjectOpen(true)} onPreviewMessage={handlePreviewMessage} showTestObject={true} /> )} {collapseState.editor == true && ( }> ) : ( ) } type={previewError ? 'error' : 'success'} /> {isEditing && ( } loading={formatLoading} disabled={loading || formatLoading} onClick={handleFormatCode} /> )} )} { setTestObjectOpen(false) }} > Close } > setTestObjectViewMode(value)} size='small' /> {testObjectViewMode == 'Code' && ( )} {testObjectViewMode == 'Tree' && ( )} > ) } TemplateEditor.propTypes = { loading: PropTypes.bool, objectData: PropTypes.object, collapseState: PropTypes.object, isEditing: PropTypes.bool, style: PropTypes.object, form: PropTypes.object, setObjectData: PropTypes.func } export default TemplateEditor