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 });
|
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
|
// All application actions
|
||||||
export const Actions = {
|
export const Actions = {
|
||||||
// === Workspace Actions ===
|
// === Workspace Actions ===
|
||||||
@@ -247,18 +263,9 @@ export const Actions = {
|
|||||||
const wasArchived = workspace.archived;
|
const wasArchived = workspace.archived;
|
||||||
|
|
||||||
// Calculate next workspace before archiving
|
// Calculate next workspace before archiving
|
||||||
let nextWorkspaceId: string | null = null;
|
const nextWorkspaceId = !wasArchived
|
||||||
if (!wasArchived) {
|
? getNextWorkspaceId(ctx.activeWorkspaces, workspaceId)
|
||||||
const currentIndex = ctx.activeWorkspaces.findIndex(
|
: null;
|
||||||
(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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform the archive/unarchive
|
// Perform the archive/unarchive
|
||||||
await attemptsApi.update(workspaceId, { archived: !wasArchived });
|
await attemptsApi.update(workspaceId, { archived: !wasArchived });
|
||||||
@@ -288,11 +295,26 @@ export const Actions = {
|
|||||||
variant: 'destructive',
|
variant: 'destructive',
|
||||||
});
|
});
|
||||||
if (result === 'confirmed') {
|
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);
|
await tasksApi.delete(workspace.task_id);
|
||||||
ctx.queryClient.invalidateQueries({ queryKey: taskKeys.all });
|
ctx.queryClient.invalidateQueries({ queryKey: taskKeys.all });
|
||||||
ctx.queryClient.invalidateQueries({
|
ctx.queryClient.invalidateQueries({
|
||||||
queryKey: workspaceSummaryKeys.all,
|
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