From 19216dfa04a99ce74a510917aec46442265a797a Mon Sep 17 00:00:00 2001 From: Vincent Huang Date: Tue, 26 Aug 2025 14:09:31 -0700 Subject: [PATCH 1/2] Added auto-scroll to most recently selected chat history --- .../components/sessions/SessionListView.tsx | 30 ++++++++++++++++++- .../src/components/sessions/SessionsView.tsx | 15 +++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/ui/desktop/src/components/sessions/SessionListView.tsx b/ui/desktop/src/components/sessions/SessionListView.tsx index b86aae593427..46a1cec8ffc6 100644 --- a/ui/desktop/src/components/sessions/SessionListView.tsx +++ b/ui/desktop/src/components/sessions/SessionListView.tsx @@ -155,9 +155,10 @@ interface SearchContainerElement extends HTMLDivElement { interface SessionListViewProps { setView: (view: View, viewOptions?: ViewOptions) => void; onSelectSession: (sessionId: string) => void; + selectedSessionId?: string | null; } -const SessionListView: React.FC = React.memo(({ onSelectSession }) => { +const SessionListView: React.FC = React.memo(({ onSelectSession, selectedSessionId }) => { const [sessions, setSessions] = useState([]); const [filteredSessions, setFilteredSessions] = useState([]); const [dateGroups, setDateGroups] = useState([]); @@ -240,6 +241,32 @@ const SessionListView: React.FC = React.memo(({ onSelectSe }); }, [memoizedDateGroups]); + // Scroll to the selected session when returning from session history view + useEffect(() => { + if (selectedSessionId && showContent && !isLoading) { + const observer = new MutationObserver(() => { + const sessionCard = containerRef.current?.querySelector( + `[session-item-id="${selectedSessionId}"]` + ); + + if (sessionCard) { + observer.disconnect(); + sessionCard.scrollIntoView({ + block:"center" + }); + } + }); + + // Start observing + if (containerRef.current) { + observer.observe(containerRef.current, { + childList: true, + subtree: true + }); + } + } + }, [selectedSessionId, showContent, isLoading]); + // Debounced search effect - performs actual filtering useEffect(() => { if (!debouncedSearchTerm) { @@ -350,6 +377,7 @@ const SessionListView: React.FC = React.memo(({ onSelectSe