diff --git a/frontend/src/lib/components/MaintenanceEventsTable.svelte b/frontend/src/lib/components/MaintenanceEventsTable.svelte
index c81a8e10..5e42e93a 100644
--- a/frontend/src/lib/components/MaintenanceEventsTable.svelte
+++ b/frontend/src/lib/components/MaintenanceEventsTable.svelte
@@ -16,11 +16,14 @@
@@ -192,7 +207,7 @@
-
+
|
{/each}
@@ -241,6 +256,17 @@
{/if}
+
+ {}}
+ />
diff --git a/frontend/src/routes/admin/users/+page.svelte b/frontend/src/routes/admin/users/+page.svelte
index 9f264e64..59e997df 100644
--- a/frontend/src/routes/admin/users/+page.svelte
+++ b/frontend/src/routes/admin/users/+page.svelte
@@ -22,7 +22,7 @@
// [SECTION: IMPORTS]
import { onMount } from 'svelte';
import { t } from '$lib/i18n/index.svelte.js';
- import { Button } from '$lib/ui';
+ import { Button, ConfirmDialog } from '$lib/ui';
import ProtectedRoute from '$lib/components/auth/ProtectedRoute.svelte';
import { adminService } from '../../../services/adminService';
// [/SECTION: IMPORTS]
@@ -36,6 +36,8 @@
let showModal = false;
let isEditing = false;
let currentUserId = null;
+ let showDeleteUserConfirm = $state(false);
+ let deleteUserTarget = $state(null);
let userForm = {
username: '',
email: '',
@@ -135,20 +137,34 @@
}
// #endregion handleSaveUser:Function
- // #region handleDeleteUser:Function [TYPE Function]
+ // #region promptDeleteUser:Function [TYPE Function]
// @ingroup Routes
/**
- * @purpose Deletes a user after confirmation.
+ * @purpose Opens confirmation dialog before deleting a user.
* @pre user object must be valid.
- * @post User deleted if confirmed, data reloaded.
- * @side_effect Triggers API call to adminService.
- * @relation CALLS -> [EXT:method:adminService.deleteUser]
+ * @post Confirmation dialog shown, deletes on confirm.
* @param {Object} user - The user to delete.
*/
- async function handleDeleteUser(user) {
+ function promptDeleteUser(user) {
+ if (deletingUserId) return;
+ deleteUserTarget = user;
+ showDeleteUserConfirm = true;
+ }
+ // #endregion promptDeleteUser:Function
+
+ // #region onConfirmDeleteUser:Function [TYPE Function]
+// @ingroup Routes
+ /**
+ * @purpose Deletes a user after dialog confirmation.
+ * @pre deleteUserTarget is set.
+ * @post User deleted, data reloaded.
+ * @side_effect Triggers API call to adminService.
+ * @relation CALLS -> [EXT:method:adminService.deleteUser]
+ */
+ async function onConfirmDeleteUser() {
+ const user = deleteUserTarget;
+ deleteUserTarget = null;
if (deletingUserId) return;
- if (!confirm($t.admin.users.confirm_delete.replace('{username}', user.username))) return;
-
console.log('[AdminUsersPage][handleDeleteUser][Entry]');
deletingUserId = user.id;
try {
@@ -162,7 +178,7 @@
deletingUserId = null;
}
}
- // #endregion handleDeleteUser:Function
+ // #endregion onConfirmDeleteUser:Function
onMount(loadData);
@@ -230,7 +246,7 @@
|
@@ -350,4 +357,15 @@
{/if}
+
+ {}}
+/>
\ No newline at end of file
diff --git a/frontend/src/routes/tools/storage/+page.svelte b/frontend/src/routes/tools/storage/+page.svelte
index 1ef17054..35aeb9fa 100644
--- a/frontend/src/routes/tools/storage/+page.svelte
+++ b/frontend/src/routes/tools/storage/+page.svelte
@@ -22,6 +22,7 @@
import { listFiles, deleteFile } from '../../../services/storageService';
import { addToast } from '$lib/toasts.svelte.js';
import { t } from '$lib/i18n/index.svelte.js';
+ import { ConfirmDialog } from "$lib/ui";
import FileList from '$lib/components/storage/FileList.svelte';
import FileUpload from '$lib/components/storage/FileUpload.svelte';
// [/SECTION: IMPORTS]
@@ -36,6 +37,8 @@
let files = $state([]);
let isLoading = $state(false);
let currentPath = $state('');
+ let showDeleteConfirm = $state(false);
+ let deletePayload = $state(null);
// #region resolveStorageQueryFromPath:Function [TYPE Function]
// @ingroup Routes
@@ -89,8 +92,15 @@
console.warn('[STORAGE-PAGE][DELETE_SKIP] invalid payload', payload);
return;
}
+ deletePayload = payload;
+ showDeleteConfirm = true;
+ }
+
+ async function onConfirmDelete() {
+ const payload = deletePayload;
+ const { category, path, name } = payload || {};
+ deletePayload = null;
console.log('[STORAGE-PAGE][DELETE_START] category=%s path=%s', category, path);
- if (!confirm($t.storage.messages.delete_confirm.replace('{name}', name))) return;
try {
await deleteFile(category, path);
@@ -229,6 +239,17 @@
+
+ {}}
+/>