From 85b8f0db1f67c0b5b4c882c305b804a328676c5b Mon Sep 17 00:00:00 2001 From: Matt Toohey Date: Tue, 31 Mar 2026 10:49:13 +1100 Subject: [PATCH 1/2] feat(projects): navigate to adjacent project immediately on deletion Instead of waiting for the backend deletion to complete before navigating away, immediately select the next project in the list (or previous if deleting the last one, or home if no projects remain). Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/features/projects/ProjectHome.svelte | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/staged/src/lib/features/projects/ProjectHome.svelte b/apps/staged/src/lib/features/projects/ProjectHome.svelte index 5f50f6815..8b415d6f0 100644 --- a/apps/staged/src/lib/features/projects/ProjectHome.svelte +++ b/apps/staged/src/lib/features/projects/ProjectHome.svelte @@ -478,6 +478,17 @@ }) ); + // Navigate away immediately so the user doesn't have to wait for backend deletion + const currentIndex = projects.findIndex((p) => p.id === id); + const remainingProjects = projects.filter((p) => p.id !== id); + if (remainingProjects.length > 0) { + // Prefer next project, fall back to previous + const nextProject = remainingProjects[Math.min(currentIndex, remainingProjects.length - 1)]; + selectProject(nextProject.id); + } else { + goHome(); + } + try { await commands.deleteProject(id); projects = projects.filter((p) => p.id !== id); From 668e7d8ec3dd1f3049d250dd1abb59d8ca1fa835 Mon Sep 17 00:00:00 2001 From: Matt Toohey Date: Tue, 31 Mar 2026 10:53:24 +1100 Subject: [PATCH 2/2] feat(projects): skip already-deleting projects when navigating on deletion When choosing which project to navigate to after deletion, filter out projects that are already mid-deletion (tracked in deletingProjectNames) so the user lands on a live project. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/features/projects/ProjectHome.svelte | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/staged/src/lib/features/projects/ProjectHome.svelte b/apps/staged/src/lib/features/projects/ProjectHome.svelte index 8b415d6f0..81a2b2d45 100644 --- a/apps/staged/src/lib/features/projects/ProjectHome.svelte +++ b/apps/staged/src/lib/features/projects/ProjectHome.svelte @@ -478,13 +478,14 @@ }) ); - // Navigate away immediately so the user doesn't have to wait for backend deletion + // Navigate away immediately so the user doesn't have to wait for backend deletion. + // Skip projects that are already being deleted. const currentIndex = projects.findIndex((p) => p.id === id); - const remainingProjects = projects.filter((p) => p.id !== id); - if (remainingProjects.length > 0) { - // Prefer next project, fall back to previous - const nextProject = remainingProjects[Math.min(currentIndex, remainingProjects.length - 1)]; - selectProject(nextProject.id); + const alive = projects.filter((p) => p.id !== id && !deletingProjectNames.has(p.id)); + if (alive.length > 0) { + // Prefer the next project after the current one; fall back to the closest earlier one + const next = alive.find((p) => projects.indexOf(p) > currentIndex) ?? alive[alive.length - 1]; + selectProject(next.id); } else { goHome(); }