Skip to content

Commit 8f9e44e

Browse files
Fix bug with ungrouped history table when selected event is hidden (#987)
When the ungrouped table view is opened with a selected event that is then hidden by the filters, Virtuoso is unable to find the selected event and so, it crashes. This PR fixes the issue by not doing the check if the selected event is not present in the list of events to show.
1 parent 0f82d1a commit 8f9e44e

File tree

2 files changed

+54
-11
lines changed

2 files changed

+54
-11
lines changed

src/views/workflow-history/workflow-history-ungrouped-table/__tests__/workflow-history-ungrouped-table.test.tsx

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,25 @@ import WorkflowHistoryUngroupedTable from '../workflow-history-ungrouped-table';
1414
jest.mock(
1515
'../../workflow-history-ungrouped-event/workflow-history-ungrouped-event',
1616
() =>
17-
jest.fn(({ eventInfo, isExpanded, toggleIsExpanded, onReset }) => (
18-
<div data-testid="mock-event" data-expanded={isExpanded}>
19-
<button onClick={toggleIsExpanded}>Toggle Event</button>
20-
<div>Event ID: {eventInfo.id}</div>
21-
{onReset && <button onClick={onReset}>Reset Event</button>}
22-
</div>
23-
))
17+
jest.fn(
18+
({
19+
eventInfo,
20+
isExpanded,
21+
toggleIsExpanded,
22+
onReset,
23+
animateOnEnter,
24+
}) => (
25+
<div
26+
data-testid="mock-event"
27+
data-expanded={isExpanded}
28+
data-animate-on-enter={animateOnEnter}
29+
>
30+
<button onClick={toggleIsExpanded}>Toggle Event</button>
31+
<div>Event ID: {eventInfo.id}</div>
32+
{onReset && <button onClick={onReset}>Reset Event</button>}
33+
</div>
34+
)
35+
)
2436
);
2537

2638
jest.mock(
@@ -142,6 +154,32 @@ describe(WorkflowHistoryUngroupedTable.name, () => {
142154

143155
expect(mockOnResetToEventId).toHaveBeenCalledWith('1');
144156
});
157+
158+
it('renders correctly when selectedEventId is not found in eventsInfo', async () => {
159+
setup({
160+
selectedEventId: '3',
161+
});
162+
163+
expect(screen.getByText('ID')).toBeInTheDocument();
164+
165+
const events = await screen.findAllByTestId('mock-event');
166+
expect(events).toHaveLength(2);
167+
events.forEach((e) =>
168+
expect(e).toHaveAttribute('data-animate-on-enter', 'false')
169+
);
170+
});
171+
172+
it('renders correctly when selectedEventId is found in eventsInfo', async () => {
173+
setup({
174+
selectedEventId: '2',
175+
});
176+
177+
expect(screen.getByText('ID')).toBeInTheDocument();
178+
const events = await screen.findAllByTestId('mock-event');
179+
expect(events).toHaveLength(2);
180+
expect(screen.getByText('Event ID: 2')).toBeInTheDocument();
181+
expect(events[1]).toHaveAttribute('data-animate-on-enter', 'true');
182+
});
145183
});
146184

147185
function setup({

src/views/workflow-history/workflow-history-ungrouped-table/workflow-history-ungrouped-table.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { useMemo } from 'react';
2+
13
import { Virtuoso } from 'react-virtuoso';
24

35
import WorkflowHistoryTimelineLoadMore from '../workflow-history-timeline-load-more/workflow-history-timeline-load-more';
@@ -23,6 +25,11 @@ export default function WorkflowHistoryUngroupedTable({
2325
const workflowStartTime =
2426
eventsInfo.length > 0 ? eventsInfo[0].event.eventTime : null;
2527

28+
const maybeHighlightedEventId = useMemo(
29+
() => eventsInfo.findIndex((v) => v.id === selectedEventId),
30+
[eventsInfo, selectedEventId]
31+
);
32+
2633
return (
2734
<>
2835
<styled.TableHeader>
@@ -49,10 +56,8 @@ export default function WorkflowHistoryUngroupedTable({
4956
: {})}
5057
/>
5158
)}
52-
{...(selectedEventId && {
53-
initialTopMostItemIndex: eventsInfo.findIndex(
54-
(v) => v.id === selectedEventId
55-
),
59+
{...(maybeHighlightedEventId !== -1 && {
60+
initialTopMostItemIndex: maybeHighlightedEventId,
5661
})}
5762
rangeChanged={onVisibleRangeChange}
5863
components={{

0 commit comments

Comments
 (0)