From d0ef0531c032d1c673f61b69982db39657645a94 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Tue, 21 Jul 2026 12:34:39 +0200 Subject: [PATCH] refactor(webui): use central admin selections --- webui/src/features/admin/RolesPanel.tsx | 17 +++++++----- webui/src/features/admin/SystemUsersPanel.tsx | 15 +++++------ .../features/admin/TenantSettingsPanel.tsx | 27 +++++++------------ 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/webui/src/features/admin/RolesPanel.tsx b/webui/src/features/admin/RolesPanel.tsx index e25fd98..56ffa01 100644 --- a/webui/src/features/admin/RolesPanel.tsx +++ b/webui/src/features/admin/RolesPanel.tsx @@ -8,7 +8,7 @@ import { Dialog } from "@govoplan/core-webui"; import { FormField } from "@govoplan/core-webui"; import { StatusBadge } from "@govoplan/core-webui"; import { ConfirmDialog } from "@govoplan/core-webui"; -import { AdminIconButton, AdminPageLayout, TableActionGroup, adminErrorMessage } from "@govoplan/core-webui"; +import { AdminIconButton, AdminPageLayout, AdminSelectionList, TableActionGroup, adminErrorMessage } from "@govoplan/core-webui"; import { hasTenantWildcard, i18nMessage, useDeltaWatermarks, useUnsavedDraftGuard } from "@govoplan/core-webui"; import { loadDeltaRows } from "./utils/deltaRows"; @@ -78,10 +78,12 @@ export default function RolesPanel({ settings, auth, canDefine, onAuthRefresh }: setDraft(emptyDraft); setSavedDraftKey(draftKey(emptyDraft)); } - function togglePermission(scope: string, checked: boolean) { - const next = new Set(draft.permissions); - if (checked) next.add(scope);else next.delete(scope); - setDraft({ ...draft, permissions: Array.from(next) }); + function setPermissionGroup(scopes: string[], selected: string[]) { + const groupScopes = new Set(scopes); + setDraft({ + ...draft, + permissions: [...draft.permissions.filter((scope) => !groupScopes.has(scope)), ...selected] + }); } async function save(): Promise { @@ -142,7 +144,10 @@ export default function RolesPanel({ settings, auth, canDefine, onAuthRefresh }: