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 9acc42065b..e3b2e50a76 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, isNexusOperationTimedOutEvent, } from '$lib/utilities/is-event-type'; import { @@ -106,6 +108,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);