Keep selected activity history stable

This commit is contained in:
wuyang6
2026-05-14 14:13:48 +08:00
parent 2203ba6f70
commit 54d85609d1
@@ -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;