use-workflow.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { del, get, patch, post } from './base'
  2. import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query'
  3. import type {
  4. FetchWorkflowDraftPageParams,
  5. FetchWorkflowDraftPageResponse,
  6. FetchWorkflowDraftResponse,
  7. PublishWorkflowParams,
  8. UpdateWorkflowParams,
  9. WorkflowConfigResponse,
  10. } from '@/types/workflow'
  11. import type { CommonResponse } from '@/models/common'
  12. import { useReset } from './use-base'
  13. const NAME_SPACE = 'workflow'
  14. export const useAppWorkflow = (appID: string) => {
  15. return useQuery<FetchWorkflowDraftResponse>({
  16. enabled: !!appID,
  17. queryKey: [NAME_SPACE, 'publish', appID],
  18. queryFn: () => get<FetchWorkflowDraftResponse>(`/apps/${appID}/workflows/publish`),
  19. })
  20. }
  21. export const useWorkflowConfig = (appId: string) => {
  22. return useQuery({
  23. queryKey: [NAME_SPACE, 'config', appId],
  24. queryFn: () => get<WorkflowConfigResponse>(`/apps/${appId}/workflows/draft/config`),
  25. })
  26. }
  27. const WorkflowVersionHistoryKey = [NAME_SPACE, 'versionHistory']
  28. export const useWorkflowVersionHistory = (params: FetchWorkflowDraftPageParams) => {
  29. const { appId, initialPage, limit, userId, namedOnly } = params
  30. return useInfiniteQuery({
  31. queryKey: [...WorkflowVersionHistoryKey, appId, initialPage, limit, userId, namedOnly],
  32. queryFn: ({ pageParam = 1 }) => get<FetchWorkflowDraftPageResponse>(`/apps/${appId}/workflows`, {
  33. params: {
  34. page: pageParam,
  35. limit,
  36. user_id: userId || '',
  37. named_only: !!namedOnly,
  38. },
  39. }),
  40. getNextPageParam: lastPage => lastPage.has_more ? lastPage.page + 1 : null,
  41. initialPageParam: initialPage,
  42. })
  43. }
  44. export const useResetWorkflowVersionHistory = (appId: string) => {
  45. return useReset([...WorkflowVersionHistoryKey, appId])
  46. }
  47. export const useUpdateWorkflow = (appId: string) => {
  48. return useMutation({
  49. mutationKey: [NAME_SPACE, 'update'],
  50. mutationFn: (params: UpdateWorkflowParams) => patch(`/apps/${appId}/workflows/${params.workflowId}`, {
  51. body: {
  52. marked_name: params.title,
  53. marked_comment: params.releaseNotes,
  54. },
  55. }),
  56. })
  57. }
  58. export const useDeleteWorkflow = (appId: string) => {
  59. return useMutation({
  60. mutationKey: [NAME_SPACE, 'delete'],
  61. mutationFn: (workflowId: string) => del(`/apps/${appId}/workflows/${workflowId}`),
  62. })
  63. }
  64. export const usePublishWorkflow = (appId: string) => {
  65. return useMutation({
  66. mutationKey: [NAME_SPACE, 'publish'],
  67. mutationFn: (params: PublishWorkflowParams) => post<CommonResponse & { created_at: number }>(`/apps/${appId}/workflows/publish`, {
  68. body: {
  69. marked_name: params.title,
  70. marked_comment: params.releaseNotes,
  71. },
  72. }),
  73. })
  74. }