import { del, get, patch, post } from './base' import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query' import type { FetchWorkflowDraftPageParams, FetchWorkflowDraftPageResponse, FetchWorkflowDraftResponse, PublishWorkflowParams, UpdateWorkflowParams, WorkflowConfigResponse, } from '@/types/workflow' import type { CommonResponse } from '@/models/common' import { useReset } from './use-base' const NAME_SPACE = 'workflow' export const useAppWorkflow = (appID: string) => { return useQuery({ enabled: !!appID, queryKey: [NAME_SPACE, 'publish', appID], queryFn: () => get(`/apps/${appID}/workflows/publish`), }) } export const useWorkflowConfig = (url: string, onSuccess: (v: WorkflowConfigResponse) => void) => { return useQuery({ queryKey: [NAME_SPACE, 'config', url], queryFn: async () => { const data = await get(url) onSuccess(data) return data }, }) } const WorkflowVersionHistoryKey = [NAME_SPACE, 'versionHistory'] export const useWorkflowVersionHistory = (params: FetchWorkflowDraftPageParams) => { const { url, initialPage, limit, userId, namedOnly } = params return useInfiniteQuery({ enabled: !!url, queryKey: [...WorkflowVersionHistoryKey, url, initialPage, limit, userId, namedOnly], queryFn: ({ pageParam = 1 }) => get(url, { params: { page: pageParam, limit, user_id: userId || '', named_only: !!namedOnly, }, }), getNextPageParam: lastPage => lastPage.has_more ? lastPage.page + 1 : null, initialPageParam: initialPage, }) } export const useResetWorkflowVersionHistory = () => { return useReset([...WorkflowVersionHistoryKey]) } export const useUpdateWorkflow = () => { return useMutation({ mutationKey: [NAME_SPACE, 'update'], mutationFn: (params: UpdateWorkflowParams) => patch(params.url, { body: { marked_name: params.title, marked_comment: params.releaseNotes, }, }), }) } export const useDeleteWorkflow = () => { return useMutation({ mutationKey: [NAME_SPACE, 'delete'], mutationFn: (url: string) => del(url), }) } export const usePublishWorkflow = (appId: string) => { return useMutation({ mutationKey: [NAME_SPACE, 'publish'], mutationFn: (params: PublishWorkflowParams) => post(`/apps/${appId}/workflows/publish`, { body: { marked_name: params.title, marked_comment: params.releaseNotes, }, }), }) }