import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { Package, Eye } from 'lucide-react'; import { api } from '@/lib/api/client'; import { toast } from 'sonner'; import SEOHead from '@/components/SEOHead'; interface Order { id: number; order_number: string; date: string; status: string; total: string; items_count: number; } export default function Orders() { const [loading, setLoading] = useState(true); const [orders, setOrders] = useState([]); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); useEffect(() => { loadOrders(); }, [page]); const loadOrders = async () => { try { const data = await api.get('/account/orders', { page, per_page: 10 }); setOrders(data.orders || []); setTotalPages(data.total_pages || 1); } catch (error) { console.error('Load orders error:', error); toast.error('Failed to load orders'); } finally { setLoading(false); } }; const getStatusColor = (status: string) => { const colors: Record = { 'completed': 'bg-green-100 text-green-800', 'processing': 'bg-blue-100 text-blue-800', 'pending': 'bg-yellow-100 text-yellow-800', 'on-hold': 'bg-orange-100 text-orange-800', 'cancelled': 'bg-red-100 text-red-800', 'refunded': 'bg-gray-100 text-gray-800', 'failed': 'bg-red-100 text-red-800', }; return colors[status] || 'bg-gray-100 text-gray-800'; }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', }); }; if (loading) { return (
Loading orders...
); } if (orders.length === 0) { return (

Orders

No orders yet

Browse Products
); } return (

Orders

{orders.map((order) => (

Order #{order.order_number}

{formatDate(order.date)}

{order.status.replace('-', ' ').toUpperCase()}
{order.items_count} {order.items_count === 1 ? 'item' : 'items'}
{order.total} View
))}
{/* Pagination */} {totalPages > 1 && (
Page {page} of {totalPages}
)}
); }