node-registry.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import {
  2. DataEvent,
  3. EffectFuncProps,
  4. Field,
  5. FieldRenderProps,
  6. FormMeta,
  7. ValidateTrigger,
  8. WorkflowNodeRegistry,
  9. } from '@flowgram.ai/free-layout-editor';
  10. import { FieldWrapper } from '@flowgram.ai/demo-node-form';
  11. import { Input } from '@douyinfe/semi-ui';
  12. import '../index.css';
  13. const render = () => (
  14. <div className="demo-node-content">
  15. <div className="demo-node-title">Effect Examples</div>
  16. <Field name="field1">
  17. {({ field }: FieldRenderProps<string>) => (
  18. <FieldWrapper
  19. title="Basic effect"
  20. note={'The following field will console.log field value on value change'}
  21. >
  22. <Input size={'small'} {...field} />
  23. </FieldWrapper>
  24. )}
  25. </Field>
  26. <Field name="field2">
  27. {({ field }: FieldRenderProps<string>) => (
  28. <FieldWrapper
  29. title="Control other fields"
  30. note={'The following field will change Field 3 value on value change'}
  31. >
  32. <Input size={'small'} {...field} />
  33. </FieldWrapper>
  34. )}
  35. </Field>
  36. <Field name="field3">
  37. {({ field }: FieldRenderProps<string>) => (
  38. <FieldWrapper title="Controlled by other fields">
  39. <Input size={'small'} {...field} />
  40. </FieldWrapper>
  41. )}
  42. </Field>
  43. </div>
  44. );
  45. interface FormData {
  46. field1: string;
  47. field2: string;
  48. field3: string;
  49. }
  50. const formMeta: FormMeta<FormData> = {
  51. render,
  52. validateTrigger: ValidateTrigger.onChange,
  53. effect: {
  54. field1: [
  55. {
  56. event: DataEvent.onValueChange,
  57. effect: ({ value }: EffectFuncProps<string, FormData>) => {
  58. console.log('field1 value:', value);
  59. },
  60. },
  61. ],
  62. field2: [
  63. {
  64. event: DataEvent.onValueChange,
  65. effect: ({ value, form }: EffectFuncProps<string, FormData>) => {
  66. form.setValueIn('field3', 'field2 value is ' + value);
  67. },
  68. },
  69. ],
  70. },
  71. };
  72. export const nodeRegistry: WorkflowNodeRegistry = {
  73. type: 'custom',
  74. meta: {},
  75. defaultPorts: [{ type: 'output' }, { type: 'input' }],
  76. formMeta,
  77. };