// import React, { useState } from "react"; // import { useGetOrdersQuery } from "../../features/orders/ordersApi"; // const statusColor = { // PENDING: "bg-yellow-100 text-yellow-800", // PAID: "bg-blue-100 text-blue-800", // SHIPPED: "bg-purple-100 text-purple-800", // DELIVERED: "bg-green-100 text-green-800", // CANCELLED: "bg-red-100 text-red-800", // RETURNED: "bg-gray-100 text-gray-800", // }; // // LEFT FILTERS // const OrderFilters = ({ filters, setFilters }) => { // const toggleStatus = (status) => { // if (filters.status.includes(status)) { // setFilters({ // ...filters, // status: filters.status.filter((s) => s !== status), // }); // } else { // setFilters({ ...filters, status: [...filters.status, status] }); // } // }; // return ( //
//

Filter Orders

//
//

Status

//
// {["PENDING", "ON_THE_WAY", "DELIVERED", "CANCELLED", "RETURNED"].map( // (status) => ( // // ) // )} //
//
//
//

Order Time

// //
//
// ); // }; // // ORDER CARD // const OrderCard = ({ order }) => { // return ( //
// {/* Header */} //
//
//

Order ID

//

{order.orderNumber}

//

// {new Date(order.createdAt).toLocaleString()} //

//
//
// // {order.status.replace("_", " ")} // // // ₹{Number(order.totalAmount).toFixed(2)} // //
//
// {/* Items */} //
// {order.items.map((item) => ( //
//
//

{item.productName}

//

Qty: {item.quantity}

//
//

// ₹{Number(item.price).toFixed(2)} //

//
// ))} //
// {/* Footer */} //
//
//

Shipping Address

//

// {order.address.firstName} {order.address.lastName},{" "} // {order.address.addressLine1}, {order.address.city},{" "} // {order.address.state} - {order.address.postalCode} //

//
//
//

// Payment:{" "} // {order.paymentMethod} //

//

// Payment Status:{" "} // {order.paymentStatus} //

//
//
//
// ); // }; // // MAIN COMPONENT // const MyOrders = () => { // const { data, isLoading, isError } = useGetOrdersQuery({ // page: 1, // limit: 50, // }); // const [filters, setFilters] = useState({ // status: [], // time: "30_DAYS", // }); // const orders = data?.orders || []; // const filteredOrders = orders.filter((order) => { // if (filters.status.length && !filters.status.includes(order.status)) return false; // const orderDate = new Date(order.createdAt); // const now = new Date(); // if (filters.time === "30_DAYS" && (now - orderDate) / (1000 * 60 * 60 * 24) > 30) // return false; // if (filters.time === "2024" && orderDate.getFullYear() !== 2024) return false; // if (filters.time === "2023" && orderDate.getFullYear() !== 2023) return false; // return true; // }); // if (isLoading) // return ( //
// Loading orders... //
// ); // if (isError || !orders.length) // return ( //
// No orders found //
// ); // return ( //
//

My Orders

//
// {/* Filters */} // // {/* Orders */} //
// {filteredOrders.length === 0 ? ( //
// No orders match your filters //
// ) : ( // filteredOrders.map((order) => ) // )} //
//
//
// ); // }; // export default MyOrders; import React, { useState } from "react"; import { useGetOrdersQuery } from "../../features/orders/ordersApi"; import { useNavigate } from "react-router-dom"; import { statusColor } from "../../constants/statusColor"; // const statusColor = { // PENDING: "bg-yellow-100 text-yellow-800", // PAID: "bg-blue-100 text-blue-800", // SHIPPED: "bg-purple-100 text-purple-800", // DELIVERED: "bg-green-100 text-green-800", // CANCELLED: "bg-red-100 text-red-800", // RETURNED: "bg-gray-100 text-gray-800", // }; // LEFT FILTERS const OrderFilters = ({ filters, setFilters }) => { const toggleStatus = (status) => { if (filters.status.includes(status)) { setFilters({ ...filters, status: filters.status.filter((s) => s !== status), }); } else { setFilters({ ...filters, status: [...filters.status, status] }); } }; return (

Filter Orders

Status

{["PENDING", "ON_THE_WAY", "DELIVERED", "CANCELLED", "RETURNED"].map( (status) => ( ) )}

Order Time

); }; // ORDER CARD const OrderCard = ({ order }) => { const navigate = useNavigate(); return (
navigate(`/my-orders/${order.id}`)} > {/* Header */}

Order ID

{order.orderNumber}

{new Date(order.createdAt).toLocaleString()}

{order.status.replace("_", " ")} ₹{Number(order.totalAmount).toFixed(2)}
{/* Items */}
{order.items.map((item) => (

{item.productName}

Qty: {item.quantity}

₹{Number(item.price).toFixed(2)}

))}
{/* Footer */}

Shipping Address

{order.address.firstName} {order.address.lastName},{" "} {order.address.addressLine1}, {order.address.city},{" "} {order.address.state} - {order.address.postalCode}

Payment: {order.paymentMethod}

Payment Status:{" "} {order.paymentStatus}

); }; // MAIN COMPONENT const MyOrders = () => { const { data, isLoading, isError } = useGetOrdersQuery({ page: 1, limit: 50, }); const [filters, setFilters] = useState({ status: [], time: "30_DAYS", }); const [searchQuery, setSearchQuery] = useState(""); const orders = data?.orders || []; const filteredOrders = orders .filter((order) => { if (filters.status.length && !filters.status.includes(order.status)) return false; const orderDate = new Date(order.createdAt); const now = new Date(); if ( filters.time === "30_DAYS" && (now - orderDate) / (1000 * 60 * 60 * 24) > 30 ) return false; if (filters.time === "2024" && orderDate.getFullYear() !== 2024) return false; if (filters.time === "2023" && orderDate.getFullYear() !== 2023) return false; return true; }) .filter((order) => { // SEARCH FILTER if (!searchQuery) return true; const q = searchQuery.toLowerCase(); const inOrderId = order.orderNumber.toLowerCase().includes(q); const inCustomer = `${order.address.firstName} ${order.address.lastName}` .toLowerCase() .includes(q); const inProduct = order.items.some((item) => item.productName.toLowerCase().includes(q) ); return inOrderId || inCustomer || inProduct; }); if (isLoading) return (
Loading orders...
); if (isError || !orders.length) return (
No orders found
); return (

My Orders

{/* SEARCH BAR */} {/* SEARCH BAR */}
setSearchQuery(e.target.value)} placeholder="Search by Order ID, Product, or Customer" className="flex-1 border border-gray-300 rounded-l-xl px-4 py-3 shadow-sm focus:outline-none focus:ring-1 focus:ring-orange-700" />
{/* Filters */} {/* Orders */}
{filteredOrders.length === 0 ? (
No orders match your filters
) : ( filteredOrders.map((order) => ( )) )}
); }; export default MyOrders;