import Link from "next/link"; import { Suspense } from "react"; import Shell from "./components/shell"; import LogoImg from "./components/logo-img"; import { withLogoUrl } from "@/lib/logo"; import { getDb } from "@/lib/db"; import { getVoucherStatus, type VoucherStatus } from "@/lib/voucher-status"; import { formatEuro, isExpiringSoon } from "@/lib/vouchers"; const FILTERS = [ { key: "", label: "Alle" }, { key: "aktiv", label: "Aktiv" }, { key: "bald", label: "Bald ablaufend" }, { key: "abgelaufen", label: "Abgelaufen" }, { key: "eingeloest", label: "Eingelöst" }, ] as const; const STATUS_STYLE: Record = { aktiv: "bg-brand-50 text-brand-800", abgelaufen: "bg-danger/10 text-danger", eingeloest: "bg-wash text-muted", }; function statusLabel(s: VoucherStatus) { if (s === "aktiv") return "Aktiv"; if (s === "abgelaufen") return "Abgelaufen"; return "Eingelöst"; } function Skeleton() { return ( ); } async function VoucherList({ filter }: { filter: string }) { const db = getDb(); const all = await db.voucher.findMany({ orderBy: { createdAt: "desc" } }); const filtered = all.filter((v) => { const s = getVoucherStatus(v); if (filter === "eingeloest") return s === "eingeloest"; if (filter === "abgelaufen") return s === "abgelaufen"; if (filter === "bald") return s === "aktiv" && isExpiringSoon(v.ablaufdatum); if (filter === "aktiv") return s === "aktiv"; return true; }); const withLogos = await Promise.all(filtered.map(withLogoUrl)); if (filtered.length === 0) { return (

Keine Gutscheine gefunden.

Gutschein anlegen
); } return ( ); } export default async function Home({ searchParams }: { searchParams: Promise<{ filter?: string }> }) { const { filter = "" } = await searchParams; return (

Gutscheine

Alle Gutscheine eures Haushalts im Blick.

Neu
}>
); }