From 1d081ae349e9dfeac3cfdea18420503ab3bf1831 Mon Sep 17 00:00:00 2001 From: Haileyesus Date: Wed, 11 Feb 2026 16:32:34 +0300 Subject: [PATCH] refactor(sidebar): update sessionMeta handling for session loading logic - This fixes an issue where the sidebar was showing 6+ even when there were only 5 sessions, due to the hasMore logic not accounting for the case where there are exactly 6 sessions. It was also showing "Show more sessions" even where there were no more sessions to load. - This was because `hasMore` was sometimes `undefined` and the logic checked for hasMore !== false, which treated undefined as true. Now we explicitly check for hasMore === true to determine if there are more sessions to load. --- server/projects.js | 18 +++++++++++++++--- src/components/sidebar/SidebarProjectItem.tsx | 2 +- .../sidebar/SidebarProjectSessions.tsx | 2 +- src/hooks/useSidebarController.ts | 2 +- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server/projects.js b/server/projects.js index fb54898..50a22c5 100755 --- a/server/projects.js +++ b/server/projects.js @@ -434,7 +434,11 @@ async function getProjects(progressCallback = null) { displayName: customName || autoDisplayName, fullPath: fullPath, isCustomName: !!customName, - sessions: [] + sessions: [], + sessionMeta: { + hasMore: false, + total: 0 + } }; // Try to get sessions for this project (just first 5 for performance) @@ -447,6 +451,10 @@ async function getProjects(progressCallback = null) { }; } catch (e) { console.warn(`Could not load sessions for project ${entry.name}:`, e.message); + project.sessionMeta = { + hasMore: false, + total: 0 + }; } // Also fetch Cursor sessions for this project @@ -526,7 +534,7 @@ async function getProjects(progressCallback = null) { } } - const project = { + const project = { name: projectName, path: actualProjectDir, displayName: projectConfig.displayName || await generateDisplayName(projectName, actualProjectDir), @@ -534,9 +542,13 @@ async function getProjects(progressCallback = null) { isCustomName: !!projectConfig.displayName, isManuallyAdded: true, sessions: [], + sessionMeta: { + hasMore: false, + total: 0 + }, cursorSessions: [], codexSessions: [] - }; + }; // Try to fetch Cursor sessions for manual projects too try { diff --git a/src/components/sidebar/SidebarProjectItem.tsx b/src/components/sidebar/SidebarProjectItem.tsx index 949e9c0..bcbaf84 100644 --- a/src/components/sidebar/SidebarProjectItem.tsx +++ b/src/components/sidebar/SidebarProjectItem.tsx @@ -97,7 +97,7 @@ export default function SidebarProjectItem({ }: SidebarProjectItemProps) { const isSelected = selectedProject?.name === project.name; const isEditing = editingProject === project.name; - const hasMoreSessions = project.sessionMeta?.hasMore !== false; + const hasMoreSessions = project.sessionMeta?.hasMore === true; const sessionCountDisplay = getSessionCountDisplay(sessions, hasMoreSessions); const sessionCountLabel = `${sessionCountDisplay} session${sessions.length === 1 ? '' : 's'}`; const taskStatus = getTaskIndicatorStatus(project, mcpServerStatus); diff --git a/src/components/sidebar/SidebarProjectSessions.tsx b/src/components/sidebar/SidebarProjectSessions.tsx index b504bef..3cc63ef 100644 --- a/src/components/sidebar/SidebarProjectSessions.tsx +++ b/src/components/sidebar/SidebarProjectSessions.tsx @@ -78,7 +78,7 @@ export default function SidebarProjectSessions({ } const hasSessions = sessions.length > 0; - const hasMoreSessions = project.sessionMeta?.hasMore !== false; + const hasMoreSessions = project.sessionMeta?.hasMore === true; return (
diff --git a/src/hooks/useSidebarController.ts b/src/hooks/useSidebarController.ts index 02aed2a..4549767 100644 --- a/src/hooks/useSidebarController.ts +++ b/src/hooks/useSidebarController.ts @@ -324,7 +324,7 @@ export function useSidebarController({ const loadMoreSessions = useCallback( async (project: Project) => { - const canLoadMore = project.sessionMeta?.hasMore !== false; + const canLoadMore = project.sessionMeta?.hasMore === true; if (!canLoadMore || loadingSessions[project.name]) { return; }