"use client"; import { use, useEffect, useState } from "react"; import Link from "next/link"; import { formatEuro } from "@/lib/vouchers"; import { getVoucherStatus } from "@/lib/voucher-status"; type Voucher = { id: number; name: string; anbieter: string; wertCents: number; restCents: number; ablaufdatum: string | null; codeText: string | null; kategorie: string | null; notiz: string | null; status: string; contacts?: { contact: { id: number; name: string; email: string | null; telegramChatId: string | null } }[]; }; export default function VoucherDetailPage({ params }: { params: Promise<{ id: string }> }) { const { id } = use(params); const [v, setV] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); useEffect(() => { fetch(`/api/vouchers/${id}`) .then((r) => (r.ok ? r.json() : Promise.reject(new Error("not found")))) .then((d) => setV(d)) .catch(() => setError("Gutschein nicht gefunden")) .finally(() => setLoading(false)); }, [id]); async function redeem() { const res = await fetch(`/api/vouchers/${id}`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ action: "redeem" }), }); if (res.ok) setV(await res.json()); } if (loading) return
; if (error || !v) return (

{error}

Zurück zur Liste
); return (
← Zurück

{v.name}

Anbieter
{v.anbieter}
Wert
{formatEuro(v.wertCents)}
Rest
{formatEuro(v.restCents)}
Status
{getVoucherStatus({ status: v.status, ablaufdatum: v.ablaufdatum ? new Date(v.ablaufdatum) : null })}
{v.ablaufdatum &&
Ablaufdatum
{new Date(v.ablaufdatum).toLocaleDateString("de-DE")}
} {v.codeText &&
Code
{v.codeText}
} {v.kategorie &&
Kategorie
{v.kategorie}
} {v.notiz &&
Notiz
{v.notiz}
} {v.contacts && v.contacts.length > 0 && (
Empfänger
{v.contacts.map((c) => c.contact.name).join(", ")}
)}
{v.status !== "eingeloest" && ( )}
); }