From f0ff4ee51d58ec8f1a132c3e205f49d5b4f11308 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Tue, 21 Jul 2026 12:01:23 +0200 Subject: [PATCH] refactor(webui): use central data grids and actions --- .../admin/ConfigurationChangesPanel.tsx | 115 +++++++++--------- .../admin/ConfigurationPackagesPanel.tsx | 93 ++++++-------- .../admin/GovernanceTemplatesPanel.tsx | 12 +- .../features/admin/ModuleManagementPanel.tsx | 16 +-- 4 files changed, 104 insertions(+), 132 deletions(-) diff --git a/webui/src/features/admin/ConfigurationChangesPanel.tsx b/webui/src/features/admin/ConfigurationChangesPanel.tsx index 6387469..3656ee9 100644 --- a/webui/src/features/admin/ConfigurationChangesPanel.tsx +++ b/webui/src/features/admin/ConfigurationChangesPanel.tsx @@ -1,7 +1,7 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { Check, RefreshCw } from "lucide-react"; import type { ApiSettings } from "@govoplan/core-webui"; -import { AdminPageLayout, Button, Card, StatusBadge, adminErrorMessage, formatDateTime, i18nMessage, mergeDeltaRows, useDeltaWatermarks } from "@govoplan/core-webui"; +import { AdminPageLayout, Button, Card, DataGrid, StatusBadge, TableActionGroup, adminErrorMessage, formatDateTime, i18nMessage, mergeDeltaRows, useDeltaWatermarks, type DataGridColumn } from "@govoplan/core-webui"; import { approveConfigurationChangeRequest, fetchConfigurationChangesDelta, @@ -72,6 +72,47 @@ export default function ConfigurationChangesPanel({ settings, canApprove }: {set } const pending = useMemo(() => requests.filter((item) => item.status !== "applied" && item.status !== "rejected"), [requests]); + const requestColumns: DataGridColumn[] = [ + { + id: "setting", + header: "i18n:govoplan-admin.setting.fb449f71", + width: "minmax(220px, 1fr)", + minWidth: 180, + resizable: true, + sortable: true, + filterable: true, + value: (request) => `${request.label || request.key} ${request.key}`, + render: (request) =>
{request.label || request.key}{request.key}
+ }, + { id: "status", header: "i18n:govoplan-admin.status.bae7d5be", width: 150, sortable: true, filterable: true, value: (request) => request.status, render: (request) => }, + { id: "requested", header: "i18n:govoplan-admin.requested.c26bf60f", width: 180, sortable: true, value: (request) => request.requested_at, render: (request) => formatDateTime(request.requested_at) }, + { id: "approvals", header: "i18n:govoplan-admin.approvals.deb9d03c", width: 110, sortable: true, value: (request) => request.approvals.length }, + { id: "target", header: "i18n:govoplan-admin.target.61ad50a9", width: "minmax(180px, .8fr)", minWidth: 160, resizable: true, filterable: true, value: (request) => targetLabel(request.target), render: (request) => targetLabel(request.target) }, + { + id: "actions", + header: "i18n:govoplan-admin.action.97c89a4d", + width: 72, + sticky: "end", + align: "right", + render: (request) =>