From f6d484aa56b3c106e3692486f907e0f9a24489b2 Mon Sep 17 00:00:00 2001 From: Jos Vooges | STH Date: Sun, 13 Sep 2026 16:36:10 +0200 Subject: [PATCH] Allow admin email edits and cap the viewer list to 12 rows without a scrollbar. --- apps/admin-ui/src/app/viewers/page.tsx | 85 +++++++++++++++++++++++++- apps/master-api/src/viewer/routes.ts | 1 + apps/master-api/src/viewer/service.ts | 24 +++++++- 3 files changed, 107 insertions(+), 3 deletions(-) diff --git a/apps/admin-ui/src/app/viewers/page.tsx b/apps/admin-ui/src/app/viewers/page.tsx index 0a7d89a..cf51d02 100644 --- a/apps/admin-ui/src/app/viewers/page.tsx +++ b/apps/admin-ui/src/app/viewers/page.tsx @@ -167,6 +167,7 @@ export default function ViewersPage() { const [addonInstallUrls, setAddonInstallUrls] = useState>({}); const [claimCodes, setClaimCodes] = useState>({}); const [newPasswords, setNewPasswords] = useState>({}); + const [editEmails, setEditEmails] = useState>({}); const load = useCallback(() => { fetch("/api/v1/admin/viewers", { credentials: "include" }) @@ -633,6 +634,39 @@ export default function ViewersPage() { } } + async function changeViewerEmail(v: Viewer) { + const next = (editEmails[v.id] ?? v.email).trim().toLowerCase(); + if (!next || !next.includes("@")) { + setErr("Ongeldig e-mailadres"); + return; + } + if (next === v.email.toLowerCase()) { + setMsg("E-mailadres is ongewijzigd"); + return; + } + setActionId(`email-${v.id}`); + setMsg(null); + setErr(null); + try { + const res = await fetch(`/api/v1/admin/viewers/${v.id}`, { + method: "PATCH", + credentials: "include", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ email: next }), + }); + const data = await res.json().catch(() => ({})); + if (!res.ok) { + setErr(data.error?.message ?? "E-mail wijzigen mislukt"); + return; + } + setEditEmails((prev) => ({ ...prev, [v.id]: next })); + setMsg(`E-mail gewijzigd naar ${next}`); + load(); + } finally { + setActionId(null); + } + } + async function deleteViewer(v: Viewer) { const label = v.name || v.email; if ( @@ -979,6 +1013,41 @@ export default function ViewersPage() {
+ +