import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useApp } from '../context/AppContext'; import { useApi } from '../hooks/useApi'; import { OrderData } from '../types'; export function Orders() { const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const navigate = useNavigate(); const { user } = useApp(); const { getOrders } = useApi(); useEffect(() => { if (!user) { navigate('/login'); return; } fetchOrders(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [user, navigate]); const fetchOrders = async () => { try { const data = await getOrders(); setOrders(data); } catch (error) { console.error('Error fetching orders:', error); } finally { setLoading(false); } }; const getStatusColor = (status: string): string => { const colors: Record = { pending: 'bg-yellow-900 text-yellow-200 border-yellow-700', processing: 'bg-blue-900 text-blue-200 border-blue-700', shipped: 'bg-purple-900 text-purple-200 border-purple-700', delivered: 'bg-green-900 text-green-200 border-green-700', cancelled: 'bg-red-900 text-red-200 border-red-700', }; return colors[status] || 'bg-gray-900 text-gray-200 border-gray-700'; }; if (loading) { return (
Loading orders...
); } return (

My Orders

{orders.length === 0 ? (

You have no orders yet

) : (
{orders.map((order) => (

Order #{order.id}

{new Date(order.created_at).toLocaleDateString()}

{order.status.charAt(0).toUpperCase() + order.status.slice(1)}
{order.items.map((item) => (

Product #{item.product_id}

Quantity: {item.quantity}

${(item.price * item.quantity).toFixed(2)}

))}
{order.shipping_address && Ship to: {order.shipping_address}}
Total:{' '} ${order.total_amount}
))}
)}
); }