From 853356fc8c67910c52f7d651aeabe4e2df15268e Mon Sep 17 00:00:00 2001 From: Assem Hafez Date: Tue, 2 Dec 2025 10:08:21 +0000 Subject: [PATCH 1/2] Notify subscirbers on pending event changes --- .../workflow-history-grouper.test.tsx | 25 +++++++++++++++++++ .../helpers/workflow-history-grouper.ts | 4 +++ 2 files changed, 29 insertions(+) diff --git a/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx b/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx index 4529096d0..0998d0e87 100644 --- a/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx +++ b/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx @@ -471,6 +471,31 @@ describe(WorkflowHistoryGrouper.name, () => { expect(Object.keys(groups).length).toBe(0); }); + it.only('should notify subscribers after pending events are processed', async () => { + const { grouper, waitForProcessing } = setup(); + const scheduledEvent = createScheduleActivityEvent('7'); + grouper.updateEvents([scheduledEvent]); + await waitForProcessing(); + // subscribe to state changes + const mockOnChange = jest.fn(); + grouper.onChange(mockOnChange); + // add pending event on history after scheduled event is processed and onChange is subscribed + await grouper.updatePendingEvents({ + pendingStartActivities: [pendingActivityTaskStartEvent], + pendingStartDecision: null, + }); + + await waitForProcessing(); + expect(mockOnChange).toHaveBeenCalled(); + + const callArgs = mockOnChange.mock.calls[0][0]; + expect(callArgs.groups['7']).toBeDefined(); + expect(callArgs.groups['7'].events).toEqual([ + scheduledEvent, + pendingActivityTaskStartEvent, + ]); + }); + it('should handle pending decision buffer clearing when decision changes', async () => { const { grouper, waitForProcessing } = setup(); diff --git a/src/views/workflow-history/helpers/workflow-history-grouper.ts b/src/views/workflow-history/helpers/workflow-history-grouper.ts index e0917a0d8..30c376d6f 100644 --- a/src/views/workflow-history/helpers/workflow-history-grouper.ts +++ b/src/views/workflow-history/helpers/workflow-history-grouper.ts @@ -413,6 +413,10 @@ export default class WorkflowHistoryGrouper { ); this.updatePendingDecision(currentPendingDecision, newPendingDecision); + + // Report progress to all subscribers + const state = this.getState(); + this.subscribers.forEach((callback) => callback(state)); } /** From 064e7787f7ec3ba1e569e58cf9dfec86882c28dd Mon Sep 17 00:00:00 2001 From: Assem Hafez Date: Tue, 2 Dec 2025 10:15:45 +0000 Subject: [PATCH 2/2] remove .only from test case --- .../helpers/__tests__/workflow-history-grouper.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx b/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx index 0998d0e87..70ab81c7e 100644 --- a/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx +++ b/src/views/workflow-history/helpers/__tests__/workflow-history-grouper.test.tsx @@ -471,7 +471,7 @@ describe(WorkflowHistoryGrouper.name, () => { expect(Object.keys(groups).length).toBe(0); }); - it.only('should notify subscribers after pending events are processed', async () => { + it('should notify subscribers after pending events are processed', async () => { const { grouper, waitForProcessing } = setup(); const scheduledEvent = createScheduleActivityEvent('7'); grouper.updateEvents([scheduledEvent]);