Keep selected activity history stable
This commit is contained in:
@@ -168,21 +168,32 @@ export function ActivityPanel() {
|
|||||||
() => collectLiveRunItems(liveRunStatus),
|
() => collectLiveRunItems(liveRunStatus),
|
||||||
[liveRunStatus],
|
[liveRunStatus],
|
||||||
);
|
);
|
||||||
|
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
|
||||||
|
const selectedMessageItems = selectedMessageId
|
||||||
|
? messageItems.filter(
|
||||||
|
(item) => activityMessageId(item.id) === selectedMessageId,
|
||||||
|
)
|
||||||
|
: [];
|
||||||
const shouldUseLiveItems =
|
const shouldUseLiveItems =
|
||||||
|
!selectedMessageId &&
|
||||||
liveItems.length > 0 &&
|
liveItems.length > 0 &&
|
||||||
activeSessionId !== null &&
|
activeSessionId !== null &&
|
||||||
(activeSessionId !== replayedSessionId || hasActiveRun(liveRunStatus));
|
(activeSessionId !== replayedSessionId || hasActiveRun(liveRunStatus));
|
||||||
const items = shouldUseLiveItems ? liveItems : messageItems;
|
const items = shouldUseLiveItems ? liveItems : messageItems;
|
||||||
const selectedMessageId = selectedId ? activityMessageId(selectedId) : null;
|
|
||||||
const selectedItems = selectedMessageId
|
const selectedItems = selectedMessageId
|
||||||
? items.filter((item) => activityMessageId(item.id) === selectedMessageId)
|
? items.filter((item) => activityMessageId(item.id) === selectedMessageId)
|
||||||
: [];
|
: [];
|
||||||
const visibleItems =
|
const visibleItems =
|
||||||
selectedMessageId && selectedItems.length > 0 ? selectedItems : items;
|
selectedMessageId && selectedMessageItems.length > 0
|
||||||
|
? selectedMessageItems
|
||||||
|
: selectedMessageId && selectedItems.length > 0
|
||||||
|
? selectedItems
|
||||||
|
: items;
|
||||||
const selectedActivityMissing = Boolean(
|
const selectedActivityMissing = Boolean(
|
||||||
selectedMessageId &&
|
selectedMessageId &&
|
||||||
!shouldUseLiveItems &&
|
!shouldUseLiveItems &&
|
||||||
items.length > 0 &&
|
messageItems.length > 0 &&
|
||||||
|
selectedMessageItems.length === 0 &&
|
||||||
selectedItems.length === 0,
|
selectedItems.length === 0,
|
||||||
);
|
);
|
||||||
const prevLatestIdRef = useRef<string | null>(null);
|
const prevLatestIdRef = useRef<string | null>(null);
|
||||||
@@ -207,13 +218,14 @@ export function ActivityPanel() {
|
|||||||
const latestId = items.at(-1)?.id ?? null;
|
const latestId = items.at(-1)?.id ?? null;
|
||||||
if (
|
if (
|
||||||
mode === "activity" &&
|
mode === "activity" &&
|
||||||
|
!selectedId &&
|
||||||
latestId &&
|
latestId &&
|
||||||
latestId !== prevLatestIdRef.current
|
latestId !== prevLatestIdRef.current
|
||||||
) {
|
) {
|
||||||
openActivity();
|
openActivity();
|
||||||
}
|
}
|
||||||
prevLatestIdRef.current = latestId;
|
prevLatestIdRef.current = latestId;
|
||||||
}, [items, mode, openActivity]);
|
}, [items, mode, openActivity, selectedId]);
|
||||||
|
|
||||||
if (!open) return null;
|
if (!open) return null;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user