import { DEFAULT_DEMO_REGISTRY, DEFAULT_INITIAL_DATA, defaultInitialDataTs, fieldWrapperCss, fieldWrapperTs, } from '@flowgram.ai/demo-node-form'; import { PreviewEditor } from '../preview-editor'; import { Editor } from './editor'; const registryCode = { code: `import { Field, FieldRenderProps, FormMeta, ValidateTrigger, } from '@flowgram.ai/free-layout-editor'; import { Input } from '@douyinfe/semi-ui'; // FieldWrapper is not provided by sdk, it can be customized import { FieldWrapper } from './components'; const render = () => (
Basic Node
{({ field, fieldState }: FieldRenderProps) => ( )} {({ field, fieldState }: FieldRenderProps) => ( )}
); const formMeta: FormMeta = { render, defaultValues: { name: 'Tina', city: 'Hangzhou' }, validateTrigger: ValidateTrigger.onChange, validate: { name: ({ value }) => { if (!value) { return 'Name is required'; } }, city: ({ value }) => { if (!value) { return 'City is required'; } } } }; export const nodeRegistry: WorkflowNodeRegistry = { type: 'custom', meta: {}, defaultPorts: [{ type: 'output' }, { type: 'input' }], formMeta }; `, active: true, }; export const NodeFormBasicPreview = () => { const files = { 'node-registry.tsx': registryCode, 'initial-data.ts': { code: defaultInitialDataTs, active: true }, 'field-wrapper.tsx': { code: fieldWrapperTs, active: true }, 'field-wrapper.css': { code: fieldWrapperCss, active: true }, }; return ( ); };