form-meta.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import {
  2. Field,
  3. FieldRenderProps,
  4. FormMeta,
  5. ValidateTrigger,
  6. } from '@flowgram.ai/free-layout-editor';
  7. import { Input } from '@douyinfe/semi-ui';
  8. // FieldWrapper is not provided by sdk, and can be customized
  9. import { FieldWrapper } from './components';
  10. const render = () => (
  11. <div className="demo-node-content">
  12. <div className="demo-node-title">Basic Node</div>
  13. <Field name="name">
  14. {({ field, fieldState }: FieldRenderProps<string>) => (
  15. <FieldWrapper required title="Name" error={fieldState.errors?.[0]?.message}>
  16. <Input size={'small'} {...field} />
  17. </FieldWrapper>
  18. )}
  19. </Field>
  20. <Field name="city">
  21. {({ field, fieldState }: FieldRenderProps<string>) => (
  22. <FieldWrapper required title="City" error={fieldState.errors?.[0]?.message}>
  23. <Input size={'small'} {...field} />
  24. </FieldWrapper>
  25. )}
  26. </Field>
  27. </div>
  28. );
  29. const formMeta: FormMeta = {
  30. render,
  31. defaultValues: { name: 'Tina', city: 'Hangzhou' },
  32. validateTrigger: ValidateTrigger.onChange,
  33. validate: {
  34. name: ({ value }) => {
  35. if (!value) {
  36. return 'Name is required';
  37. }
  38. },
  39. city: ({ value }) => {
  40. if (!value) {
  41. return 'City is required';
  42. }
  43. },
  44. },
  45. };
  46. export const DEFAULT_FORM_META = formMeta;