"use client"; import { useState } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Download, ExternalLink, Search } from "lucide-react"; interface OrdersTableProps { initialOrders: any[]; } const statusLabel: Record = { pending: 'Eingegangen', active: 'In Bearbeitung', completed: 'Abgeschlossen', cancelled: 'Storniert', }; const statusClass: Record = { pending: 'bg-amber-500/20 text-amber-400 border border-amber-500/30', active: 'bg-blue-500/20 text-blue-400 border border-blue-500/30', completed: 'bg-green-500/20 text-green-400 border border-green-500/30', cancelled: 'bg-red-500/20 text-red-400 border border-red-500/30', }; export function OrdersTable({ initialOrders }: OrdersTableProps) { const [search, setSearch] = useState(""); const [statusFilter, setStatusFilter] = useState("all"); const filteredOrders = initialOrders.filter((order) => { const orderNum = (order.order_number || "").toLowerCase(); const company = (order.customer_data?.company_name || "").toLowerCase(); const contact = `${order.customer_data?.first_name || ""} ${order.customer_data?.last_name || ""}`.toLowerCase(); const matchesSearch = orderNum.includes(search.toLowerCase()) || company.includes(search.toLowerCase()) || contact.includes(search.toLowerCase()); const matchesStatus = statusFilter === "all" || order.status === statusFilter; return matchesSearch && matchesStatus; }); return (
{/* Filterleiste */}
setSearch(e.target.value)} className="pl-10 bg-slate-950/40 border-white/10 text-white placeholder:text-slate-500" />
{/* Tabelle */}
Bestellnr. Datum Kunde Auswahl Betrag Status Aktionen {filteredOrders.length === 0 ? ( Keine Bestellungen gefunden. ) : ( filteredOrders.map((order) => { const items = order.order_data?.items || []; return ( #{order.order_number || order.id.slice(0, 8)} {new Date(order.created_at).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })}
{order.customer_data?.company_name || 'Privatkunde'}
{order.customer_data?.first_name} {order.customer_data?.last_name}
{items.map((item: any) => ( {item.product_name} {item.selected_modules?.length > 0 && ( +{item.selected_modules.length} )} ))}
{new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(order.total_price)} {statusLabel[order.status] ?? order.status} {order.pdf_url ? ( ) : ( Keine Rechnung )}
); }) )}
); }