import React, { useState } from 'react' import { Radio, Tabs } from 'antd' import _ from 'lodash' import { SchemaTree } from './components/SchemaTree' import FieldEditor from './components/FieldEditor' import { SchemaCode } from './components/SchemaCode' import JsonDialog from './components/JsonDialog' import { SchemaPreview } from './components/SchemaPreview' import { ComponentTypes } from './utils/types' import { getDefaultComponentType, getComponentsByComponentType } from './utils/schemaHelpers' import 'antd/dist/antd.css' import './index.css' export const SchemaEditor: React.FC<{ className?: string schema: any showAntdComponents?: boolean showFusionComponents?: boolean customComponents?: [] onChange: (schema: any) => void }> = ({ className, schema, showAntdComponents = true, showFusionComponents = true, customComponents = [], onChange }) => { const [componentType, setComponentType] = useState( getDefaultComponentType({ showAntdComponents, showFusionComponents }) ) const [selectedPath, setSelectedPath] = useState(null) const selectedPaths = (selectedPath && selectedPath.split('.')) || [] const fieldKey = selectedPaths.length > 0 && selectedPaths[selectedPaths.length - 1] const handleTypeChange = e => { setComponentType(e.target.value) } const handleTreeSelect = path => { setSelectedPath(path) } const handleSchemaChange = (schema: string) => { try { onChange(JSON.parse(schema)) } catch (e) { console.error(e) } } const isRoot = selectedPath === 'root' const selectedSchema = selectedPath && (isRoot ? schema : _.get(selectedPath, schema)) return (