"use client"; import { useEffect, useState } from "react"; type Member = { id: number; name: string }; export default function MembersSection() { const [members, setMembers] = useState([]); const [name, setName] = useState(""); const [error, setError] = useState(""); async function load() { const res = await fetch("/api/members"); if (res.ok) setMembers(await res.json()); } useEffect(() => { load(); }, []); async function add() { setError(""); const value = name.trim(); if (!value) { setError("Bitte einen Namen eingeben."); return; } const res = await fetch("/api/members", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ name: value }), }); if (!res.ok) { setError(res.status === 409 ? "Dieser Name existiert bereits." : "Speichern fehlgeschlagen."); return; } setName(""); load(); } async function remove(id: number, memberName: string) { if (!window.confirm(`„${memberName}“ aus der Haushaltsliste entfernen? Bereits erfasste Gutscheine behalten den Namen.`)) return; const res = await fetch(`/api/members?id=${id}`, { method: "DELETE" }); if (res.ok) load(); } return (

Haushaltsmitglieder

Wer einen Gutschein anlegt, wählt hier seinen Namen aus.

setName(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); add(); } }} placeholder="Name hinzufügen" aria-label="Name hinzufügen" maxLength={100} className="h-11 min-w-0 flex-1 rounded-field border border-line bg-white px-3.5 text-sm text-ink" />
{error && (

{error}

)} {members.length > 0 && ( )}
); }