import React, { useState, useEffect, useRef } from "react"; import { Box, Button, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography, TablePagination, TextField, MenuItem, FormControl, InputLabel, Select, Skeleton, } from "@mui/material"; import { useNavigate } from "react-router-dom"; import axios from "axios"; import { isAutheticated } from "src/auth"; import { debounce } from "lodash"; // Import debounce from lodash const ProcessingOrders = () => { const [orders, setOrders] = useState([]); const [loading, setLoading] = useState(true); const [page, setPage] = useState(0); // 0-based page const [rowsPerPage, setRowsPerPage] = useState(5); const [totalOrders, setTotalOrders] = useState(0); const [searchField, setSearchField] = useState("Order ID"); const [searchText, setSearchText] = useState(""); const navigate = useNavigate(); const token = isAutheticated(); const searchRef = useRef(); const fetchOrdersDebounced = useRef( debounce((page, limit, searchField, searchText) => { fetchOrders(page, limit, searchField, searchText); }, 500) ).current; const fetchOrders = async (page, limit, searchField = "", searchText = "") => { setLoading(true); try { const response = await axios.get("/api/get-delivered-invoice-admin", { headers: { Authorization: `Bearer ${token}`, }, params: { limit, page: page + 1, [searchField === "Order ID" ? "orderId" : "invoiceId"]: searchText || "", }, }); setOrders(response?.data?.invoices); setTotalOrders(response?.data?.totalCount); } catch (error) { console.error("Error fetching orders:", error); } finally { setLoading(false); } }; useEffect(() => { fetchOrdersDebounced(page, rowsPerPage, searchField, searchText); }, [page, rowsPerPage, searchField, searchText]); const handleSearchChange = (event) => { const value = event.target.value; setSearchText(value); searchRef.current = value; }; const handleSearchFieldChange = (event) => { setSearchField(event.target.value); }; const handleChangePage = (event, newPage) => { setPage(newPage); }; const handleChangeRowsPerPage = (event) => { setRowsPerPage(parseInt(event.target.value, 10)); setPage(0); }; return ( Delivered Invoice List Search By Order ID Invoice ID Processing Date Items Invoice Value Status Action {loading ? ( Array.from(new Array(rowsPerPage)).map((_, index) => ( )) ) : orders.length > 0 ? ( orders.map((invoice) => ( {invoice.orderId.uniqueId} {invoice.invoiceId} {new Date(invoice.courierstatus_timeline.delivered).toDateString()} , {formatAMPM(invoice.courierstatus_timeline.delivered)} {invoice.items.length} {invoice.invoiceAmount} {invoice.courierStatus} )) ) : ( No data found )}
); }; // Helper function to format time as AM/PM const formatAMPM = (date) => { const hours = new Date(date).getHours(); const minutes = new Date(date).getMinutes(); const ampm = hours >= 12 ? "PM" : "AM"; const formattedHours = hours % 12 || 12; const formattedMinutes = minutes < 10 ? "0" + minutes : minutes; return `${formattedHours}:${formattedMinutes} ${ampm}`; }; export default ProcessingOrders;