validate-when-variable-sync.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import React, { useEffect } from 'react';
  6. import { Field } from '@flowgram.ai/free-layout-editor';
  7. import { validateFlowValue, validateWhenVariableSync } from '@flowgram.ai/form-materials';
  8. import { Button } from '@douyinfe/semi-ui';
  9. import { FreeFormMetaStoryBuilder, FormHeader } from '../../free-form-meta-story-builder';
  10. const DynamicValueInput = React.lazy(() =>
  11. import('@flowgram.ai/form-materials').then((module) => ({
  12. default: module.DynamicValueInput,
  13. }))
  14. );
  15. export const BasicStory = () => (
  16. <FreeFormMetaStoryBuilder
  17. filterEndNode
  18. transformInitialNode={{
  19. custom_0: (node) => {
  20. node.data.value = {
  21. type: 'ref',
  22. content: ['start_0', 'query'],
  23. };
  24. return node;
  25. },
  26. }}
  27. formMeta={{
  28. effect: {
  29. value: validateWhenVariableSync(),
  30. },
  31. validate: {
  32. value: ({ value, context }) =>
  33. validateFlowValue(value, {
  34. node: context.node,
  35. errorMessages: {
  36. unknownVariable: 'Unknown Variable',
  37. },
  38. }),
  39. },
  40. render: ({ form }) => {
  41. useEffect(() => {
  42. form.validate();
  43. }, []);
  44. return (
  45. <>
  46. <FormHeader />
  47. <b>{"Add 'query' in Start"}</b>
  48. <Field<any> name="value">
  49. {({ field, fieldState }) => (
  50. <>
  51. <DynamicValueInput
  52. value={field.value}
  53. onChange={(value) => field.onChange(value)}
  54. />
  55. <span style={{ color: 'red' }}>
  56. {fieldState.errors?.map((e) => e.message).join('\n')}
  57. </span>
  58. </>
  59. )}
  60. </Field>
  61. <br />
  62. <Button onClick={() => form.validate()}>Trigger Validate</Button>
  63. </>
  64. );
  65. },
  66. }}
  67. />
  68. );