From 7c8dee2dbebfdf51bdff4ac6fc251671467a6682 Mon Sep 17 00:00:00 2001 From: tristantr Date: Thu, 30 Oct 2025 11:36:29 +0100 Subject: [PATCH] Add confirmation modals when deleting/archiving a workspace --- .../(logged)/workspace_settings/+page.svelte | 77 +++++++++++++++---- 1 file changed, 63 insertions(+), 14 deletions(-) diff --git a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte index f232570c39..bd85d8e879 100644 --- a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte @@ -57,8 +57,14 @@ } from '$lib/components/workspaceSettings/DucklakeSettings.svelte' import { AIMode } from '$lib/components/copilot/chat/AIChatManager.svelte' import UnsavedConfirmationModal from '$lib/components/common/confirmationModal/UnsavedConfirmationModal.svelte' + import ConfirmationModal from '$lib/components/common/confirmationModal/ConfirmationModal.svelte' import TextInput from '$lib/components/text_input/TextInput.svelte' + // Modal state for workspace deletion + let archiveModalOpen = $state(false) + let deleteModalOpen = $state(false) + let isProcessingWorkspaceDeletion = $state(false) + let slackInitialPath: string = $state('') let slackScriptPath: string = $state('') let teamsInitialPath: string = $state('') @@ -742,13 +748,7 @@ disabled={$workspaceStore === 'admins' || $workspaceStore === 'starter'} unifiedSize="md" btnClasses="mt-2" - on:click={async () => { - await WorkspaceService.archiveWorkspace({ workspace: $workspaceStore ?? '' }) - sendUserToast(`Archived workspace ${$workspaceStore}`) - workspaceStore.set(undefined) - usersWorkspaceStore.set(undefined) - goto('/user/workspaces') - }} + on:click={() => (archiveModalOpen = true)} > Archive workspace @@ -759,13 +759,7 @@ disabled={$workspaceStore === 'admins' || $workspaceStore === 'starter'} size="sm" btnClasses="mt-2" - on:click={async () => { - await WorkspaceService.deleteWorkspace({ workspace: $workspaceStore ?? '' }) - sendUserToast(`Deleted workspace ${$workspaceStore}`) - workspaceStore.set(undefined) - usersWorkspaceStore.set(undefined) - goto('/user/workspaces') - }} + on:click={() => (deleteModalOpen = true)} > Delete workspace (superadmin) @@ -1050,5 +1044,60 @@ tabMode={true} /> + { + isProcessingWorkspaceDeletion = true + try { + await WorkspaceService.archiveWorkspace({ workspace: $workspaceStore ?? '' }) + sendUserToast(`Archived workspace ${$workspaceStore}`) + workspaceStore.set(undefined) + usersWorkspaceStore.set(undefined) + goto('/user/workspaces') + } finally { + isProcessingWorkspaceDeletion = false + archiveModalOpen = false + } + }} + onCanceled={() => (archiveModalOpen = false)} +> + + Are you sure you want to archive workspace {$workspaceStore}? This action can be reversed by a superadmin. + + + + { + isProcessingWorkspaceDeletion = true + try { + await WorkspaceService.deleteWorkspace({ workspace: $workspaceStore ?? '' }) + sendUserToast(`Deleted workspace ${$workspaceStore}`) + workspaceStore.set(undefined) + usersWorkspaceStore.set(undefined) + goto('/user/workspaces') + } finally { + isProcessingWorkspaceDeletion = false + deleteModalOpen = false + } + }} + onCanceled={() => (deleteModalOpen = false)} +> + + Are you sure you want to permanently delete workspace {$workspaceStore}? + +

+ This action is irreversible and will permanently delete all data in this workspace. +

+
+