From 95e9a06a63a74f55b823031e2d9cd9fd6483eecc Mon Sep 17 00:00:00 2001 From: NV4RE Date: Mon, 12 Oct 2020 18:12:03 +0700 Subject: [PATCH] Only check isLastChild for Parallel --- src/state.ts | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/state.ts b/src/state.ts index 3b02d22..317da1d 100644 --- a/src/state.ts +++ b/src/state.ts @@ -418,15 +418,21 @@ export const handleCompletedTask = async (task: Task.ITask): Promise => { const { workflow, tasksData, nextTaskPath } = await getTaskInfo(task); // If workflow has cancelled if (workflow.status === State.WorkflowStates.Cancelled) { - if (nextTaskPath.parentTask && nextTaskPath.isLastChild) { - await processUpdateTask({ - taskId: nextTaskPath.parentTask.taskId, - transactionId: nextTaskPath.parentTask.transactionId, - status: State.TaskStates.Completed, - isSystem: true, - }); - } else if (nextTaskPath.parentTask && !nextTaskPath.isLastChild) { - console.log('Wait for sibling task'); + if (nextTaskPath.parentTask) { + if ( + (nextTaskPath.parentTask.type === Task.TaskTypes.Parallel && + nextTaskPath.isLastChild) || + nextTaskPath.parentTask.type === Task.TaskTypes.Decision + ) { + await processUpdateTask({ + taskId: nextTaskPath.parentTask.taskId, + transactionId: nextTaskPath.parentTask.transactionId, + status: State.TaskStates.Completed, + isSystem: true, + }); + } else { + console.log('Wait for sibling task'); + } } else { await handleCancelWorkflow(workflow, tasksData); } @@ -636,15 +642,21 @@ export const handleFailedTask = async ( const { workflow, tasksData, nextTaskPath } = await getTaskInfo(task); // If workflow oncancle do not retry or anything if (workflow.status === State.WorkflowStates.Cancelled) { - if (nextTaskPath.parentTask && nextTaskPath.isLastChild) { - await processUpdateTask({ - taskId: nextTaskPath.parentTask.taskId, - transactionId: nextTaskPath.parentTask.transactionId, - status: State.TaskStates.Completed, - isSystem: true, - }); - } else if (nextTaskPath.parentTask && !nextTaskPath.isLastChild) { - console.log('Wait for sibling task'); + if (nextTaskPath.parentTask) { + if ( + (nextTaskPath.parentTask.type === Task.TaskTypes.Parallel && + nextTaskPath.isLastChild) || + nextTaskPath.parentTask.type === Task.TaskTypes.Decision + ) { + await processUpdateTask({ + taskId: nextTaskPath.parentTask.taskId, + transactionId: nextTaskPath.parentTask.transactionId, + status: State.TaskStates.Completed, + isSystem: true, + }); + } else { + console.log('Wait for sibling task'); + } } else { await handleCancelWorkflow(workflow, tasksData); }