import { IFlow } from '@/interfaces/database/flow'; import flowService from '@/services/flow-service'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useDebounce } from 'ahooks'; import { message } from 'antd'; import { useCallback } from 'react'; import { useGetPaginationWithRouter, useHandleSearchChange, } from './logic-hooks'; export const enum AgentApiAction { FetchAgentList = 'fetchAgentList', UpdateAgentSetting = 'updateAgentSetting', DeleteAgent = 'deleteAgent', } export const useFetchAgentListByPage = () => { const { searchString, handleInputChange } = useHandleSearchChange(); const { pagination, setPagination } = useGetPaginationWithRouter(); const debouncedSearchString = useDebounce(searchString, { wait: 500 }); const { data, isFetching: loading } = useQuery<{ kbs: IFlow[]; total: number; }>({ queryKey: [ AgentApiAction.FetchAgentList, { debouncedSearchString, ...pagination, }, ], initialData: { kbs: [], total: 0 }, gcTime: 0, queryFn: async () => { const { data } = await flowService.listCanvasTeam({ keywords: debouncedSearchString, page_size: pagination.pageSize, page: pagination.current, }); return data?.data ?? []; }, }); const onInputChange: React.ChangeEventHandler = useCallback( (e) => { // setPagination({ page: 1 }); // TODO: 这里导致重复请求 handleInputChange(e); }, [handleInputChange], ); return { data: data.kbs, loading, searchString, handleInputChange: onInputChange, pagination: { ...pagination, total: data?.total }, setPagination, }; }; export const useUpdateAgentSetting = () => { const queryClient = useQueryClient(); const { data, isPending: loading, mutateAsync, } = useMutation({ mutationKey: [AgentApiAction.UpdateAgentSetting], mutationFn: async (params: any) => { const ret = await flowService.settingCanvas(params); if (ret?.data?.code === 0) { message.success('success'); queryClient.invalidateQueries({ queryKey: [AgentApiAction.FetchAgentList], }); } else { message.error(ret?.data?.data); } return ret?.data?.code; }, }); return { data, loading, updateAgentSetting: mutateAsync }; }; export const useDeleteAgent = () => { const queryClient = useQueryClient(); const { data, isPending: loading, mutateAsync, } = useMutation({ mutationKey: [AgentApiAction.DeleteAgent], mutationFn: async (canvasIds: string[]) => { const { data } = await flowService.removeCanvas({ canvasIds }); if (data.code === 0) { queryClient.invalidateQueries({ queryKey: [AgentApiAction.FetchAgentList], }); } return data?.data ?? []; }, }); return { data, loading, deleteAgent: mutateAsync }; };