node-registry.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import {
  2. Field,
  3. FieldRenderProps,
  4. FormMeta,
  5. WorkflowNodeRegistry,
  6. FormRenderProps,
  7. } from '@flowgram.ai/free-layout-editor';
  8. import { FieldWrapper } from '@flowgram.ai/demo-node-form';
  9. import { Input } from '@douyinfe/semi-ui';
  10. import '../index.css';
  11. interface FormData {
  12. country: string;
  13. city: string;
  14. }
  15. const render = ({ form }: FormRenderProps<FormData>) => (
  16. <div className="demo-node-content">
  17. <div className="demo-node-title">Visibility Examples</div>
  18. <Field name="country">
  19. {({ field }: FieldRenderProps<string>) => (
  20. <FieldWrapper title="Country">
  21. <Input size={'small'} {...field} />
  22. </FieldWrapper>
  23. )}
  24. </Field>
  25. <Field name="city" deps={['country']}>
  26. {({ field }: FieldRenderProps<string>) =>
  27. form.getValueIn('country') ? (
  28. <FieldWrapper title="City">
  29. <Input size={'small'} {...field} />
  30. </FieldWrapper>
  31. ) : (
  32. <></>
  33. )
  34. }
  35. </Field>
  36. </div>
  37. );
  38. const formMeta: FormMeta<FormData> = {
  39. render,
  40. };
  41. export const nodeRegistry: WorkflowNodeRegistry = {
  42. type: 'custom',
  43. meta: {},
  44. defaultPorts: [{ type: 'output' }, { type: 'input' }],
  45. formMeta,
  46. };