"use client"; import { useState, useEffect } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Eye, Loader, CheckCircle, XCircle, ChevronLeft, ChevronRight, } from "lucide-react"; import Link from "next/link"; import { fetchWithAuthClient } from "@/lib/client-utils"; import { toast } from "sonner"; // ✅ Define Order Type interface Order { _id: string; orderId: number; status: string; totalPrice: number; escrowExpiresAt: string; telegramUsername: string; } interface OrdersResponse { orders: Order[]; page: number; totalPages: number; } export default function OrderTable() { const [orders, setOrders] = useState(null); const [loading, setLoading] = useState(true); const [statusFilter, setStatusFilter] = useState("all"); // ✅ Status Filter const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(1); // ✅ Fetch Orders with Pagination & Filtering useEffect(() => { const fetchOrders = async () => { try { setLoading(true); const query = new URLSearchParams({ page: currentPage.toString(), limit: "10", }); if (statusFilter !== "all") { query.append("status", statusFilter); } const response: OrdersResponse = await fetchWithAuthClient( `/orders?${query.toString()}` ); if (response.orders) { setOrders(response.orders); setTotalPages(response.totalPages); } else { throw new Error("Invalid API response format"); } } catch (error) { toast.error("Failed to fetch orders."); console.error("Error fetching orders:", error); } finally { setLoading(false); } }; fetchOrders(); }, [statusFilter, currentPage]); return (
{/* ✅ Filtering UI */}

Orders

Order ID{" "} {/* Center-aligned */} Total (£) Status Buyer Action {loading ? ( ) : orders && orders.length > 0 ? ( orders.map((order) => ( #{order.orderId} £{order.totalPrice.toFixed(2)} {order.status === "paid" ? (
Paid
) : (
{order.status}
)}
@{order.telegramUsername}
)) ) : ( No orders found. )}
Page {currentPage} of {totalPages}
); }