'use client' import { useEffect, useState, useRef } from 'react' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import Link from 'next/link' import { RevenueChart } from './revenue-chart' type RecentOrder = { id: string order_number: string created_at: string total_price: number status: string customer_data?: { company_name?: string first_name?: string last_name?: string } } const statusClass: Record = { pending: 'bg-amber-500/20 text-amber-400 border-amber-500/30', active: 'bg-green-500/20 text-green-400 border-green-500/30', cancelled: 'bg-red-500/20 text-red-400 border-red-500/30', } const statusLabel: Record = { pending: 'Eingegangen', active: 'In Bearbeitung', cancelled: 'Storniert', } const POLL_INTERVAL_MS = 30_000 export function AdminRecentOrders() { const [orders, setOrders] = useState([]) const [chartData, setChartData] = useState<{ name: string; value: number }[]>([]) const [newOrderIds, setNewOrderIds] = useState>(new Set()) const [lastChecked, setLastChecked] = useState(new Date()) const knownIds = useRef>(new Set()) const fetchOrders = async () => { try { const res = await fetch('/api/admin/recent-orders', { cache: 'no-store' }); if (!res.ok) return const { orders: fresh, chartData: freshChart } = await res.json() // Neue Bestellungen erkennen (Highlight) const freshIds = new Set(fresh.map((o: RecentOrder) => o.id)) const newOnes = new Set() freshIds.forEach(id => { if (!knownIds.current.has(id)) newOnes.add(id) }) knownIds.current = freshIds setOrders(fresh) setChartData(freshChart || []) setNewOrderIds(newOnes) setLastChecked(new Date()) // Highlight nach 5 Sekunden entfernen if (newOnes.size > 0) { setTimeout(() => setNewOrderIds(new Set()), 5000) } } catch (e) { console.error('Polling error:', e) } } useEffect(() => { fetchOrders() const interval = setInterval(fetchOrders, POLL_INTERVAL_MS) return () => clearInterval(interval) }, []) return (
Übersicht (letzte 6 Monate)

Neue Bestellungen

Aktualisiert: {lastChecked.toLocaleTimeString('de-DE')}
{orders.length === 0 ? (

Noch keine Bestellungen

) : ( orders.map(order => { const isNew = newOrderIds.has(order.id) const customerName = order.customer_data?.company_name || `${order.customer_data?.first_name ?? ''} ${order.customer_data?.last_name ?? ''}`.trim() || 'Unbekannt' return (
{customerName.slice(0, 2).toUpperCase()}

{customerName}

#{order.order_number}

{new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(order.total_price)}

{statusLabel[order.status] ?? order.status}
) }) )}
) }