44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect, useState } from "react";
|
|
import { Table } from "@nexarch/shl";
|
|
import type { TableColumn } from "@nexarch/shl";
|
|
import { Preference, fetchTenantOverview } from "../../lib/api";
|
|
|
|
// Akzeptanzkriterium 3: Tenant-Admin sieht eine Übersicht der
|
|
// Benachrichtigungs-Konfiguration seines Tenants. Zugriffsbeschränkung
|
|
// (nur Tenant-Admin) ist RBAC-02s Aufgabe vor diesem Endpunkt, siehe
|
|
// internal/notifyprefs/handler.go.
|
|
export default function OverviewPage() {
|
|
const [prefs, setPrefs] = useState<Preference[] | null>(null);
|
|
const [error, setError] = useState<string | null>(null);
|
|
|
|
useEffect(() => {
|
|
fetchTenantOverview()
|
|
.then(setPrefs)
|
|
.catch(() => setError("Übersicht konnte nicht geladen werden. Nur Tenant-Admins haben Zugriff."));
|
|
}, []);
|
|
|
|
const columns: TableColumn<Preference>[] = [
|
|
{ key: "user", header: "Benutzer-ID", render: (p) => p.UserID },
|
|
{ key: "event", header: "Ereignistyp", render: (p) => p.EventType },
|
|
{ key: "channel", header: "Kanal", render: (p) => p.Channel },
|
|
{ key: "enabled", header: "Aktiviert", render: (p) => (p.Enabled ? "Ja" : "Nein") },
|
|
];
|
|
|
|
return (
|
|
<main style={{ maxWidth: 800, margin: "40px auto", padding: "0 16px" }}>
|
|
<h1>Benachrichtigungs-Übersicht (Mandant)</h1>
|
|
{error && <p role="alert">{error}</p>}
|
|
{prefs && (
|
|
<Table
|
|
columns={columns}
|
|
rows={prefs}
|
|
rowKey={(p) => `${p.UserID}-${p.EventType}-${p.Channel}`}
|
|
caption="Von der Standardeinstellung abweichende Benachrichtigungspräferenzen aller Benutzer"
|
|
/>
|
|
)}
|
|
</main>
|
|
);
|
|
}
|