| import { ResponseType } from '@/interfaces/database/base'; |
| import { DSL, IFlow, IFlowTemplate } from '@/interfaces/database/flow'; |
| import i18n from '@/locales/config'; |
| import flowService from '@/services/flow-service'; |
| import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; |
| import { message } from 'antd'; |
| import { useParams } from 'umi'; |
| import { v4 as uuid } from 'uuid'; |
|
|
| export const EmptyDsl = { |
| graph: { |
| nodes: [ |
| { |
| id: 'begin', |
| type: 'beginNode', |
| position: { |
| x: 50, |
| y: 200, |
| }, |
| data: { |
| label: 'Begin', |
| name: 'begin', |
| }, |
| sourcePosition: 'left', |
| targetPosition: 'right', |
| }, |
| ], |
| edges: [], |
| }, |
| components: { |
| begin: { |
| obj: { |
| component_name: 'Begin', |
| params: {}, |
| }, |
| downstream: ['Answer:China'], |
| upstream: [], |
| }, |
| }, |
| messages: [], |
| reference: [], |
| history: [], |
| path: [], |
| answer: [], |
| }; |
|
|
| export const useFetchFlowTemplates = (): ResponseType<IFlowTemplate[]> => { |
| const { data } = useQuery({ |
| queryKey: ['fetchFlowTemplates'], |
| initialData: [], |
| queryFn: async () => { |
| const { data } = await flowService.listTemplates(); |
| if (Array.isArray(data?.data)) { |
| data.data.unshift({ |
| id: uuid(), |
| title: 'Blank', |
| description: 'Create from nothing', |
| dsl: EmptyDsl, |
| }); |
| } |
|
|
| return data; |
| }, |
| }); |
|
|
| return data; |
| }; |
|
|
| export const useFetchFlowList = (): { data: IFlow[]; loading: boolean } => { |
| const { data, isFetching: loading } = useQuery({ |
| queryKey: ['fetchFlowList'], |
| initialData: [], |
| gcTime: 0, |
| queryFn: async () => { |
| const { data } = await flowService.listCanvas(); |
|
|
| return data?.data ?? []; |
| }, |
| }); |
|
|
| return { data, loading }; |
| }; |
|
|
| export const useFetchFlow = (): { |
| data: IFlow; |
| loading: boolean; |
| refetch: () => void; |
| } => { |
| const { id } = useParams(); |
| const { |
| data, |
| isFetching: loading, |
| refetch, |
| } = useQuery({ |
| queryKey: ['flowDetail'], |
| initialData: {} as IFlow, |
| refetchOnReconnect: false, |
| refetchOnMount: false, |
| refetchOnWindowFocus: false, |
| gcTime: 0, |
| queryFn: async () => { |
| const { data } = await flowService.getCanvas({}, id); |
|
|
| return data?.data ?? {}; |
| }, |
| }); |
|
|
| return { data, loading, refetch }; |
| }; |
|
|
| export const useSetFlow = () => { |
| const queryClient = useQueryClient(); |
| const { |
| data, |
| isPending: loading, |
| mutateAsync, |
| } = useMutation({ |
| mutationKey: ['setFlow'], |
| mutationFn: async (params: { |
| id?: string; |
| title?: string; |
| dsl?: DSL; |
| avatar?: string; |
| }) => { |
| const { data = {} } = await flowService.setCanvas(params); |
| if (data.retcode === 0) { |
| message.success( |
| i18n.t(`message.${params?.id ? 'modified' : 'created'}`), |
| ); |
| queryClient.invalidateQueries({ queryKey: ['fetchFlowList'] }); |
| } |
| return data; |
| }, |
| }); |
|
|
| return { data, loading, setFlow: mutateAsync }; |
| }; |
|
|
| export const useDeleteFlow = () => { |
| const queryClient = useQueryClient(); |
| const { |
| data, |
| isPending: loading, |
| mutateAsync, |
| } = useMutation({ |
| mutationKey: ['deleteFlow'], |
| mutationFn: async (canvasIds: string[]) => { |
| const { data } = await flowService.removeCanvas({ canvasIds }); |
| if (data.retcode === 0) { |
| queryClient.invalidateQueries({ queryKey: ['fetchFlowList'] }); |
| } |
| return data?.data ?? []; |
| }, |
| }); |
|
|
| return { data, loading, deleteFlow: mutateAsync }; |
| }; |
|
|
| export const useRunFlow = () => { |
| const { |
| data, |
| isPending: loading, |
| mutateAsync, |
| } = useMutation({ |
| mutationKey: ['runFlow'], |
| mutationFn: async (params: { id: string; dsl: DSL }) => { |
| const { data } = await flowService.runCanvas(params); |
| if (data.retcode === 0) { |
| message.success(i18n.t(`message.modified`)); |
| } |
| return data?.data ?? {}; |
| }, |
| }); |
|
|
| return { data, loading, runFlow: mutateAsync }; |
| }; |
|
|
| export const useResetFlow = () => { |
| const { id } = useParams(); |
| const { |
| data, |
| isPending: loading, |
| mutateAsync, |
| } = useMutation({ |
| mutationKey: ['resetFlow'], |
| mutationFn: async () => { |
| const { data } = await flowService.resetCanvas({ id }); |
| return data; |
| }, |
| }); |
|
|
| return { data, loading, resetFlow: mutateAsync }; |
| }; |
|
|