You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

use-workflow.ts 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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, onSuccess: (v: WorkflowConfigResponse) => void) => {
  22. return useQuery({
  23. queryKey: [NAME_SPACE, 'config', appId],
  24. queryFn: async () => {
  25. const data = await get<WorkflowConfigResponse>(`/apps/${appId}/workflows/draft/config`)
  26. onSuccess(data)
  27. return data
  28. },
  29. })
  30. }
  31. const WorkflowVersionHistoryKey = [NAME_SPACE, 'versionHistory']
  32. export const useWorkflowVersionHistory = (params: FetchWorkflowDraftPageParams) => {
  33. const { appId, initialPage, limit, userId, namedOnly } = params
  34. return useInfiniteQuery({
  35. queryKey: [...WorkflowVersionHistoryKey, appId, initialPage, limit, userId, namedOnly],
  36. queryFn: ({ pageParam = 1 }) => get<FetchWorkflowDraftPageResponse>(`/apps/${appId}/workflows`, {
  37. params: {
  38. page: pageParam,
  39. limit,
  40. user_id: userId || '',
  41. named_only: !!namedOnly,
  42. },
  43. }),
  44. getNextPageParam: lastPage => lastPage.has_more ? lastPage.page + 1 : null,
  45. initialPageParam: initialPage,
  46. })
  47. }
  48. export const useResetWorkflowVersionHistory = (appId: string) => {
  49. return useReset([...WorkflowVersionHistoryKey, appId])
  50. }
  51. export const useUpdateWorkflow = (appId: string) => {
  52. return useMutation({
  53. mutationKey: [NAME_SPACE, 'update'],
  54. mutationFn: (params: UpdateWorkflowParams) => patch(`/apps/${appId}/workflows/${params.workflowId}`, {
  55. body: {
  56. marked_name: params.title,
  57. marked_comment: params.releaseNotes,
  58. },
  59. }),
  60. })
  61. }
  62. export const useDeleteWorkflow = (appId: string) => {
  63. return useMutation({
  64. mutationKey: [NAME_SPACE, 'delete'],
  65. mutationFn: (workflowId: string) => del(`/apps/${appId}/workflows/${workflowId}`),
  66. })
  67. }
  68. export const usePublishWorkflow = (appId: string) => {
  69. return useMutation({
  70. mutationKey: [NAME_SPACE, 'publish'],
  71. mutationFn: (params: PublishWorkflowParams) => post<CommonResponse & { created_at: number }>(`/apps/${appId}/workflows/publish`, {
  72. body: {
  73. marked_name: params.title,
  74. marked_comment: params.releaseNotes,
  75. },
  76. }),
  77. })
  78. }