Navigate away when deleting the currently selected workspace (Vibe Kanban) (#1984)
* Done! I've implemented the feature. Here's a summary of the changes to `vibe-kanban/frontend/src/components/ui-new/actions/index.ts`: 1. **Added `getNextWorkspaceId` helper function** (lines 184-196) - A reusable function that finds the next workspace to navigate to when removing a workspace from the active list 2. **Refactored `ArchiveWorkspace`** - Now uses the helper function instead of inline logic 3. **Updated `DeleteWorkspace`** - Added navigation logic that: - Only triggers when deleting the currently viewed workspace - Navigates to the next workspace in the list (or previous if at end) - Falls back to `/workspaces/create` if no other workspaces exist * Cleanup script changes for workspace a60eb506-5db1-4ba7-8ee6-26592885587b
This commit is contained in:
committed by
GitHub
parent
c7cf72a57f
commit
bd034da2db
@@ -185,6 +185,22 @@ function invalidateWorkspaceQueries(
|
||||
queryClient.invalidateQueries({ queryKey: workspaceSummaryKeys.all });
|
||||
}
|
||||
|
||||
// Helper to find the next workspace to navigate to when removing current workspace
|
||||
function getNextWorkspaceId(
|
||||
activeWorkspaces: SidebarWorkspace[],
|
||||
removingWorkspaceId: string
|
||||
): string | null {
|
||||
const currentIndex = activeWorkspaces.findIndex(
|
||||
(ws) => ws.id === removingWorkspaceId
|
||||
);
|
||||
if (currentIndex >= 0 && activeWorkspaces.length > 1) {
|
||||
const nextWorkspace =
|
||||
activeWorkspaces[currentIndex + 1] || activeWorkspaces[currentIndex - 1];
|
||||
return nextWorkspace?.id ?? null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// All application actions
|
||||
export const Actions = {
|
||||
// === Workspace Actions ===
|
||||
@@ -247,18 +263,9 @@ export const Actions = {
|
||||
const wasArchived = workspace.archived;
|
||||
|
||||
// Calculate next workspace before archiving
|
||||
let nextWorkspaceId: string | null = null;
|
||||
if (!wasArchived) {
|
||||
const currentIndex = ctx.activeWorkspaces.findIndex(
|
||||
(ws) => ws.id === workspaceId
|
||||
);
|
||||
if (currentIndex >= 0 && ctx.activeWorkspaces.length > 1) {
|
||||
const nextWorkspace =
|
||||
ctx.activeWorkspaces[currentIndex + 1] ||
|
||||
ctx.activeWorkspaces[currentIndex - 1];
|
||||
nextWorkspaceId = nextWorkspace?.id ?? null;
|
||||
}
|
||||
}
|
||||
const nextWorkspaceId = !wasArchived
|
||||
? getNextWorkspaceId(ctx.activeWorkspaces, workspaceId)
|
||||
: null;
|
||||
|
||||
// Perform the archive/unarchive
|
||||
await attemptsApi.update(workspaceId, { archived: !wasArchived });
|
||||
@@ -288,11 +295,26 @@ export const Actions = {
|
||||
variant: 'destructive',
|
||||
});
|
||||
if (result === 'confirmed') {
|
||||
// Calculate next workspace before deleting (only if deleting current)
|
||||
const isCurrentWorkspace = ctx.currentWorkspaceId === workspaceId;
|
||||
const nextWorkspaceId = isCurrentWorkspace
|
||||
? getNextWorkspaceId(ctx.activeWorkspaces, workspaceId)
|
||||
: null;
|
||||
|
||||
await tasksApi.delete(workspace.task_id);
|
||||
ctx.queryClient.invalidateQueries({ queryKey: taskKeys.all });
|
||||
ctx.queryClient.invalidateQueries({
|
||||
queryKey: workspaceSummaryKeys.all,
|
||||
});
|
||||
|
||||
// Navigate away if we deleted the current workspace
|
||||
if (isCurrentWorkspace) {
|
||||
if (nextWorkspaceId) {
|
||||
ctx.selectWorkspace(nextWorkspaceId);
|
||||
} else {
|
||||
ctx.navigate('/workspaces/create');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user