From 3177d1d7425e8e01ff4b02365b399c8bc2b2a2e2 Mon Sep 17 00:00:00 2001 From: ItsRoy69 Date: Sat, 11 Apr 2026 09:40:00 +0530 Subject: [PATCH 1/2] fix: stop showing timers as pending after workflow cancellation Signed-off-by: ItsRoy69 --- .../models/event-groups/create-event-group.ts | 11 +++++++++-- src/lib/models/event-groups/event-groups.d.ts | 1 + src/lib/models/event-groups/index.ts | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/lib/models/event-groups/create-event-group.ts b/src/lib/models/event-groups/create-event-group.ts index 76bffab75e..70e26f6c4c 100644 --- a/src/lib/models/event-groups/create-event-group.ts +++ b/src/lib/models/event-groups/create-event-group.ts @@ -81,6 +81,7 @@ const createGroupFor = ( level: undefined, pendingActivity: undefined, pendingNexusOperation: undefined, + cancelRequested: false, userMetadata: event?.userMetadata, get eventTime() { return this.lastEvent?.eventTime; @@ -105,7 +106,8 @@ const createGroupFor = ( !!this.pendingActivity || !!this.pendingNexusOperation || (isTimerStartedEvent(this.initialEvent) && - this.eventList.length === 1) || + this.eventList.length === 1 && + !this.cancelRequested) || (isStartChildWorkflowExecutionInitiatedEvent(this.initialEvent) && this.eventList.length === 2) ); @@ -114,7 +116,12 @@ const createGroupFor = ( return Boolean(this.eventList.find(eventIsFailureOrTimedOut)); }, get isCanceled() { - return Boolean(this.eventList.find(eventIsCanceled)); + return ( + Boolean(this.eventList.find(eventIsCanceled)) || + (isTimerStartedEvent(this.initialEvent) && + this.eventList.length === 1 && + this.cancelRequested) + ); }, get isTerminated() { return Boolean(this.eventList.find(eventIsTerminated)); diff --git a/src/lib/models/event-groups/event-groups.d.ts b/src/lib/models/event-groups/event-groups.d.ts index daf64ddc56..53a1e7560e 100644 --- a/src/lib/models/event-groups/event-groups.d.ts +++ b/src/lib/models/event-groups/event-groups.d.ts @@ -30,6 +30,7 @@ interface EventGroup extends Pick< level: number | undefined; pendingActivity: PendingActivity | undefined; pendingNexusOperation: PendingNexusOperation | undefined; + cancelRequested: boolean; userMetadata?: { summary?: Payload }; decodedLocalActivity?: SummaryAttribute; links: EventLink[]; diff --git a/src/lib/models/event-groups/index.ts b/src/lib/models/event-groups/index.ts index 4daa701dd5..ae7b73b3e9 100644 --- a/src/lib/models/event-groups/index.ts +++ b/src/lib/models/event-groups/index.ts @@ -10,6 +10,8 @@ import { isNexusOperationCanceledEvent, isNexusOperationCompletedEvent, isNexusOperationFailedEvent, + isTimerStartedEvent, + isWorkflowExecutionCancelRequestedEvent, } from '$lib/utilities/is-event-type'; import { getPendingActivity, @@ -104,6 +106,21 @@ export const groupEvents = ( } } + const cancelRequestedEvent = events.find( + isWorkflowExecutionCancelRequestedEvent, + ); + + if (cancelRequestedEvent) { + for (const group of Object.values(groups)) { + if ( + isTimerStartedEvent(group.initialEvent) && + group.eventList.length === 1 + ) { + group.cancelRequested = true; + } + } + } + return sort === 'descending' ? Object.values(groups).reverse() : Object.values(groups); From 09ac8d8944d43e5c1526b0dc9b95d557894d878a Mon Sep 17 00:00:00 2001 From: Alex Tideman Date: Thu, 16 Apr 2026 10:09:52 -0500 Subject: [PATCH 2/2] Update index.ts --- src/lib/models/event-groups/index.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/lib/models/event-groups/index.ts b/src/lib/models/event-groups/index.ts index 06593d20ac..e3b2e50a76 100644 --- a/src/lib/models/event-groups/index.ts +++ b/src/lib/models/event-groups/index.ts @@ -10,12 +10,9 @@ import { isNexusOperationCanceledEvent, isNexusOperationCompletedEvent, isNexusOperationFailedEvent, -<<<<<<< fix/timer-pending-after-cancel-3156 isTimerStartedEvent, isWorkflowExecutionCancelRequestedEvent, -======= isNexusOperationTimedOutEvent, ->>>>>>> main } from '$lib/utilities/is-event-type'; import { getPendingActivity,