AwelLayout.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { apiInterceptors, getFlows } from '@/client/api';
  2. import PreviewFlow from '@/components/flow/preview-flow';
  3. import { IFlowResponse } from '@/types/flow';
  4. import { useRequest } from 'ahooks';
  5. import { Form, Select } from 'antd';
  6. import cls from 'classnames';
  7. import React, { useEffect, useMemo } from 'react';
  8. import { useTranslation } from 'react-i18next';
  9. const AwelLayout: React.FC<{
  10. initValue: any;
  11. updateData: (data: any) => void;
  12. classNames?: string;
  13. }> = ({ initValue, updateData, classNames }) => {
  14. const { t } = useTranslation();
  15. const [form] = Form.useForm();
  16. const flow = Form.useWatch('flow', form);
  17. const { data, loading } = useRequest(async () => {
  18. const [, res] = await apiInterceptors(
  19. getFlows({
  20. page: 1,
  21. page_size: 10000,
  22. }),
  23. );
  24. form.setFieldsValue({ flow: initValue?.name });
  25. return res ?? ({} as IFlowResponse);
  26. });
  27. const flowOptions = useMemo(() => {
  28. return (
  29. data?.items?.map((item: any) => ({
  30. label: item.label,
  31. value: item.name,
  32. })) || []
  33. );
  34. }, [data]);
  35. const flowData = useMemo(() => {
  36. return data?.items?.find((item: any) => item.name === flow)?.flow_data;
  37. }, [data?.items, flow]);
  38. useEffect(() => {
  39. updateData([loading, data?.items?.find((item: any) => item.name === flow)]);
  40. }, [data?.items, flow, loading, updateData]);
  41. return (
  42. <div className={cls(classNames, 'mb-6')}>
  43. <Form form={form} style={{ width: '100%' }}>
  44. <Form.Item label={t('select_workflow')} name='flow'>
  45. <Select className='w-1/4' placeholder={t('please_select_workflow')} options={flowOptions} allowClear />
  46. </Form.Item>
  47. {flowData && (
  48. <div className='w-full h-[600px] mx-auto border-[0.5px] border-dark-gray'>
  49. <PreviewFlow flowData={flowData} />
  50. </div>
  51. )}
  52. </Form>
  53. </div>
  54. );
  55. };
  56. export default AwelLayout;