diff --git a/RestroHub-FrontEnd/src/components/admin/orders/orderComponents/OrderCard.jsx b/RestroHub-FrontEnd/src/components/admin/orders/orderComponents/OrderCard.jsx index e3ccd9ac..4cad0d4b 100644 --- a/RestroHub-FrontEnd/src/components/admin/orders/orderComponents/OrderCard.jsx +++ b/RestroHub-FrontEnd/src/components/admin/orders/orderComponents/OrderCard.jsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useState } from "react"; import { Clock, ChefHat, @@ -27,7 +27,7 @@ const OrderCard = ({ order, onStatusUpdate }) => { text: 'text-yellow-700', border: 'border-yellow-200', icon: Clock, - label: 'Pending', + label: "Pending", }, CONFIRMED: { bg: 'bg-indigo-50', @@ -48,7 +48,7 @@ const OrderCard = ({ order, onStatusUpdate }) => { text: 'text-green-700', border: 'border-green-200', icon: CheckCircle2, - label: 'Ready', + label: "Ready", }, SERVED: { bg: 'bg-teal-50', @@ -62,7 +62,14 @@ const OrderCard = ({ order, onStatusUpdate }) => { text: 'text-purple-700', border: 'border-purple-200', icon: Receipt, - label: 'Billed', + label: "Billed", + }, + cancelled: { + bg: "bg-red-50", + text: "text-red-700", + border: "border-red-200", + icon: X, + label: "Cancelled", }, COMPLETED: { bg: 'bg-gray-50', @@ -101,37 +108,46 @@ const OrderCard = ({ order, onStatusUpdate }) => { label: 'Start Preparing', next: 'PREPARING', icon: ChefHat, - bg: 'bg-blue-50', - text: 'text-blue-700', - hoverBg: 'hover:bg-blue-100', - border: 'border border-blue-200', + bg: "bg-blue-50", + text: "text-blue-700", + hoverBg: "hover:bg-blue-100", + border: "border border-blue-200", }, PREPARING: { label: 'Mark Ready', next: 'READY', icon: CheckCircle2, - bg: 'bg-green-50', - text: 'text-green-700', - hoverBg: 'hover:bg-green-100', - border: 'border border-green-200', + bg: "bg-green-50", + text: "text-green-700", + hoverBg: "hover:bg-green-100", + border: "border border-green-200", }, READY: { label: 'Generate Bill', next: 'BILLED', icon: Receipt, - bg: 'bg-purple-50', - text: 'text-purple-700', - hoverBg: 'hover:bg-purple-100', - border: 'border border-purple-200', + bg: "bg-purple-50", + text: "text-purple-700", + hoverBg: "hover:bg-purple-100", + border: "border border-purple-200", }, BILLED: { label: 'Complete Order', next: 'COMPLETED', icon: CreditCard, - bg: 'bg-gray-50', - text: 'text-gray-700', - hoverBg: 'hover:bg-gray-100', - border: 'border border-gray-200', + bg: "bg-gray-50", + text: "text-gray-700", + hoverBg: "hover:bg-gray-100", + border: "border border-gray-200", + }, + cancelled: { + label: "Cancelled", + next: null, + icon: X, + bg: "bg-red-50", + text: "text-red-700", + hoverBg: "hover:bg-red-100", + border: "border border-red-200", }, }; @@ -163,7 +179,29 @@ const OrderCard = ({ order, onStatusUpdate }) => { await new Promise((resolve) => setTimeout(resolve, 400)); onStatusUpdate(order.id, action.next); } catch (err) { - console.error('Failed to update order:', err); + console.error("Failed to update order:", err); + } finally { + setUpdating(false); + } + }; + + const handleCancel = async () => { + const isConfirmed = window.confirm( + "Are you sure you want to cancel this order?", + ); + if (!isConfirmed) return; + + try { + setUpdating(true); + + // 🔌 UNCOMMENT WHEN API READY + // await api.put(`/api/orders/${order.id}/status`, { status: 'cancelled' }); + // toast.success(`Order #${order.id} cancelled`); + + await new Promise((resolve) => setTimeout(resolve, 400)); + onStatusUpdate(order.id, "cancelled"); + } catch (err) { + console.error("Failed to cancel order:", err); } finally { setUpdating(false); } @@ -184,7 +222,9 @@ const OrderCard = ({ order, onStatusUpdate }) => {
- Table {order.table} + + Table {order.table} + {/* Status Badge */} { {/* Total */}
Total - ₹{order.amount} + + ₹{order.amount} +
{/* Action Button - NO WHITE TEXT */} {action && ( - + {order.status === "pending" && ( + )} - {action.label} - +
)} ); }; -export default OrderCard; \ No newline at end of file +export default OrderCard;