'use client' import { useEffect, useState } from 'react' import Link from 'next/link' import { useRouter } from 'next/navigation' import { api } from '@/lib/api' interface Order { id: string order_number: number status: string total_customer_pays: number created_at: string delivered_at: string | null restaurant_name: string logo_url: string | null } const STATUS_LABELS: Record = { pending: 'Placing order', confirmed: 'Confirmed', preparing: 'Being prepared', ready_for_pickup: 'Ready for pickup', driver_assigned: 'Driver on the way', picked_up: 'Out for delivery', delivered: 'Delivered', cancelled: 'Cancelled', } const STATUS_STYLES: Record = { pending: 'text-amber-600', confirmed: 'text-blue-600', preparing: 'text-purple-600', ready_for_pickup: 'text-orange-600', driver_assigned: 'text-teal-600', picked_up: 'text-teal-600', delivered: 'text-green-600', cancelled: 'text-red-500', } const ACTIVE_STATUSES = ['pending', 'confirmed', 'preparing', 'ready_for_pickup', 'driver_assigned', 'picked_up'] export default function OrdersPage() { const router = useRouter() const [orders, setOrders] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { const token = localStorage.getItem('vibe_token') if (!token) { router.replace('/login?redirect=/orders'); return } api.get('/orders/mine').then((r) => { setOrders(r.data || []) }).catch(() => {}).finally(() => setLoading(false)) }, []) const activeOrders = orders.filter((o) => ACTIVE_STATUSES.includes(o.status)) const pastOrders = orders.filter((o) => !ACTIVE_STATUSES.includes(o.status)) return (
{/* Header */}

My Orders

{loading ? (
{[...Array(4)].map((_, i) =>
)}
) : orders.length === 0 ? (
๐Ÿ”

No orders yet

Your order history will appear here.

Browse Restaurants โ†’
) : ( <> {activeOrders.length > 0 && (

In Progress

{activeOrders.map((order) => ( ))}
)} {pastOrders.length > 0 && (

Past Orders

{pastOrders.map((order) => ( ))}
)} )}
) } function OrderCard({ order, active }: { order: Order; active: boolean }) { const date = new Date(order.created_at).toLocaleDateString('en-CA', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', }) return (
{order.logo_url ? ( ) : '๐Ÿฝ๏ธ'}

{order.restaurant_name}

#{order.order_number} ยท {date}

${Number(order.total_customer_pays).toFixed(2)}

{STATUS_LABELS[order.status] || order.status}

{active && (
Track โ†’
)} ) } function getProgress(status: string): number { const steps: Record = { pending: 10, confirmed: 25, preparing: 50, ready_for_pickup: 65, driver_assigned: 75, picked_up: 88, delivered: 100, } return steps[status] || 0 }