diff --git a/src/api/workflow.ts b/src/api/workflow.ts index 1b253ef..e910ebe 100644 --- a/src/api/workflow.ts +++ b/src/api/workflow.ts @@ -78,10 +78,18 @@ export const useWorkflowRunCommentDeleteModel = createDeleteMutationHook( '/api/v1/workflowrun/{orcabusId}/comment/{commentOrcabusId}/' ); -// workflow run state creation model -export const useWorkflowRunStateCreateModel = createPostMutationHook( +// workflow run state creation models +export const useWorkflowRunStateDeprecateModel = createPostMutationHook( workflowApi, - '/api/v1/workflowrun/{orcabusId}/state/' + '/api/v1/workflowrun/state/deprecate/' +); +export const useWorkflowRunStateResolveModel = createPostMutationHook( + workflowApi, + '/api/v1/workflowrun/state/resolve/' +); +export const useWorkflowRunStateCancelModel = createPostMutationHook( + workflowApi, + '/api/v1/workflowrun/state/cancel/' ); export const useWorkflowRunStateUpdateModel = createPatchMutationHook( workflowApi, @@ -89,7 +97,7 @@ export const useWorkflowRunStateUpdateModel = createPatchMutationHook( ); export const useWorkflowRunStateCreationValidMapModel = createQueryHook( workflowApi, - '/api/v1/workflowrun/{orcabusId}/state/get_states_transition_validation_map/' + '/api/v1/workflowrun/state/get_states_transition_validation_map/' ); // workflow run list model diff --git a/src/modules/workflows/components/workflowRuns/WorkflowRunsContext.tsx b/src/modules/workflows/components/workflowRuns/WorkflowRunsContext.tsx index d167e4e..484ff7e 100644 --- a/src/modules/workflows/components/workflowRuns/WorkflowRunsContext.tsx +++ b/src/modules/workflows/components/workflowRuns/WorkflowRunsContext.tsx @@ -83,7 +83,6 @@ export const WorkflowRunsProvider: FC = ({ children }): React data: workflowRunStateCreationValidMapData, isFetching: isFetchingWorkflowRunStateCreationValidMap, } = useWorkflowRunStateCreationValidMapModel({ - params: { path: { orcabusId: orcabusId as string } }, reactQuery: { enabled: !!orcabusId, }, diff --git a/src/modules/workflows/components/workflowRuns/WorkflowRunsDetailsHeader.tsx b/src/modules/workflows/components/workflowRuns/WorkflowRunsDetailsHeader.tsx index e8ff0f6..dadc383 100644 --- a/src/modules/workflows/components/workflowRuns/WorkflowRunsDetailsHeader.tsx +++ b/src/modules/workflows/components/workflowRuns/WorkflowRunsDetailsHeader.tsx @@ -2,7 +2,9 @@ import { useEffect, useMemo, useState, startTransition } from 'react'; import { useParams } from 'react-router-dom'; import { useWorkflowRunRerunModel, - useWorkflowRunStateCreateModel, + useWorkflowRunStateCancelModel, + useWorkflowRunStateDeprecateModel, + useWorkflowRunStateResolveModel, useWorkflowRunCommentCreateModel, DatasetEnum, } from '@/api/workflow'; @@ -160,50 +162,68 @@ const WorkflowRunsDetailsHeader = () => { resetCreateWorkflowRunComment, ]); - const { - mutate: createWorkflowRunState, - isSuccess: isCreatedWorkflowRunState, - isError: isErrorCreatingWorkflowRunState, - reset: resetCreateWorkflowRunState, - } = useWorkflowRunStateCreateModel({ - params: { path: { orcabusId: orcabusId as string } }, - body: { - status: stateStatus ?? '', - comment: stateComment, - }, - }); + const { mutate: cancelWorkflowRun } = useWorkflowRunStateCancelModel(); + const { mutate: deprecateWorkflowRun } = useWorkflowRunStateDeprecateModel(); + const { mutate: resolveWorkflowRun } = useWorkflowRunStateResolveModel(); const handleStateCreationEvent = () => { if (!stateStatus) return; - createWorkflowRunState(); - setIsOpenAddStateDialog(false); - }; - useEffect(() => { - if (isCreatedWorkflowRunState) { - toaster.success({ title: 'State added' }); - refetchWorkflowState(); - resetCreateWorkflowRunState(); - startTransition(() => { - setStateStatus(null); - setStateComment(''); - }); - } - if (isErrorCreatingWorkflowRunState) { - toaster.error({ title: 'Error adding state status' }); - resetCreateWorkflowRunState(); + const transitionMutation = { + CANCELLED: cancelWorkflowRun, + DEPRECATED: deprecateWorkflowRun, + RESOLVED: resolveWorkflowRun, + }[stateStatus]; + + if (!transitionMutation) { + toaster.error({ title: `Unsupported state transition: ${stateStatus}` }); + return; } - }, [ - isCreatedWorkflowRunState, - refetchWorkflowState, - resetCreateWorkflowRunState, - isErrorCreatingWorkflowRunState, - ]); + + transitionMutation( + { + body: { + workflowrunOrcabusIds: [orcabusId as string], + comment: stateComment, + }, + }, + { + onSuccess: () => { + toaster.success({ title: 'State added' }); + refetchWorkflowState(); + startTransition(() => { + setStateStatus(null); + setStateComment(''); + }); + }, + onError: () => { + toaster.error({ title: 'Error adding state status' }); + }, + } + ); + setIsOpenAddStateDialog(false); + }; const handleRerunWorkflow = () => { rerunWorkflow(); if (isDeprecated) { - handleMarkAsDeprecated(); + deprecateWorkflowRun( + { + body: { + workflowrunOrcabusIds: [orcabusId as string], + comment: '', + }, + }, + { + onSuccess: () => { + toaster.success({ title: 'Workflow run marked as DEPRECATED' }); + refetchWorkflowState(); + }, + onError: () => { + toaster.error({ title: 'Error marking workflow run as DEPRECATED' }); + }, + } + ); } setIsOpenRerunWorkflowDialog(false); }; @@ -236,26 +256,6 @@ const WorkflowRunsDetailsHeader = () => { setRefreshWorkflowRuns, ]); - const handleMarkAsDeprecated = () => { - createWorkflowRunState(); - }; - - useEffect(() => { - if (isCreatedWorkflowRunState) { - toaster.success({ title: `Workflow run marked as ${stateStatus}` }); - resetCreateWorkflowRunState(); - } - if (isErrorCreatingWorkflowRunState) { - toaster.error({ title: `Error marking workflow run as ${stateStatus}` }); - resetCreateWorkflowRunState(); - } - }, [ - isCreatedWorkflowRunState, - resetCreateWorkflowRunState, - isErrorCreatingWorkflowRunState, - stateStatus, - ]); - const handleCloseRerunWorkflowDialog = () => { setIsOpenRerunWorkflowDialog(false); resetRerunWorkflow();