"use client"; import { useState } from "react"; import { Card, CardTitle, Checkbox, Notice } from "@/components/ui"; export type SettingsDto = { editorsMaySetSlug: boolean; }; export function SettingsAdmin({ initial }: { initial: SettingsDto }) { const [wert, setWert] = useState(initial); const [fehler, setFehler] = useState(null); const [hinweis, setHinweis] = useState(null); const [laeuft, setLaeuft] = useState(false); // Bewusst ohne Speichern-Knopf: Ein einzelner Schalter, der erst nach einem // zweiten Klick wirkt, ist eine Stolperfalle. const umschalten = async (aktiv: boolean) => { setLaeuft(true); setFehler(null); setHinweis(null); const vorher = wert; setWert({ ...wert, editorsMaySetSlug: aktiv }); try { const antwort = await fetch("/api/admin/settings", { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ editorsMaySetSlug: aktiv }), }); const rumpf = await antwort.json().catch(() => null); if (!antwort.ok) { throw new Error(rumpf?.error ?? "Speichern nicht möglich."); } setWert(rumpf.settings); setHinweis( aktiv ? "Bearbeiter dürfen Kurz-Links jetzt selbst vergeben und ändern." : "Kurz-Links vergeben und ändern dürfen jetzt nur noch Administratoren.", ); } catch (error) { setWert(vorher); setFehler(error instanceof Error ? error.message : String(error)); } finally { setLaeuft(false); } }; return (
{fehler ? {fehler} : null} {hinweis ? {hinweis} : null} Kurz-Links void umschalten(event.target.checked)} />

Ein Kurz-Link ist eine öffentliche Adresse und steht auf gedruckten Codes. Wer ihn ändert, kann damit Aushänge und Flyer entwerten — die vorherige Adresse bleibt zwar gültig, lässt sich aber auch wieder freigeben.

Deshalb ist das standardmäßig Administratoren vorbehalten. In einem kleinen Team, in dem alle wissen, was ein Kurz-Link bedeutet, ist die Freigabe unbedenklich.

); }