You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { FormContainer } from '@/components/form-container';
  2. import { Form } from '@/components/ui/form';
  3. import { zodResolver } from '@hookform/resolvers/zod';
  4. import { memo, useMemo } from 'react';
  5. import { useForm, useWatch } from 'react-hook-form';
  6. import { z } from 'zod';
  7. import { VariableType } from '../../constant';
  8. import { INextOperatorForm } from '../../interface';
  9. import { FormWrapper } from '../components/form-wrapper';
  10. import { Output } from '../components/output';
  11. import { QueryVariable } from '../components/query-variable';
  12. import { DynamicOutput } from './dynamic-output';
  13. import { OutputArray } from './interface';
  14. import { useValues } from './use-values';
  15. import { useWatchFormChange } from './use-watch-form-change';
  16. const FormSchema = z.object({
  17. query: z.string().optional(),
  18. outputs: z.array(z.object({ name: z.string(), value: z.any() })).optional(),
  19. });
  20. function IterationForm({ node }: INextOperatorForm) {
  21. const defaultValues = useValues(node);
  22. const form = useForm({
  23. defaultValues: defaultValues,
  24. resolver: zodResolver(FormSchema),
  25. });
  26. const outputs: OutputArray = useWatch({
  27. control: form?.control,
  28. name: 'outputs',
  29. });
  30. const outputList = useMemo(() => {
  31. return outputs.map((x) => ({ title: x.name, type: x?.type }));
  32. }, [outputs]);
  33. useWatchFormChange(node?.id, form);
  34. return (
  35. <Form {...form}>
  36. <FormWrapper>
  37. <FormContainer>
  38. <QueryVariable
  39. name="items_ref"
  40. type={VariableType.Array}
  41. ></QueryVariable>
  42. </FormContainer>
  43. <DynamicOutput node={node}></DynamicOutput>
  44. <Output list={outputList}></Output>
  45. </FormWrapper>
  46. </Form>
  47. );
  48. }
  49. export default memo(IterationForm);