"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { validateVoucher } from "@/lib/vouchers"; // Erweiterbar für Task 5 (Kontakte): zusätzliches Feld contactIds + // ohne bestehende Felder anzufassen — Felder als Konfiguration belassen. const FIELDS = [ { name: "name", label: "Name", type: "text" }, { name: "anbieter", label: "Anbieter", type: "text" }, { name: "wertCents", label: "Wert (Cent)", type: "number" }, { name: "restCents", label: "Rest (Cent, leer = Wert)", type: "number" }, { name: "ablaufdatum", label: "Ablaufdatum", type: "date" }, { name: "codeText", label: "Code", type: "text" }, { name: "kategorie", label: "Kategorie", type: "text" }, { name: "notiz", label: "Notiz", type: "text" }, ] as const; export default function NewVoucherPage() { const router = useRouter(); const [values, setValues] = useState>({}); const [errors, setErrors] = useState([]); const [serverError, setServerError] = useState(""); const [contacts, setContacts] = useState<{ id: number; name: string }[]>([]); const [contactIds, setContactIds] = useState([]); useEffect(() => { fetch("/api/contacts") .then((r) => (r.ok ? r.json() : [])) .then(setContacts) .catch(() => {}); }, []); function set(name: string, value: string) { setValues((v) => ({ ...v, [name]: value })); } async function onSubmit(e: React.FormEvent) { e.preventDefault(); const wertCents = Number(values.wertCents); const restRaw = values.restCents; const input = { name: values.name ?? "", anbieter: values.anbieter ?? "", wertCents, restCents: restRaw === undefined || restRaw === "" ? wertCents : Number(restRaw), ablaufdatum: values.ablaufdatum || null, codeText: values.codeText || null, kategorie: values.kategorie || null, notiz: values.notiz || null, }; const errs = validateVoucher(input); setErrors(errs); if (errs.length) return; const res = await fetch("/api/vouchers", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ ...input, contactIds }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); setErrors(data.errors ?? []); setServerError(data.errors ? "" : "Speichern fehlgeschlagen"); return; } const created = await res.json(); router.push(`/vouchers/${created.id}`); } return (

Gutschein anlegen

{FIELDS.map((f) => (
set(f.name, e.target.value)} className="mt-1 w-full rounded border px-3 py-2" /> {errors.includes(f.name) &&

Ungültig: {f.name}

}
))}

Empfänger

{contacts.map((c) => ( ))}
{serverError &&

{serverError}

}
); }