From 4c89b82d52e0220569e1b5cf78cda8ccc4379dbc Mon Sep 17 00:00:00 2001 From: Val Alexander Date: Fri, 27 Mar 2026 13:27:00 -0500 Subject: [PATCH] Open single-thread projects directly - Navigate to the lone thread when expanding a collapsed project - Keep the project toggle behavior unchanged for multi-thread projects --- apps/web/src/components/Sidebar.tsx | 30 +++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx index 60ea00592..9396956c4 100644 --- a/apps/web/src/components/Sidebar.tsx +++ b/apps/web/src/components/Sidebar.tsx @@ -1435,9 +1435,22 @@ export default function Sidebar() { if (selectedThreadIds.size > 0) { clearSelection(); } + // When expanding a project with exactly one thread, navigate directly to it. + const project = projects.find((p) => p.id === projectId); + if (project && !project.expanded) { + const projectThreads = threads.filter((t) => t.projectId === projectId); + if (projectThreads.length === 1) { + toggleProject(projectId); + void navigate({ + to: "/$threadId", + params: { threadId: projectThreads[0]!.id }, + }); + return; + } + } toggleProject(projectId); }, - [clearSelection, selectedThreadIds.size, toggleProject], + [clearSelection, navigate, projects, selectedThreadIds.size, threads, toggleProject], ); const handleProjectTitleKeyDown = useCallback( @@ -1447,9 +1460,22 @@ export default function Sidebar() { if (dragInProgressRef.current) { return; } + // When expanding a project with exactly one thread, navigate directly to it. + const project = projects.find((p) => p.id === projectId); + if (project && !project.expanded) { + const projectThreads = threads.filter((t) => t.projectId === projectId); + if (projectThreads.length === 1) { + toggleProject(projectId); + void navigate({ + to: "/$threadId", + params: { threadId: projectThreads[0]!.id }, + }); + return; + } + } toggleProject(projectId); }, - [toggleProject], + [navigate, projects, threads, toggleProject], ); useEffect(() => {