From c6a83e8725ad3a90b790e832f8798e9754e1022d Mon Sep 17 00:00:00 2001 From: NotII <46204250+NotII@users.noreply.github.com> Date: Fri, 21 Feb 2025 13:30:50 +0000 Subject: [PATCH] Update order-table.tsx --- components/tables/order-table.tsx | 78 +++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/components/tables/order-table.tsx b/components/tables/order-table.tsx index 321db84..4a695d5 100644 --- a/components/tables/order-table.tsx +++ b/components/tables/order-table.tsx @@ -31,6 +31,17 @@ import Link from "next/link"; import { clientFetch } from '@/lib/client-utils'; import { toast } from "sonner"; import { Checkbox } from "@/components/ui/checkbox"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; interface Order { _id: string; @@ -61,6 +72,7 @@ export default function OrderTable() { direction: "asc" | "desc"; }>({ column: "orderDate", direction: "desc" }); const [selectedOrders, setSelectedOrders] = useState>(new Set()); + const [isShipping, setIsShipping] = useState(false); const ITEMS_PER_PAGE = 10; // Fetch orders with error handling @@ -140,23 +152,39 @@ export default function OrderTable() { } try { - await clientFetch("/orders/mark-shipped", { + setIsShipping(true); + const response = await clientFetch("/orders/mark-shipped", { method: "POST", body: JSON.stringify({ orderIds: Array.from(selectedOrders) }) }); - setOrders(prev => - prev.map(order => - selectedOrders.has(order._id) - ? { ...order, status: "shipped" } - : order - ) - ); + // Only update orders that were successfully marked as shipped + if (response.success && response.success.orders) { + const successfulOrderIds = new Set(response.success.orders.map((o: any) => o.id)); + + setOrders(prev => + prev.map(order => + successfulOrderIds.has(order._id) + ? { ...order, status: "shipped" } + : order + ) + ); + + if (response.failed && response.failed.count > 0) { + toast.warning(`${response.failed.count} orders could not be marked as shipped`); + } + + if (response.success.count > 0) { + toast.success(`${response.success.count} orders marked as shipped`); + } + } + setSelectedOrders(new Set()); - toast.success("Selected orders marked as shipped"); } catch (error) { toast.error("Failed to update orders"); console.error("Shipping error:", error); + } finally { + setIsShipping(false); } }; @@ -188,10 +216,33 @@ export default function OrderTable() { - + + + + + + + Mark Orders as Shipped + + Are you sure you want to mark {selectedOrders.size} order{selectedOrders.size !== 1 ? 's' : ''} as shipped? + This action cannot be undone. + + + + Cancel + + Confirm + + + + {/* Table */} @@ -244,6 +295,7 @@ export default function OrderTable() { toggleSelection(order._id)} + disabled={order.status !== "paid"} /> #{order.orderId}