dag-layout.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { apiInterceptors, getFlows } from '@/client/api';
  2. import { IFlow } from '@/types/flow';
  3. import { Select } from 'antd';
  4. import { t } from 'i18next';
  5. import Link from 'next/link';
  6. import { useEffect, useState } from 'react';
  7. import PreviewFlow from '../flow/preview-flow';
  8. interface IProps {
  9. onFlowsChange: (data: any) => void;
  10. teamContext: any;
  11. }
  12. export default function DagLayout(props: IProps) {
  13. const { onFlowsChange, teamContext } = props;
  14. const [flows, setFlows] = useState<IFlow[]>();
  15. const [flowsOptions, setFlowsOptions] = useState<any>();
  16. const [curFlow, setCurFlow] = useState<IFlow>();
  17. const fetchFlows = async () => {
  18. const [_, data] = await apiInterceptors(getFlows({}));
  19. if (data) {
  20. setFlowsOptions(data?.items?.map((item: IFlow) => ({ label: item.name, value: item.name })));
  21. setFlows(data.items);
  22. onFlowsChange(data?.items[0]);
  23. }
  24. };
  25. const handleFlowsChange = (value: string) => {
  26. setCurFlow(flows?.find(item => value === item.name));
  27. onFlowsChange(flows?.find(item => value === item.name));
  28. };
  29. useEffect(() => {
  30. fetchFlows();
  31. }, []);
  32. useEffect(() => {
  33. setCurFlow(flows?.find(item => teamContext?.name === item.name) || flows?.[0]);
  34. }, [teamContext, flows]);
  35. return (
  36. <div className='w-full h-[300px]'>
  37. <div className='mr-24 mb-4 mt-2'>Flows:</div>
  38. <div className='flex items-center mb-6'>
  39. <Select
  40. onChange={handleFlowsChange}
  41. value={curFlow?.name || flowsOptions?.[0]?.value}
  42. className='w-1/4'
  43. options={flowsOptions}
  44. />
  45. <Link href='/flow/canvas/' className='ml-6'>
  46. {t('edit_new_applications')}
  47. </Link>
  48. <div className='text-gray-500 ml-16'>{curFlow?.description}</div>
  49. </div>
  50. {curFlow && (
  51. <div className='w-full h-full border-[0.5px] border-dark-gray'>
  52. <PreviewFlow flowData={curFlow?.flow_data} />
  53. </div>
  54. )}
  55. </div>
  56. );
  57. }