'use client'; import { useEffect, useState } from 'react'; import { api, formatPrice, timeAgo } from '@/lib/api'; import { useAuth } from '@/components/auth-provider'; import { Package, ChevronRight, ChevronLeft, Store } from 'lucide-react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { EmptyState } from '@/components/product-card'; import { PageSkeleton } from '@/components/page-skeleton'; const STATUS_STYLES: Record = { pending: 'bg-amber-100 text-amber-700', confirmed: 'bg-white/5 text-slate-300', paid: 'bg-green-100 text-green-700', shipped: 'bg-white/5 text-slate-300', delivered: 'bg-green-100 text-green-700', cancelled: 'bg-red-100 text-red-700', pending_payment_sent: 'bg-white/5 text-slate-300', }; export default function OrdersPage() { const { user, loading: authLoading } = useAuth(); const router = useRouter(); const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const [expanded, setExpanded] = useState(null); useEffect(() => { if (!authLoading && !user) { router.push('/login?next=/orders'); return; } if (user) { (async () => { const result = await api.orders.list(); if (result.success) setOrders(result.orders || []); setLoading(false); })(); } }, [user, authLoading, router]); if (authLoading || loading) { return ( ); } if (orders.length === 0) { return (

My Orders

} title="No orders yet" message="When you place your first order, it will appear here." action={ } />
); } return (
{/* Top bar */}

My Orders

{orders.map((order) => { const isExpanded = expanded === order.id; const status = (order.status || 'pending').toLowerCase(); const statusStyle = STATUS_STYLES[status] || 'bg-white/5 text-slate-300'; const isPendingPayment = status === 'pending' || status === 'pending_payment_sent' || status === 'confirmed'; return (
{isExpanded && (
{/* Items */} {order.items && order.items.length > 0 && (
{order.items.map((item: any, i: number) => (
{item.products?.image_url ? ( ) : (
)}
{item.product_name || item.products?.name}
Qty {item.quantity} × {formatPrice(item.price)}
{formatPrice(item.price * item.quantity)}
))}
)} {/* Shipping */} {order.shipping_address && (
Shipping to:
{typeof order.shipping_address === 'string' ? order.shipping_address : `${order.shipping_address.full_name || ''} ${order.shipping_address.address || ''} ${order.shipping_address.city || ''} ${order.shipping_address.state || ''}`.trim()}
)} {/* Action */} {isPendingPayment && ( )}
)}
); })}
); }