"use client"; import { useQuery } from "@tanstack/react-query"; import { api } from "@/lib/api"; import type { Invoice } from "@/lib/types"; import { format } from "date-fns"; import { de } from "date-fns/locale"; import { Receipt, Loader2 } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { Breadcrumb } from "@/components/layout/Breadcrumb"; const STATUS_BADGE: Record = { draft: "bg-neutral-100 text-neutral-600", sent: "bg-blue-50 text-blue-700", paid: "bg-emerald-50 text-emerald-700", cancelled: "bg-red-50 text-red-600", }; const STATUS_LABEL: Record = { draft: "Entwurf", sent: "Versendet", paid: "Bezahlt", cancelled: "Storniert", }; export default function RechnungenPage() { const [statusFilter, setStatusFilter] = useState(""); const { data, isLoading } = useQuery({ queryKey: ["invoices", statusFilter], queryFn: () => { const params = statusFilter ? `?status=${statusFilter}` : ""; return api.get<{ invoices: Invoice[] }>(`/invoices${params}`); }, }); const invoices = data?.invoices ?? []; return (

Rechnungen

{/* Filters */}
{["", "draft", "sent", "paid", "cancelled"].map((s) => ( ))}
{isLoading ? (
) : invoices.length === 0 ? (

Keine Rechnungen vorhanden.

) : (
{invoices.map((inv) => (

{inv.invoice_number}

{STATUS_LABEL[inv.status]}

{inv.client_name} {inv.issued_at && ` — ${format(new Date(inv.issued_at), "d. MMM yyyy", { locale: de })}`}

{inv.total.toFixed(2)} EUR

))}
)}
); }