@burdenoff/microfe-kadaikodi 2026.626.2 → 2026.704.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/kadaikodi/hooks/useKadaikodiApi.js +209 -105
  2. package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
  3. package/dist/kadaikodi/pages/HomePage.js +4 -4
  4. package/dist/kadaikodi/pages/HomePage.js.map +1 -1
  5. package/dist/kadaikodi/pages/admin/AdminDashboard.js +1 -1
  6. package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
  7. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +1 -1
  8. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  9. package/dist/kadaikodi/pages/admin/CartManagementPage.js +279 -333
  10. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  11. package/dist/kadaikodi/pages/admin/UserManagementPage.js +299 -372
  12. package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
  13. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +214 -214
  14. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  15. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +226 -230
  16. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  17. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +255 -256
  18. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  19. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +275 -278
  20. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  21. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +228 -446
  22. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
  23. package/dist/kadaikodi/pages/common/NotificationCenterPage.js +1 -1
  24. package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
  25. package/dist/kadaikodi/pages/common/SettingsPage.js +34 -46
  26. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  27. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js +193 -447
  28. package/dist/kadaikodi/pages/customer/BookingDetailsPage.js.map +1 -1
  29. package/dist/kadaikodi/pages/customer/CartDetailPage.js +6 -6
  30. package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
  31. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +2 -2
  32. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
  33. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js +255 -215
  34. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
  35. package/dist/kadaikodi/pages/customer/FavoritesPage.js +141 -178
  36. package/dist/kadaikodi/pages/customer/FavoritesPage.js.map +1 -1
  37. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +155 -161
  38. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  39. package/dist/kadaikodi/pages/customer/ReviewsPage.js +14 -140
  40. package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
  41. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +304 -458
  42. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  43. package/dist/kadaikodi/pages/investor/InvestorDashboard.js +1 -1
  44. package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
  45. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +2 -2
  46. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  47. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +361 -361
  48. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
  49. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +226 -220
  50. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  51. package/dist/kadaikodi/pages/worker/WorkerDashboard.js +15 -15
  52. package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
  53. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +2 -2
  54. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
  55. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +252 -253
  56. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
  57. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +3 -3
  58. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/kadaikodi/mocks/data.js +0 -1517
  61. package/dist/kadaikodi/mocks/data.js.map +0 -1
  62. package/dist/kadaikodi/mocks/users.js +0 -34
  63. package/dist/kadaikodi/mocks/users.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AdminOrdersPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/admin/AdminOrdersPage.tsx"],"sourcesContent":["/**\n * Admin Orders Page\n * @module kadaikodi/pages/admin\n *\n * Full-featured order management with 4 MetricsGrid stats, 3 filters,\n * dual layout (mobile cards + desktop table with 8 columns),\n * Order Details Modal with all sections and update status dropdown.\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport {\n Search,\n ShoppingBag,\n IndianRupee,\n TrendingUp,\n Clock,\n Eye,\n CheckCircle2,\n XCircle,\n RefreshCw,\n AlertCircle,\n Loader2,\n X,\n Truck,\n MapPin,\n Phone,\n User,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { MetricsCard } from '../../components/MetricsCard';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ntype OrderStatus =\n | 'pending'\n | 'confirmed'\n | 'preparing'\n | 'ready'\n | 'out_for_delivery'\n | 'delivered'\n | 'cancelled';\n\ninterface Order {\n id: string;\n customerName: string;\n customerPhone: string;\n cartName: string;\n cartOwner: string;\n items: string[];\n total: number;\n status: OrderStatus;\n paymentMethod: string;\n paymentStatus: 'pending' | 'completed' | 'failed' | 'refunded';\n orderDate: string;\n deliveryTime: string;\n deliveryAddress: string;\n workerAssigned?: string;\n notes?: string;\n}\n\ninterface OrderStats {\n totalOrders: number;\n pendingOrders: number;\n totalRevenue: number;\n averageOrderValue: number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Mock data */\n/* ------------------------------------------------------------------ */\n\nconst mockOrders: Order[] = [\n {\n id: 'ORD-2024-001',\n customerName: 'Rajesh Kumar',\n customerPhone: '+91 98765 43210',\n cartName: 'Dosa Express',\n cartOwner: 'Suresh Rao',\n items: ['Masala Dosa x2', 'Filter Coffee x2', 'Vada x1'],\n total: 280,\n status: 'delivered',\n paymentMethod: 'UPI',\n paymentStatus: 'completed',\n orderDate: '2024-01-15T10:30:00',\n deliveryTime: '2024-01-15T11:15:00',\n deliveryAddress: '123, 4th Cross, Koramangala',\n workerAssigned: 'Ravi Kumar',\n },\n {\n id: 'ORD-2024-002',\n customerName: 'Priya Sharma',\n customerPhone: '+91 87654 32109',\n cartName: 'Juice Junction',\n cartOwner: 'Amit Patel',\n items: ['Fresh Orange Juice x1', 'Watermelon Juice x1'],\n total: 120,\n status: 'preparing',\n paymentMethod: 'Cash',\n paymentStatus: 'pending',\n orderDate: '2024-01-15T11:45:00',\n deliveryTime: '2024-01-15T12:15:00',\n deliveryAddress: '456, BTM Layout',\n notes: 'Extra ice please',\n },\n {\n id: 'ORD-2024-003',\n customerName: 'Amit Singh',\n customerPhone: '+91 76543 21098',\n cartName: 'Chaat Corner',\n cartOwner: 'Ramesh Verma',\n items: ['Pani Puri x1', 'Bhel Puri x1', 'Dahi Puri x1'],\n total: 150,\n status: 'pending',\n paymentMethod: 'Card',\n paymentStatus: 'completed',\n orderDate: '2024-01-15T12:00:00',\n deliveryTime: '2024-01-15T12:30:00',\n deliveryAddress: '789, HSR Layout',\n },\n];\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminOrdersPage() {\n const { navigateTo } = useKadaikodi();\n\n const [orders, setOrders] = useState<Order[]>([]);\n const [stats, setStats] = useState<OrderStats | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [statusFilter, setStatusFilter] = useState('all');\n const [dateFilter, setDateFilter] = useState('today');\n const [selectedOrder, setSelectedOrder] = useState<Order | null>(null);\n const [showOrderModal, setShowOrderModal] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setStats({\n totalOrders: 156,\n pendingOrders: 12,\n totalRevenue: 125600,\n averageOrderValue: 805,\n });\n setOrders(mockOrders);\n setIsLoading(false);\n }, 1000);\n return () => clearTimeout(timer);\n }, []);\n\n const fmtCur = (amount: number) => formatCurrency(amount, { minimumFractionDigits: 0 });\n\n const formatDate = (d: string) =>\n new Date(d).toLocaleString('en-IN', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n\n const getStatusColor = (status: string) => {\n const map: Record<string, string> = {\n delivered: 'bg-status-success-bg-subtle text-status-success-text',\n preparing: 'bg-status-warning-bg-subtle text-status-warning-text',\n ready: 'bg-status-warning-bg-subtle text-status-warning-text',\n out_for_delivery: 'bg-[var(--color-accent-soft)] text-text-primary',\n cancelled: 'bg-status-error-bg-subtle text-status-error-text',\n confirmed: 'bg-[var(--color-accent-soft)] text-text-primary',\n };\n return map[status] ?? 'bg-secondary text-secondary-foreground';\n };\n\n const getPaymentIcon = (status: string) => {\n switch (status) {\n case 'completed':\n return <CheckCircle2 className=\"h-4 w-4 text-status-success-text\" />;\n case 'failed':\n return <XCircle className=\"h-4 w-4 text-status-error-text\" />;\n case 'refunded':\n return <RefreshCw className=\"h-4 w-4 text-text-primary\" />;\n default:\n return <AlertCircle className=\"h-4 w-4 text-status-warning-text\" />;\n }\n };\n\n const filteredOrders = useMemo(() => {\n return orders.filter((order) => {\n const matchesSearch =\n !searchQuery ||\n order.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n order.customerName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n order.cartName.toLowerCase().includes(searchQuery.toLowerCase());\n const matchesStatus = statusFilter === 'all' || order.status === statusFilter;\n return matchesSearch && matchesStatus;\n });\n }, [orders, searchQuery, statusFilter]);\n\n const handleUpdateStatus = (orderId: string, newStatus: OrderStatus) => {\n setOrders((prev) => prev.map((o) => (o.id === orderId ? { ...o, status: newStatus } : o)));\n setShowOrderModal(false);\n alert(`Order ${orderId} updated to ${newStatus.replace('_', ' ')}`);\n };\n\n if (isLoading) {\n return (\n <PageLayout title=\"Order Management\" description=\"Loading orders...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading orders...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Order Management\"\n description={`${stats?.totalOrders ?? 0} total orders on the platform`}\n >\n <PagePurpose className=\"mb-6\">\n Every order placed across Kadaikodi in one queue. Use this page to keep operations running\n smoothly — search and filter orders, spot anything pending or stuck, open an order to see its\n full details, and step in when a customer or cart needs help. The metrics up top give you a\n live read on volume, revenue and what&apos;s awaiting action.\n </PagePurpose>\n\n {/* 4 Metrics Grid — the one emphasis zone for this page */}\n {stats && (\n <EmphasisPanel className=\"mb-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary\">Orders at a Glance</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={stats.totalOrders}\n label=\"Total Orders\"\n trendValue=\"Orders today\"\n />\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={fmtCur(stats.totalRevenue)}\n label=\"Revenue\"\n trend=\"up\"\n trendValue=\"+15.2% vs yesterday\"\n />\n <MetricsCard\n icon={<TrendingUp className=\"h-5 w-5\" />}\n value={fmtCur(stats.averageOrderValue)}\n label=\"Avg Order Value\"\n trendValue=\"Average order value\"\n />\n <MetricsCard\n icon={<Clock className=\"h-5 w-5\" />}\n value={stats.pendingOrders}\n label=\"Pending Orders\"\n trendValue=\"Awaiting action\"\n />\n </div>\n </EmphasisPanel>\n )}\n\n {/* 3 Filters */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 mb-6\">\n <div className=\"flex flex-col gap-4\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder=\"Search by order ID, customer, or cart name...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"all\">All Status</option>\n <option value=\"pending\">Pending</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"out_for_delivery\">Out for Delivery</option>\n <option value=\"delivered\">Delivered</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n <select\n value={dateFilter}\n onChange={(e) => setDateFilter(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"today\">Today</option>\n <option value=\"yesterday\">Yesterday</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n </select>\n </div>\n </div>\n </div>\n\n {/* Dual Layout */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\">\n {/* Mobile Card View */}\n <div className=\"block md:hidden space-y-4 p-4\">\n {filteredOrders.map((order) => (\n <div\n key={order.id}\n className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-4\"\n >\n <div className=\"flex justify-between items-start mb-3\">\n <div>\n <h3 className=\"font-medium text-text-primary text-lg\">{order.id}</h3>\n <p className=\"text-sm text-text-secondary\">{formatDate(order.orderDate)}</p>\n </div>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace('_', ' ')}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mb-3 text-sm\">\n <div>\n <p className=\"text-text-secondary font-medium\">Customer</p>\n <p className=\"text-text-primary\">{order.customerName}</p>\n <p className=\"text-text-secondary text-xs\">{order.customerPhone}</p>\n </div>\n <div>\n <p className=\"text-text-secondary font-medium\">Cart</p>\n <p className=\"text-text-primary\">{order.cartName}</p>\n <p className=\"text-text-secondary text-xs\">{order.cartOwner}</p>\n </div>\n </div>\n <div className=\"flex justify-between items-center mb-3\">\n <div>\n <p className=\"text-text-secondary font-medium text-sm\">Amount</p>\n <p className=\"text-text-primary font-semibold text-lg\">{fmtCur(order.total)}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(order.paymentStatus)}\n <div className=\"text-right\">\n <p className=\"text-sm text-text-primary\">{order.paymentMethod}</p>\n <p className=\"text-xs text-text-secondary capitalize\">{order.paymentStatus}</p>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderModal(true);\n }}\n className=\"w-full rounded-lg border border-border-subtle py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors flex items-center justify-center gap-2\"\n >\n <Eye className=\"h-4 w-4\" /> View Details\n </button>\n </div>\n ))}\n </div>\n\n {/* Desktop Table View */}\n <div className=\"hidden md:block overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border-subtle bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Order ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Customer\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Cart\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Amount\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Payment\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Time\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {filteredOrders.map((order) => (\n <tr key={order.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-mono font-medium text-text-primary\">\n {order.id}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"text-sm font-medium text-text-primary\">\n {order.customerName}\n </div>\n <div className=\"text-xs text-text-secondary\">{order.customerPhone}</div>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"text-sm font-medium text-text-primary\">{order.cartName}</div>\n <div className=\"text-xs text-text-secondary\">{order.cartOwner}</div>\n </td>\n <td className=\"px-4 py-3 text-sm font-semibold text-text-primary\">\n {fmtCur(order.total)}\n </td>\n <td className=\"px-4 py-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace('_', ' ')}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(order.paymentStatus)}\n <div>\n <div className=\"text-sm text-text-primary\">{order.paymentMethod}</div>\n <div className=\"text-xs text-text-secondary capitalize\">\n {order.paymentStatus}\n </div>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3 text-sm text-text-secondary\">\n {formatDate(order.orderDate)}\n </td>\n <td className=\"px-4 py-3\">\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderModal(true);\n }}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-accent transition-colors\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {filteredOrders.length === 0 && (\n <EmptyState\n illustration=\"empty-search\"\n title=\"No orders found\"\n description=\"No orders match your current search and filters. Try a different status, date range or search term.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setSearchQuery('');\n setStatusFilter('all');\n setDateFilter('today');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Clear filters\n </button>\n }\n />\n )}\n </div>\n\n {/* Order Details Modal */}\n {showOrderModal && selectedOrder && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-2xl rounded-lg border border-border-subtle bg-bg-surface shadow-lg max-h-[90vh] overflow-y-auto\">\n <div className=\"flex items-center justify-between p-4 border-b border-border-subtle\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Order Details</h2>\n <button\n type=\"button\"\n onClick={() => setShowOrderModal(false)}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-accent transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n <div className=\"p-4 space-y-6\">\n {/* Order Info */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Order Information</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Order ID</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(selectedOrder.status)\n )}\n >\n {selectedOrder.status.replace('_', ' ')}\n </span>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Order Date</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(selectedOrder.orderDate)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Delivery Time</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(selectedOrder.deliveryTime)}\n </p>\n </div>\n </div>\n </div>\n\n {/* Customer Details */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <User className=\"h-4 w-4\" /> Customer Details\n </h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Name</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.customerName}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Phone</p>\n <p className=\"font-medium text-text-primary flex items-center gap-1\">\n <Phone className=\"h-3 w-3\" />\n {selectedOrder.customerPhone}\n </p>\n </div>\n <div className=\"sm:col-span-2\">\n <p className=\"text-sm text-text-secondary\">Delivery Address</p>\n <p className=\"font-medium text-text-primary flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {selectedOrder.deliveryAddress}\n </p>\n </div>\n </div>\n </div>\n\n {/* Cart Details */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Cart Details</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Cart Name</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.cartName}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Cart Owner</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.cartOwner}</p>\n </div>\n </div>\n </div>\n\n {/* Order Items */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Order Items</h3>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <ul className=\"space-y-2\">\n {selectedOrder.items.map((item, i) => (\n <li key={i} className=\"text-sm text-text-primary\">\n {item}\n </li>\n ))}\n </ul>\n <div className=\"mt-4 pt-4 border-t border-border-subtle flex justify-between items-center\">\n <span className=\"font-semibold text-text-primary\">Total Amount</span>\n <span className=\"font-semibold text-lg text-text-primary\">\n {fmtCur(selectedOrder.total)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Payment Details */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Payment Details</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Method</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.paymentMethod}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(selectedOrder.paymentStatus)}\n <span className=\"font-medium text-text-primary capitalize\">\n {selectedOrder.paymentStatus}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Worker Assignment */}\n {selectedOrder.workerAssigned && (\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <Truck className=\"h-4 w-4\" /> Delivery Assignment\n </h3>\n <div>\n <p className=\"text-sm text-text-secondary\">Assigned Worker</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.workerAssigned}</p>\n </div>\n </div>\n )}\n\n {/* Notes */}\n {selectedOrder.notes && (\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Special Instructions</h3>\n <p className=\"text-sm rounded-lg bg-bg-sunken/50 p-3 text-text-primary\">\n {selectedOrder.notes}\n </p>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex flex-col sm:flex-row sm:justify-end gap-3 pt-2\">\n <button\n type=\"button\"\n onClick={() => setShowOrderModal(false)}\n className=\"rounded-lg border border-border-subtle py-2 px-4 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Close\n </button>\n {selectedOrder.status !== 'delivered' && selectedOrder.status !== 'cancelled' && (\n <select\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n value={selectedOrder.status}\n onChange={(e) =>\n handleUpdateStatus(selectedOrder.id, e.target.value as OrderStatus)\n }\n >\n <option value=\"pending\">Pending</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"out_for_delivery\">Out for Delivery</option>\n <option value=\"delivered\">Delivered</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdminOrdersPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/admin/AdminOrdersPage.tsx"],"sourcesContent":["/**\n * Admin Orders Page\n * @module kadaikodi/pages/admin\n *\n * Full-featured order management with 4 MetricsGrid stats, 3 filters,\n * dual layout (mobile cards + desktop table with 8 columns),\n * Order Details Modal with all sections and update status dropdown.\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport {\n Search,\n ShoppingBag,\n IndianRupee,\n TrendingUp,\n Clock,\n Eye,\n CheckCircle2,\n XCircle,\n RefreshCw,\n AlertCircle,\n Loader2,\n X,\n Truck,\n MapPin,\n Phone,\n User,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { MetricsCard } from '../../components/MetricsCard';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ntype OrderStatus =\n | 'pending'\n | 'confirmed'\n | 'preparing'\n | 'ready'\n | 'out_for_delivery'\n | 'delivered'\n | 'cancelled';\n\ninterface Order {\n id: string;\n customerName: string;\n customerPhone: string;\n cartName: string;\n cartOwner: string;\n items: string[];\n total: number;\n status: OrderStatus;\n paymentMethod: string;\n paymentStatus: 'pending' | 'completed' | 'failed' | 'refunded';\n orderDate: string;\n deliveryTime: string;\n deliveryAddress: string;\n workerAssigned?: string;\n notes?: string;\n}\n\ninterface OrderStats {\n totalOrders: number;\n pendingOrders: number;\n totalRevenue: number;\n averageOrderValue: number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Mock data */\n/* ------------------------------------------------------------------ */\n\nconst mockOrders: Order[] = [\n {\n id: 'ORD-2024-001',\n customerName: 'Rajesh Kumar',\n customerPhone: '+91 98765 43210',\n cartName: 'Dosa Express',\n cartOwner: 'Suresh Rao',\n items: ['Masala Dosa x2', 'Filter Coffee x2', 'Vada x1'],\n total: 280,\n status: 'delivered',\n paymentMethod: 'UPI',\n paymentStatus: 'completed',\n orderDate: '2024-01-15T10:30:00',\n deliveryTime: '2024-01-15T11:15:00',\n deliveryAddress: '123, 4th Cross, Koramangala',\n workerAssigned: 'Ravi Kumar',\n },\n {\n id: 'ORD-2024-002',\n customerName: 'Priya Sharma',\n customerPhone: '+91 87654 32109',\n cartName: 'Juice Junction',\n cartOwner: 'Amit Patel',\n items: ['Fresh Orange Juice x1', 'Watermelon Juice x1'],\n total: 120,\n status: 'preparing',\n paymentMethod: 'Cash',\n paymentStatus: 'pending',\n orderDate: '2024-01-15T11:45:00',\n deliveryTime: '2024-01-15T12:15:00',\n deliveryAddress: '456, BTM Layout',\n notes: 'Extra ice please',\n },\n {\n id: 'ORD-2024-003',\n customerName: 'Amit Singh',\n customerPhone: '+91 76543 21098',\n cartName: 'Chaat Corner',\n cartOwner: 'Ramesh Verma',\n items: ['Pani Puri x1', 'Bhel Puri x1', 'Dahi Puri x1'],\n total: 150,\n status: 'pending',\n paymentMethod: 'Card',\n paymentStatus: 'completed',\n orderDate: '2024-01-15T12:00:00',\n deliveryTime: '2024-01-15T12:30:00',\n deliveryAddress: '789, HSR Layout',\n },\n];\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminOrdersPage() {\n const { navigateTo } = useKadaikodi();\n\n const [orders, setOrders] = useState<Order[]>([]);\n const [stats, setStats] = useState<OrderStats | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [statusFilter, setStatusFilter] = useState('all');\n const [dateFilter, setDateFilter] = useState('today');\n const [selectedOrder, setSelectedOrder] = useState<Order | null>(null);\n const [showOrderModal, setShowOrderModal] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setStats({\n totalOrders: 156,\n pendingOrders: 12,\n totalRevenue: 125600,\n averageOrderValue: 805,\n });\n setOrders(mockOrders);\n setIsLoading(false);\n }, 1000);\n return () => clearTimeout(timer);\n }, []);\n\n const fmtCur = (amount: number) => formatCurrency(amount, { minimumFractionDigits: 0 });\n\n const formatDate = (d: string) =>\n new Date(d).toLocaleString('en-IN', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n\n const getStatusColor = (status: string) => {\n const map: Record<string, string> = {\n delivered: 'bg-status-success-bg-subtle text-status-success-text',\n preparing: 'bg-status-warning-bg-subtle text-status-warning-text',\n ready: 'bg-status-warning-bg-subtle text-status-warning-text',\n out_for_delivery: 'bg-[var(--color-accent-soft)] text-text-primary',\n cancelled: 'bg-status-error-bg-subtle text-status-error-text',\n confirmed: 'bg-[var(--color-accent-soft)] text-text-primary',\n };\n return map[status] ?? 'bg-bg-sunken text-text-secondary';\n };\n\n const getPaymentIcon = (status: string) => {\n switch (status) {\n case 'completed':\n return <CheckCircle2 className=\"h-4 w-4 text-status-success-text\" />;\n case 'failed':\n return <XCircle className=\"h-4 w-4 text-status-error-text\" />;\n case 'refunded':\n return <RefreshCw className=\"h-4 w-4 text-text-primary\" />;\n default:\n return <AlertCircle className=\"h-4 w-4 text-status-warning-text\" />;\n }\n };\n\n const filteredOrders = useMemo(() => {\n return orders.filter((order) => {\n const matchesSearch =\n !searchQuery ||\n order.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n order.customerName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n order.cartName.toLowerCase().includes(searchQuery.toLowerCase());\n const matchesStatus = statusFilter === 'all' || order.status === statusFilter;\n return matchesSearch && matchesStatus;\n });\n }, [orders, searchQuery, statusFilter]);\n\n const handleUpdateStatus = (orderId: string, newStatus: OrderStatus) => {\n setOrders((prev) => prev.map((o) => (o.id === orderId ? { ...o, status: newStatus } : o)));\n setShowOrderModal(false);\n alert(`Order ${orderId} updated to ${newStatus.replace('_', ' ')}`);\n };\n\n if (isLoading) {\n return (\n <PageLayout title=\"Order Management\" description=\"Loading orders...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading orders...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Order Management\"\n description={`${stats?.totalOrders ?? 0} total orders on the platform`}\n >\n <PagePurpose className=\"mb-6\">\n Every order placed across Kadaikodi in one queue. Use this page to keep operations running\n smoothly — search and filter orders, spot anything pending or stuck, open an order to see its\n full details, and step in when a customer or cart needs help. The metrics up top give you a\n live read on volume, revenue and what&apos;s awaiting action.\n </PagePurpose>\n\n {/* 4 Metrics Grid — the one emphasis zone for this page */}\n {stats && (\n <EmphasisPanel className=\"mb-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary\">Orders at a Glance</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={stats.totalOrders}\n label=\"Total Orders\"\n trendValue=\"Orders today\"\n />\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={fmtCur(stats.totalRevenue)}\n label=\"Revenue\"\n trend=\"up\"\n trendValue=\"+15.2% vs yesterday\"\n />\n <MetricsCard\n icon={<TrendingUp className=\"h-5 w-5\" />}\n value={fmtCur(stats.averageOrderValue)}\n label=\"Avg Order Value\"\n trendValue=\"Average order value\"\n />\n <MetricsCard\n icon={<Clock className=\"h-5 w-5\" />}\n value={stats.pendingOrders}\n label=\"Pending Orders\"\n trendValue=\"Awaiting action\"\n />\n </div>\n </EmphasisPanel>\n )}\n\n {/* 3 Filters */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 mb-6\">\n <div className=\"flex flex-col gap-4\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder=\"Search by order ID, customer, or cart name...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"all\">All Status</option>\n <option value=\"pending\">Pending</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"out_for_delivery\">Out for Delivery</option>\n <option value=\"delivered\">Delivered</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n <select\n value={dateFilter}\n onChange={(e) => setDateFilter(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"today\">Today</option>\n <option value=\"yesterday\">Yesterday</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n </select>\n </div>\n </div>\n </div>\n\n {/* Dual Layout */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\">\n {/* Mobile Card View */}\n <div className=\"block md:hidden space-y-4 p-4\">\n {filteredOrders.map((order) => (\n <div\n key={order.id}\n className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-4\"\n >\n <div className=\"flex justify-between items-start mb-3\">\n <div>\n <h3 className=\"font-medium text-text-primary text-lg\">{order.id}</h3>\n <p className=\"text-sm text-text-secondary\">{formatDate(order.orderDate)}</p>\n </div>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace('_', ' ')}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mb-3 text-sm\">\n <div>\n <p className=\"text-text-secondary font-medium\">Customer</p>\n <p className=\"text-text-primary\">{order.customerName}</p>\n <p className=\"text-text-secondary text-xs\">{order.customerPhone}</p>\n </div>\n <div>\n <p className=\"text-text-secondary font-medium\">Cart</p>\n <p className=\"text-text-primary\">{order.cartName}</p>\n <p className=\"text-text-secondary text-xs\">{order.cartOwner}</p>\n </div>\n </div>\n <div className=\"flex justify-between items-center mb-3\">\n <div>\n <p className=\"text-text-secondary font-medium text-sm\">Amount</p>\n <p className=\"text-text-primary font-semibold text-lg\">{fmtCur(order.total)}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(order.paymentStatus)}\n <div className=\"text-right\">\n <p className=\"text-sm text-text-primary\">{order.paymentMethod}</p>\n <p className=\"text-xs text-text-secondary capitalize\">{order.paymentStatus}</p>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderModal(true);\n }}\n className=\"w-full rounded-lg border border-border-subtle py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors flex items-center justify-center gap-2\"\n >\n <Eye className=\"h-4 w-4\" /> View Details\n </button>\n </div>\n ))}\n </div>\n\n {/* Desktop Table View */}\n <div className=\"hidden md:block overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border-subtle bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Order ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Customer\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Cart\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Amount\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Payment\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Time\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {filteredOrders.map((order) => (\n <tr key={order.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-mono font-medium text-text-primary\">\n {order.id}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"text-sm font-medium text-text-primary\">\n {order.customerName}\n </div>\n <div className=\"text-xs text-text-secondary\">{order.customerPhone}</div>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"text-sm font-medium text-text-primary\">{order.cartName}</div>\n <div className=\"text-xs text-text-secondary\">{order.cartOwner}</div>\n </td>\n <td className=\"px-4 py-3 text-sm font-semibold text-text-primary\">\n {fmtCur(order.total)}\n </td>\n <td className=\"px-4 py-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace('_', ' ')}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(order.paymentStatus)}\n <div>\n <div className=\"text-sm text-text-primary\">{order.paymentMethod}</div>\n <div className=\"text-xs text-text-secondary capitalize\">\n {order.paymentStatus}\n </div>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3 text-sm text-text-secondary\">\n {formatDate(order.orderDate)}\n </td>\n <td className=\"px-4 py-3\">\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderModal(true);\n }}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-accent transition-colors\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {filteredOrders.length === 0 && (\n <EmptyState\n illustration=\"empty-search\"\n title=\"No orders found\"\n description=\"No orders match your current search and filters. Try a different status, date range or search term.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setSearchQuery('');\n setStatusFilter('all');\n setDateFilter('today');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Clear filters\n </button>\n }\n />\n )}\n </div>\n\n {/* Order Details Modal */}\n {showOrderModal && selectedOrder && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-2xl rounded-lg border border-border-subtle bg-bg-surface shadow-lg max-h-[90vh] overflow-y-auto\">\n <div className=\"flex items-center justify-between p-4 border-b border-border-subtle\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Order Details</h2>\n <button\n type=\"button\"\n onClick={() => setShowOrderModal(false)}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-accent transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n <div className=\"p-4 space-y-6\">\n {/* Order Info */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Order Information</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Order ID</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(selectedOrder.status)\n )}\n >\n {selectedOrder.status.replace('_', ' ')}\n </span>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Order Date</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(selectedOrder.orderDate)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Delivery Time</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(selectedOrder.deliveryTime)}\n </p>\n </div>\n </div>\n </div>\n\n {/* Customer Details */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <User className=\"h-4 w-4\" /> Customer Details\n </h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Name</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.customerName}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Phone</p>\n <p className=\"font-medium text-text-primary flex items-center gap-1\">\n <Phone className=\"h-3 w-3\" />\n {selectedOrder.customerPhone}\n </p>\n </div>\n <div className=\"sm:col-span-2\">\n <p className=\"text-sm text-text-secondary\">Delivery Address</p>\n <p className=\"font-medium text-text-primary flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {selectedOrder.deliveryAddress}\n </p>\n </div>\n </div>\n </div>\n\n {/* Cart Details */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Cart Details</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Cart Name</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.cartName}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Cart Owner</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.cartOwner}</p>\n </div>\n </div>\n </div>\n\n {/* Order Items */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Order Items</h3>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <ul className=\"space-y-2\">\n {selectedOrder.items.map((item, i) => (\n <li key={i} className=\"text-sm text-text-primary\">\n {item}\n </li>\n ))}\n </ul>\n <div className=\"mt-4 pt-4 border-t border-border-subtle flex justify-between items-center\">\n <span className=\"font-semibold text-text-primary\">Total Amount</span>\n <span className=\"font-semibold text-lg text-text-primary\">\n {fmtCur(selectedOrder.total)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Payment Details */}\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Payment Details</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Method</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.paymentMethod}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Status</p>\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(selectedOrder.paymentStatus)}\n <span className=\"font-medium text-text-primary capitalize\">\n {selectedOrder.paymentStatus}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Worker Assignment */}\n {selectedOrder.workerAssigned && (\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <Truck className=\"h-4 w-4\" /> Delivery Assignment\n </h3>\n <div>\n <p className=\"text-sm text-text-secondary\">Assigned Worker</p>\n <p className=\"font-medium text-text-primary\">{selectedOrder.workerAssigned}</p>\n </div>\n </div>\n )}\n\n {/* Notes */}\n {selectedOrder.notes && (\n <div>\n <h3 className=\"font-semibold text-text-primary mb-3\">Special Instructions</h3>\n <p className=\"text-sm rounded-lg bg-bg-sunken/50 p-3 text-text-primary\">\n {selectedOrder.notes}\n </p>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex flex-col sm:flex-row sm:justify-end gap-3 pt-2\">\n <button\n type=\"button\"\n onClick={() => setShowOrderModal(false)}\n className=\"rounded-lg border border-border-subtle py-2 px-4 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Close\n </button>\n {selectedOrder.status !== 'delivered' && selectedOrder.status !== 'cancelled' && (\n <select\n className=\"rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n value={selectedOrder.status}\n onChange={(e) =>\n handleUpdateStatus(selectedOrder.id, e.target.value as OrderStatus)\n }\n >\n <option value=\"pending\">Pending</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"out_for_delivery\">Out for Delivery</option>\n <option value=\"delivered\">Delivered</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}