"use client"; import { useEffect, useState } from "react"; import { fetchClient } from "@/lib/api-client"; interface OrderItem { name: string; quantity: number; } interface Order { orderId: number | string; userId: number; total: number; createdAt: string; status?: string; items?: OrderItem[]; } export default function RecentOrdersCard() { const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); function statusBadgeClass(status: string) { switch (status) { case 'unpaid': case 'confirming': return 'bg-amber-500/15 text-amber-400'; case 'paid': case 'acknowledged': return 'bg-sky-500/15 text-sky-400'; case 'shipped': return 'bg-purple-500/15 text-purple-400'; case 'completed': return 'bg-emerald-500/15 text-emerald-400'; case 'cancelled': return 'bg-rose-500/15 text-rose-400'; default: return 'bg-muted text-foreground/70'; } } useEffect(() => { let mounted = true; (async () => { try { const data = await fetchClient("/admin/recent-orders"); if (mounted) setOrders(data); } catch (e: any) { if (mounted) setError(e?.message || "Failed to load orders"); } finally { if (mounted) setLoading(false); } })(); return () => { mounted = false; }; }, []); return (

Recent Orders

Last 10 orders across stores

{loading ? (

Loading...

) : error ? (

{error}

) : orders.length === 0 ? (

No recent orders

) : (
{orders.slice(0, 10).map((o) => (
Order #{o.orderId}
{o.status && ( {o.status} )}
{new Date(o.createdAt).toLocaleString()}
User: {o.userId} · Total: £{Number(o.total).toFixed(2)}
{o.items && o.items.length > 0 && (
    {o.items.map((it, idx) => (
  • {it.name} × {it.quantity}
  • ))}
)}
))}
)}
); }