@burdenoff/microfe-adaptercloud 2026.625.1 → 2026.625.2
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.
- package/dist/adaptercloud/components/PageLayout.js +24 -17
- package/dist/adaptercloud/components/PageLayout.js.map +1 -1
- package/dist/adaptercloud/pages/HomePage.js +18 -16
- package/dist/adaptercloud/pages/HomePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +90 -82
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +70 -44
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +60 -55
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +97 -92
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +59 -57
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +118 -104
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +145 -140
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +152 -147
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +87 -81
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +179 -165
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +73 -48
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +95 -93
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +110 -107
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +293 -299
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +218 -224
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +122 -128
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +248 -244
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +96 -91
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/SettingsPage.js +754 -736
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +63 -61
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +110 -108
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +221 -217
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +89 -87
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +410 -381
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +120 -118
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +86 -81
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +53 -51
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +114 -109
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +60 -58
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +87 -72
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +65 -63
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +68 -53
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +63 -61
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +86 -84
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +57 -55
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +341 -308
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +34 -32
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +48 -46
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +383 -381
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +348 -319
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +84 -59
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +73 -71
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +76 -74
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +70 -68
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerOrdersPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/worker/WorkerOrdersPage.tsx"],"sourcesContent":["/**\n * Worker Orders Page\n *\n * Full-featured worker orders page with:\n * - Loading state\n * - 6 stat cards (Today's Tasks, Completed, Pending, Avg Time, Earnings, Rating)\n * - Current Task section with timer, items, customer info, special instructions\n * - Filters bar with 4 dropdowns (Status, Type, Priority, Sort By)\n * - Real-time countdown timer\n * - Payment info per task (amount, COD/Paid status)\n * - Task type badges with icons\n * - Distance info per task\n * - Call Customer and Navigate buttons per task\n *\n * @module adaptercloud/pages/worker\n */\n\nimport { useState, useEffect, useCallback } from'react';\nimport {\n ClipboardList,\n Package,\n MapPin,\n CheckCircle2,\n PlayCircle,\n ArrowRight,\n Phone,\n Navigation,\n Loader2,\n Truck,\n ChefHat,\n ShoppingBag,\n Star,\n AlertTriangle,\n CreditCard,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { StatusBadge } from'../../components/StatusBadge';\nimport { EmptyState } from'../../components/EmptyState';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskItem {\n name: string;\n quantity: number;\n}\n\ninterface TaskAddress {\n addressLine1: string;\n addressLine2?: string;\n landmark?: string;\n city: string;\n pincode: string;\n}\n\ninterface TaskPayment {\n method: string;\n amount: number;\n status: 'pending' | 'completed';\n}\n\ninterface WorkerTask {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: 'pickup' | 'delivery' | 'preparation';\n status: 'pending' | 'in_progress' | 'completed';\n priority: 'low' | 'medium' | 'high' | 'urgent';\n customerName: string;\n customerPhone: string;\n items: TaskItem[];\n address?: TaskAddress;\n estimatedTime: string;\n assignedTime: string;\n distance?: number;\n specialInstructions?: string;\n payment: TaskPayment;\n}\n\ninterface TaskFilters {\n status: string;\n type: string;\n priority: string;\n sortBy: string;\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst mockTasksData: WorkerTask[] = [\n {\n id: 'task-001',\n orderId: 'ORD-2024-001',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n type: 'delivery',\n status: 'pending',\n priority: 'high',\n customerName: 'Rahul Sharma',\n customerPhone: '+91-98765-43210',\n items: [\n { name: 'Masala Dosa', quantity: 2 },\n { name: 'Filter Coffee', quantity: 2 },\n ],\n address: {\n addressLine1: '123, MG Road',\n addressLine2: 'Near Central Mall',\n landmark: 'Opposite SBI Bank',\n city: 'Bangalore',\n pincode: '560001',\n },\n estimatedTime: new Date(Date.now() + 30 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 5 * 60 * 1000).toISOString(),\n distance: 3.5,\n specialInstructions: 'Please call before delivery',\n payment: { method: 'Cash', amount: 295, status: 'pending' },\n },\n {\n id: 'task-002',\n orderId: 'ORD-2024-002',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n type: 'pickup',\n status: 'in_progress',\n priority: 'medium',\n customerName: 'Priya Patel',\n customerPhone: '+91-98765-43211',\n items: [{ name: 'Idli Sambar', quantity: 3 }],\n estimatedTime: new Date(Date.now() + 15 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 10 * 60 * 1000).toISOString(),\n specialInstructions: '',\n payment: { method: 'Online', amount: 198, status: 'completed' },\n },\n {\n id: 'task-003',\n orderId: 'ORD-2024-003',\n cartId: 'cart-002',\n cartName: 'Chaat Corner',\n type: 'preparation',\n status: 'pending',\n priority: 'urgent',\n customerName: 'Amit Kumar',\n customerPhone: '+91-98765-43212',\n items: [\n { name: 'Pani Puri', quantity: 2 },\n { name: 'Bhel Puri', quantity: 1 },\n ],\n estimatedTime: new Date(Date.now() + 20 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 2 * 60 * 1000).toISOString(),\n specialInstructions: 'Extra spicy',\n payment: { method: 'UPI', amount: 150, status: 'completed' },\n },\n {\n id: 'task-004',\n orderId: 'ORD-2024-004',\n cartId: 'cart-003',\n cartName: 'Biryani Pot',\n type: 'delivery',\n status: 'completed',\n priority: 'medium',\n customerName: 'Deepa Nair',\n customerPhone: '+91-98765-43213',\n items: [\n { name: 'Chicken Biryani', quantity: 1 },\n { name: 'Raita', quantity: 1 },\n ],\n address: {\n addressLine1: '456, Brigade Road',\n city: 'Bangalore',\n pincode: '560025',\n },\n estimatedTime: new Date(Date.now() - 30 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 90 * 60 * 1000).toISOString(),\n distance: 2.1,\n payment: { method: 'Online', amount: 340, status: 'completed' },\n },\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction formatTimeRemaining(estimatedTime: string): string {\n const now = new Date();\n const target = new Date(estimatedTime);\n const diffInMinutes = Math.floor((target.getTime() - now.getTime()) / (1000 * 60));\n if (diffInMinutes < 0) return'Overdue';\n if (diffInMinutes < 60) return`${diffInMinutes} min`;\n return`${Math.floor(diffInMinutes / 60)}h ${diffInMinutes % 60}m`;\n}\n\nfunction getTaskTypeConfig(type: WorkerTask['type']) {\n switch (type) {\n case'delivery':\n return {\n icon: Truck,\n label: 'Delivery',\n style: 'bg-accent-purple-subtle/20 text-accent-purple',\n };\n case'pickup':\n return {\n icon: ShoppingBag,\n label: 'Pickup',\n style: 'bg-accent-blue-subtle/20 text-accent-blue',\n };\n case'preparation':\n return {\n icon: ChefHat,\n label: 'Preparation',\n style: 'bg-status-success-bg-subtle/20 text-status-success-text',\n };\n default:\n return { icon: Package, label: type, style: 'bg-secondary text-secondary-foreground' };\n }\n}\n\nfunction getPriorityStyle(priority: WorkerTask['priority']): string {\n switch (priority) {\n case'urgent':\n return'bg-status-error-bg-subtle/20 text-status-error-text';\n case'high':\n return'bg-accent-orange-subtle/20 text-accent-orange';\n case'medium':\n return'bg-status-warning-bg-subtle/20 text-status-warning-text';\n case'low':\n return'bg-status-success-bg-subtle/20 text-status-success-text';\n default:\n return'bg-secondary text-secondary-foreground';\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerOrdersPage = () => {\n const { navigateTo } = useAdapterCloud();\n const [loading, setLoading] = useState(true);\n const [tasks, setTasks] = useState<WorkerTask[]>([]);\n const [currentTask, setCurrentTask] = useState<WorkerTask | null>(null);\n const [filters, setFilters] = useState<TaskFilters>({\n status: '',\n type: '',\n priority: '',\n sortBy: 'priority',\n });\n const [stats, setStats] = useState({\n totalTasks: 0,\n completedToday: 0,\n pendingTasks: 0,\n averageTime: 0,\n earnings: 0,\n rating: 4.8,\n });\n const [, setTick] = useState(0);\n\n // Refresh timer display\n useEffect(() => {\n const interval = setInterval(() => setTick((t) => t + 1), 60000);\n return () => clearInterval(interval);\n }, []);\n\n const loadTasks = useCallback(() => {\n setLoading(true);\n setTimeout(() => {\n let filtered = [...mockTasksData];\n\n if (filters.status) {\n filtered = filtered.filter((t) => t.status === filters.status);\n }\n if (filters.type) {\n filtered = filtered.filter((t) => t.type === filters.type);\n }\n if (filters.priority) {\n filtered = filtered.filter((t) => t.priority === filters.priority);\n }\n\n const priorityWeight: Record<string, number> = { urgent: 0, high: 1, medium: 2, low: 3 };\n switch (filters.sortBy) {\n case'priority':\n filtered.sort(\n (a, b) => (priorityWeight[a.priority] ?? 4) - (priorityWeight[b.priority] ?? 4)\n );\n break;\n case'time':\n filtered.sort(\n (a, b) => new Date(a.estimatedTime).getTime() - new Date(b.estimatedTime).getTime()\n );\n break;\n case'distance':\n filtered.sort((a, b) => (a.distance ?? 999) - (b.distance ?? 999));\n break;\n }\n\n setTasks(filtered);\n const inProgress = mockTasksData.find((t) => t.status === 'in_progress');\n setCurrentTask(inProgress ?? null);\n\n setStats({\n totalTasks: 45,\n completedToday: 12,\n pendingTasks: 3,\n averageTime: 22,\n earnings: 2450,\n rating: 4.8,\n });\n\n setLoading(false);\n }, 600);\n }, [filters]);\n\n useEffect(() => {\n loadTasks();\n }, [loadTasks]);\n\n const handleFilterChange = (key: keyof TaskFilters, value: string) => {\n setFilters((prev) => ({ ...prev, [key]: value }));\n };\n\n const handleStartTask = (taskId: string) => {\n const task = mockTasksData.find((t) => t.id === taskId);\n if (!task) return;\n task.status = 'in_progress';\n setCurrentTask(task);\n loadTasks();\n };\n\n const handleCompleteTask = (taskId: string) => {\n const task = mockTasksData.find((t) => t.id === taskId);\n if (task) task.status = 'completed';\n setCurrentTask(null);\n loadTasks();\n alert('Task completed successfully');\n };\n\n const handleCallCustomer = (phone: string) => {\n window.location.href = `tel:${phone.replace(/\\s/g, '')}`;\n };\n\n const handleNavigateToCustomer = (task: WorkerTask) => {\n if (task.address) {\n const addr = encodeURIComponent(`${task.address.addressLine1}, ${task.address.city}`);\n window.open(`https://maps.google.com?q=${addr}`, '_blank');\n }\n };\n\n if (loading) {\n return (\n <PageLayout title=\"My Orders\" description=\"Manage your assigned orders\">\n <div className=\"flex items-center justify-center py-24\">\n <div className=\"text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading tasks...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout title=\"My Orders\" description=\"Manage your assigned orders\">\n <div className=\"space-y-6\">\n {/* Stats Overview */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Today's Tasks</p>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.totalTasks}</p>\n </div>\n <div className=\"rounded-lg border border-status-success-border/20 bg-status-success-bg-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-status-success-text\">Completed</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {stats.completedToday}\n </p>\n </div>\n <div className=\"rounded-lg border border-status-warning-border/20 bg-status-warning-bg-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-status-warning-text\">Pending</p>\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {stats.pendingTasks}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Avg Time</p>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.averageTime} min</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Today's Earnings</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Rating</p>\n <p className=\"text-2xl font-bold text-text-primary flex items-center gap-1\">\n <Star className=\"h-4 w-4 fill-status-warning-text text-status-warning-text\" />\n {stats.rating}\n </p>\n </div>\n </div>\n\n {/* Current Task */}\n {currentTask && (\n <div className=\"rounded-lg border-2 border-accent-blue-subtle/30 bg-accent-blue-subtle/5 p-5\">\n <h2 className=\"text-base font-semibold text-accent-blue mb-4\">\n Current Task\n </h2>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n Order #{currentTask.orderId}\n </h3>\n {(() => {\n const cfg = getTaskTypeConfig(currentTask.type);\n const TypeIcon = cfg.icon;\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium',\n cfg.style\n )}\n >\n <TypeIcon className=\"h-3 w-3\" />\n {cfg.label}\n </span>\n );\n })()}\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n getPriorityStyle(currentTask.priority)\n )}\n >\n {currentTask.priority}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mt-1\">{currentTask.cartName}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xl font-bold text-accent-blue\">\n {formatTimeRemaining(currentTask.estimatedTime)}\n </p>\n <p className=\"text-xs text-text-secondary\">Time remaining</p>\n </div>\n </div>\n\n {/* Details */}\n <div className=\"border-t border-border-subtle pt-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">Customer</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {currentTask.customerName}\n </p>\n {currentTask.address && (\n <p className=\"text-xs text-text-secondary mt-1\">\n {currentTask.address.addressLine1}, {currentTask.address.city}\n </p>\n )}\n </div>\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">Items</p>\n <div className=\"space-y-0.5\">\n {currentTask.items.map((item, i) => (\n <p key={i} className=\"text-xs text-text-primary\">\n {item.quantity}x {item.name}\n </p>\n ))}\n </div>\n </div>\n </div>\n\n {currentTask.specialInstructions && (\n <div className=\"mt-3 p-3 rounded-md bg-status-warning-bg-subtle/10 border border-status-warning-border/20\">\n <p className=\"text-xs font-medium text-status-warning-text flex items-center gap-1\">\n <AlertTriangle className=\"h-3 w-3\" />\n Special Instructions:\n </p>\n <p className=\"text-xs text-status-warning-text mt-0.5\">\n {currentTask.specialInstructions}\n </p>\n </div>\n )}\n\n <div className=\"flex flex-wrap gap-2 mt-4\">\n <button\n type=\"button\"\n onClick={() => handleCallCustomer(currentTask.customerPhone)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Customer\n </button>\n {currentTask.type === 'delivery' && currentTask.address && (\n <button\n type=\"button\"\n onClick={() => handleNavigateToCustomer(currentTask)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => handleCompleteTask(currentTask.id)}\n className=\"ml-auto inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-2 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Complete Task\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Filters */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-3\">\n <select\n value={filters.status}\n onChange={(e) => handleFilterChange('status', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"\">All Tasks</option>\n <option value=\"pending\">Pending Tasks</option>\n <option value=\"in_progress\">In Progress</option>\n <option value=\"completed\">Completed</option>\n </select>\n <select\n value={filters.type}\n onChange={(e) => handleFilterChange('type', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"\">All Types</option>\n <option value=\"delivery\">Delivery</option>\n <option value=\"pickup\">Pickup</option>\n <option value=\"preparation\">Preparation</option>\n </select>\n <select\n value={filters.priority}\n onChange={(e) => handleFilterChange('priority', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"\">All Priorities</option>\n <option value=\"urgent\">Urgent</option>\n <option value=\"high\">High</option>\n <option value=\"medium\">Medium</option>\n <option value=\"low\">Low</option>\n </select>\n <select\n value={filters.sortBy}\n onChange={(e) => handleFilterChange('sortBy', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"priority\">Sort by Priority</option>\n <option value=\"time\">Sort by Time</option>\n <option value=\"distance\">Sort by Distance</option>\n </select>\n </div>\n </div>\n\n {/* Task List */}\n {tasks.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<ClipboardList className=\"h-12 w-12\" />}\n title=\"No tasks available\"\n description=\"Check back later for new tasks\"\n />\n ) : (\n <div className=\"space-y-3\">\n {tasks.map((task) => {\n const typeConfig = getTaskTypeConfig(task.type);\n const TypeIcon = typeConfig.icon;\n return (\n <div\n key={task.id}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-5 hover:shadow-md transition-shadow bg-gloss-card shadow-pop\"\n >\n {/* Task Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n Order #{task.orderId}\n </h3>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium',\n typeConfig.style\n )}\n >\n <TypeIcon className=\"h-3 w-3\" />\n {typeConfig.label}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mt-1\">\n {task.cartName} · {task.customerName}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(task.payment.amount, { minimumFractionDigits: 0 })}\n </p>\n <p\n className={cn(\n 'text-xs',\n task.payment.status === 'completed'\n ? 'text-status-success-text'\n : 'text-status-warning-text'\n )}\n >\n <span className=\"flex items-center gap-1 justify-end\">\n <CreditCard className=\"h-3 w-3\" />\n {task.payment.status === 'completed' ? 'Paid' : 'COD'}\n </span>\n </p>\n </div>\n </div>\n\n {/* Task Body */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3 mb-3 text-sm\">\n <div>\n <p className=\"text-xs text-text-secondary\">Items</p>\n <div className=\"text-xs text-text-primary\">\n {task.items.map((item, i) => (\n <span key={i}>\n {item.quantity}x {item.name}\n {i < task.items.length - 1 && ', '}\n </span>\n ))}\n </div>\n </div>\n {task.address && (\n <div>\n <p className=\"text-xs text-text-secondary\">Delivery Address</p>\n <p className=\"text-xs text-text-primary\">{task.address.addressLine1}</p>\n </div>\n )}\n <div>\n <p className=\"text-xs text-text-secondary\">Time</p>\n <p\n className={cn(\n 'text-xs font-medium',\n formatTimeRemaining(task.estimatedTime) === 'Overdue'\n ? 'text-status-error-text'\n : 'text-text-primary'\n )}\n >\n {formatTimeRemaining(task.estimatedTime)}\n </p>\n </div>\n </div>\n\n {/* Task Footer */}\n {task.status === 'pending' && (\n <div className=\"flex items-center flex-wrap gap-2 border-t border-border-subtle pt-3\">\n <button\n type=\"button\"\n onClick={() => handleStartTask(task.id)}\n disabled={currentTask !== null}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n currentTask !== null\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-accent-blue-subtle/10 text-accent-blue hover:bg-accent-blue-subtle/20'\n )}\n >\n <PlayCircle className=\"h-3.5 w-3.5\" />\n {currentTask ? 'Complete current first' : 'Start Task'}\n </button>\n <button\n type=\"button\"\n onClick={() => handleCallCustomer(task.customerPhone)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call\n </button>\n {task.type === 'delivery' && task.distance != null && (\n <span className=\"ml-auto text-xs text-text-secondary flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {task.distance} km away\n </span>\n )}\n </div>\n )}\n {task.status === 'in_progress' && task.id !== currentTask?.id && (\n <div className=\"flex items-center gap-2 border-t border-border-subtle pt-3\">\n <button\n type=\"button\"\n onClick={() => handleCompleteTask(task.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-1.5 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Complete\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/worker/task/${task.id}`)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n Details\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n {task.status === 'completed' && (\n <div className=\"flex items-center gap-2 border-t border-border-subtle pt-3\">\n <StatusBadge status=\"completed\" />\n <button\n type=\"button\"\n onClick={() => navigateTo(`/worker/task/${task.id}`)}\n className=\"ml-auto inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n Details\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkerOrdersPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/worker/WorkerOrdersPage.tsx"],"sourcesContent":["/**\n * Worker Orders Page\n *\n * Full-featured worker orders page with:\n * - Loading state\n * - 6 stat cards (Today's Tasks, Completed, Pending, Avg Time, Earnings, Rating)\n * - Current Task section with timer, items, customer info, special instructions\n * - Filters bar with 4 dropdowns (Status, Type, Priority, Sort By)\n * - Real-time countdown timer\n * - Payment info per task (amount, COD/Paid status)\n * - Task type badges with icons\n * - Distance info per task\n * - Call Customer and Navigate buttons per task\n *\n * @module adaptercloud/pages/worker\n */\n\nimport { useState, useEffect, useCallback } from'react';\nimport {\n ClipboardList,\n Package,\n MapPin,\n CheckCircle2,\n PlayCircle,\n ArrowRight,\n Phone,\n Navigation,\n Loader2,\n Truck,\n ChefHat,\n ShoppingBag,\n Star,\n AlertTriangle,\n CreditCard,\n} from'lucide-react';\nimport { EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from'../../components/PageLayout';\nimport { StatusBadge } from'../../components/StatusBadge';\nimport { EmptyState } from'../../components/EmptyState';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency } from'../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskItem {\n name: string;\n quantity: number;\n}\n\ninterface TaskAddress {\n addressLine1: string;\n addressLine2?: string;\n landmark?: string;\n city: string;\n pincode: string;\n}\n\ninterface TaskPayment {\n method: string;\n amount: number;\n status: 'pending' | 'completed';\n}\n\ninterface WorkerTask {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: 'pickup' | 'delivery' | 'preparation';\n status: 'pending' | 'in_progress' | 'completed';\n priority: 'low' | 'medium' | 'high' | 'urgent';\n customerName: string;\n customerPhone: string;\n items: TaskItem[];\n address?: TaskAddress;\n estimatedTime: string;\n assignedTime: string;\n distance?: number;\n specialInstructions?: string;\n payment: TaskPayment;\n}\n\ninterface TaskFilters {\n status: string;\n type: string;\n priority: string;\n sortBy: string;\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst mockTasksData: WorkerTask[] = [\n {\n id: 'task-001',\n orderId: 'ORD-2024-001',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n type: 'delivery',\n status: 'pending',\n priority: 'high',\n customerName: 'Rahul Sharma',\n customerPhone: '+91-98765-43210',\n items: [\n { name: 'Masala Dosa', quantity: 2 },\n { name: 'Filter Coffee', quantity: 2 },\n ],\n address: {\n addressLine1: '123, MG Road',\n addressLine2: 'Near Central Mall',\n landmark: 'Opposite SBI Bank',\n city: 'Bangalore',\n pincode: '560001',\n },\n estimatedTime: new Date(Date.now() + 30 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 5 * 60 * 1000).toISOString(),\n distance: 3.5,\n specialInstructions: 'Please call before delivery',\n payment: { method: 'Cash', amount: 295, status: 'pending' },\n },\n {\n id: 'task-002',\n orderId: 'ORD-2024-002',\n cartId: 'cart-001',\n cartName: 'South Indian Express',\n type: 'pickup',\n status: 'in_progress',\n priority: 'medium',\n customerName: 'Priya Patel',\n customerPhone: '+91-98765-43211',\n items: [{ name: 'Idli Sambar', quantity: 3 }],\n estimatedTime: new Date(Date.now() + 15 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 10 * 60 * 1000).toISOString(),\n specialInstructions: '',\n payment: { method: 'Online', amount: 198, status: 'completed' },\n },\n {\n id: 'task-003',\n orderId: 'ORD-2024-003',\n cartId: 'cart-002',\n cartName: 'Chaat Corner',\n type: 'preparation',\n status: 'pending',\n priority: 'urgent',\n customerName: 'Amit Kumar',\n customerPhone: '+91-98765-43212',\n items: [\n { name: 'Pani Puri', quantity: 2 },\n { name: 'Bhel Puri', quantity: 1 },\n ],\n estimatedTime: new Date(Date.now() + 20 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 2 * 60 * 1000).toISOString(),\n specialInstructions: 'Extra spicy',\n payment: { method: 'UPI', amount: 150, status: 'completed' },\n },\n {\n id: 'task-004',\n orderId: 'ORD-2024-004',\n cartId: 'cart-003',\n cartName: 'Biryani Pot',\n type: 'delivery',\n status: 'completed',\n priority: 'medium',\n customerName: 'Deepa Nair',\n customerPhone: '+91-98765-43213',\n items: [\n { name: 'Chicken Biryani', quantity: 1 },\n { name: 'Raita', quantity: 1 },\n ],\n address: {\n addressLine1: '456, Brigade Road',\n city: 'Bangalore',\n pincode: '560025',\n },\n estimatedTime: new Date(Date.now() - 30 * 60 * 1000).toISOString(),\n assignedTime: new Date(Date.now() - 90 * 60 * 1000).toISOString(),\n distance: 2.1,\n payment: { method: 'Online', amount: 340, status: 'completed' },\n },\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction formatTimeRemaining(estimatedTime: string): string {\n const now = new Date();\n const target = new Date(estimatedTime);\n const diffInMinutes = Math.floor((target.getTime() - now.getTime()) / (1000 * 60));\n if (diffInMinutes < 0) return'Overdue';\n if (diffInMinutes < 60) return`${diffInMinutes} min`;\n return`${Math.floor(diffInMinutes / 60)}h ${diffInMinutes % 60}m`;\n}\n\nfunction getTaskTypeConfig(type: WorkerTask['type']) {\n switch (type) {\n case'delivery':\n return {\n icon: Truck,\n label: 'Delivery',\n style: 'bg-accent-purple-subtle/20 text-accent-purple',\n };\n case'pickup':\n return {\n icon: ShoppingBag,\n label: 'Pickup',\n style: 'bg-accent-blue-subtle/20 text-accent-blue',\n };\n case'preparation':\n return {\n icon: ChefHat,\n label: 'Preparation',\n style: 'bg-status-success-bg-subtle/20 text-status-success-text',\n };\n default:\n return { icon: Package, label: type, style: 'bg-secondary text-secondary-foreground' };\n }\n}\n\nfunction getPriorityStyle(priority: WorkerTask['priority']): string {\n switch (priority) {\n case'urgent':\n return'bg-status-error-bg-subtle/20 text-status-error-text';\n case'high':\n return'bg-accent-orange-subtle/20 text-accent-orange';\n case'medium':\n return'bg-status-warning-bg-subtle/20 text-status-warning-text';\n case'low':\n return'bg-status-success-bg-subtle/20 text-status-success-text';\n default:\n return'bg-secondary text-secondary-foreground';\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerOrdersPage = () => {\n const { navigateTo } = useAdapterCloud();\n const [loading, setLoading] = useState(true);\n const [tasks, setTasks] = useState<WorkerTask[]>([]);\n const [currentTask, setCurrentTask] = useState<WorkerTask | null>(null);\n const [filters, setFilters] = useState<TaskFilters>({\n status: '',\n type: '',\n priority: '',\n sortBy: 'priority',\n });\n const [stats, setStats] = useState({\n totalTasks: 0,\n completedToday: 0,\n pendingTasks: 0,\n averageTime: 0,\n earnings: 0,\n rating: 4.8,\n });\n const [, setTick] = useState(0);\n\n // Refresh timer display\n useEffect(() => {\n const interval = setInterval(() => setTick((t) => t + 1), 60000);\n return () => clearInterval(interval);\n }, []);\n\n const loadTasks = useCallback(() => {\n setLoading(true);\n setTimeout(() => {\n let filtered = [...mockTasksData];\n\n if (filters.status) {\n filtered = filtered.filter((t) => t.status === filters.status);\n }\n if (filters.type) {\n filtered = filtered.filter((t) => t.type === filters.type);\n }\n if (filters.priority) {\n filtered = filtered.filter((t) => t.priority === filters.priority);\n }\n\n const priorityWeight: Record<string, number> = { urgent: 0, high: 1, medium: 2, low: 3 };\n switch (filters.sortBy) {\n case'priority':\n filtered.sort(\n (a, b) => (priorityWeight[a.priority] ?? 4) - (priorityWeight[b.priority] ?? 4)\n );\n break;\n case'time':\n filtered.sort(\n (a, b) => new Date(a.estimatedTime).getTime() - new Date(b.estimatedTime).getTime()\n );\n break;\n case'distance':\n filtered.sort((a, b) => (a.distance ?? 999) - (b.distance ?? 999));\n break;\n }\n\n setTasks(filtered);\n const inProgress = mockTasksData.find((t) => t.status === 'in_progress');\n setCurrentTask(inProgress ?? null);\n\n setStats({\n totalTasks: 45,\n completedToday: 12,\n pendingTasks: 3,\n averageTime: 22,\n earnings: 2450,\n rating: 4.8,\n });\n\n setLoading(false);\n }, 600);\n }, [filters]);\n\n useEffect(() => {\n loadTasks();\n }, [loadTasks]);\n\n const handleFilterChange = (key: keyof TaskFilters, value: string) => {\n setFilters((prev) => ({ ...prev, [key]: value }));\n };\n\n const handleStartTask = (taskId: string) => {\n const task = mockTasksData.find((t) => t.id === taskId);\n if (!task) return;\n task.status = 'in_progress';\n setCurrentTask(task);\n loadTasks();\n };\n\n const handleCompleteTask = (taskId: string) => {\n const task = mockTasksData.find((t) => t.id === taskId);\n if (task) task.status = 'completed';\n setCurrentTask(null);\n loadTasks();\n alert('Task completed successfully');\n };\n\n const handleCallCustomer = (phone: string) => {\n window.location.href = `tel:${phone.replace(/\\s/g, '')}`;\n };\n\n const handleNavigateToCustomer = (task: WorkerTask) => {\n if (task.address) {\n const addr = encodeURIComponent(`${task.address.addressLine1}, ${task.address.city}`);\n window.open(`https://maps.google.com?q=${addr}`, '_blank');\n }\n };\n\n if (loading) {\n return (\n <PageLayout title=\"My Orders\" description=\"Manage your assigned orders\">\n <div className=\"flex items-center justify-center py-24\">\n <div className=\"text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading tasks...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"My Orders\"\n description=\"Manage your assigned orders\"\n purpose=\"Every task assigned to you, with today's progress and earnings up top. Filter by status, open a task to get directions and customer details, and work the queue to keep deliveries and services on time.\"\n >\n <div className=\"space-y-6\">\n {/* Stats Overview (emphasis zone) */}\n <EmphasisPanel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Today's Tasks</p>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.totalTasks}</p>\n </div>\n <div className=\"rounded-lg border border-status-success-border/20 bg-status-success-bg-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-status-success-text\">Completed</p>\n <p className=\"text-2xl font-bold text-status-success-text\">\n {stats.completedToday}\n </p>\n </div>\n <div className=\"rounded-lg border border-status-warning-border/20 bg-status-warning-bg-subtle/5 p-4 shadow-sm\">\n <p className=\"text-xs text-status-warning-text\">Pending</p>\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {stats.pendingTasks}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Avg Time</p>\n <p className=\"text-2xl font-bold text-text-primary\">{stats.averageTime} min</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Today's Earnings</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(stats.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Rating</p>\n <p className=\"text-2xl font-bold text-text-primary flex items-center gap-1\">\n <Star className=\"h-4 w-4 fill-status-warning-text text-status-warning-text\" />\n {stats.rating}\n </p>\n </div>\n </div>\n </EmphasisPanel>\n\n {/* Current Task */}\n {currentTask && (\n <div className=\"rounded-lg border-2 border-accent-blue-subtle/30 bg-accent-blue-subtle/5 p-5\">\n <h2 className=\"text-base font-semibold text-accent-blue mb-4\">\n Current Task\n </h2>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n Order #{currentTask.orderId}\n </h3>\n {(() => {\n const cfg = getTaskTypeConfig(currentTask.type);\n const TypeIcon = cfg.icon;\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium',\n cfg.style\n )}\n >\n <TypeIcon className=\"h-3 w-3\" />\n {cfg.label}\n </span>\n );\n })()}\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n getPriorityStyle(currentTask.priority)\n )}\n >\n {currentTask.priority}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mt-1\">{currentTask.cartName}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xl font-bold text-accent-blue\">\n {formatTimeRemaining(currentTask.estimatedTime)}\n </p>\n <p className=\"text-xs text-text-secondary\">Time remaining</p>\n </div>\n </div>\n\n {/* Details */}\n <div className=\"border-t border-border-subtle pt-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">Customer</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {currentTask.customerName}\n </p>\n {currentTask.address && (\n <p className=\"text-xs text-text-secondary mt-1\">\n {currentTask.address.addressLine1}, {currentTask.address.city}\n </p>\n )}\n </div>\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">Items</p>\n <div className=\"space-y-0.5\">\n {currentTask.items.map((item, i) => (\n <p key={i} className=\"text-xs text-text-primary\">\n {item.quantity}x {item.name}\n </p>\n ))}\n </div>\n </div>\n </div>\n\n {currentTask.specialInstructions && (\n <div className=\"mt-3 p-3 rounded-md bg-status-warning-bg-subtle/10 border border-status-warning-border/20\">\n <p className=\"text-xs font-medium text-status-warning-text flex items-center gap-1\">\n <AlertTriangle className=\"h-3 w-3\" />\n Special Instructions:\n </p>\n <p className=\"text-xs text-status-warning-text mt-0.5\">\n {currentTask.specialInstructions}\n </p>\n </div>\n )}\n\n <div className=\"flex flex-wrap gap-2 mt-4\">\n <button\n type=\"button\"\n onClick={() => handleCallCustomer(currentTask.customerPhone)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Customer\n </button>\n {currentTask.type === 'delivery' && currentTask.address && (\n <button\n type=\"button\"\n onClick={() => handleNavigateToCustomer(currentTask)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => handleCompleteTask(currentTask.id)}\n className=\"ml-auto inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-2 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Complete Task\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Filters */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-3\">\n <select\n value={filters.status}\n onChange={(e) => handleFilterChange('status', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"\">All Tasks</option>\n <option value=\"pending\">Pending Tasks</option>\n <option value=\"in_progress\">In Progress</option>\n <option value=\"completed\">Completed</option>\n </select>\n <select\n value={filters.type}\n onChange={(e) => handleFilterChange('type', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"\">All Types</option>\n <option value=\"delivery\">Delivery</option>\n <option value=\"pickup\">Pickup</option>\n <option value=\"preparation\">Preparation</option>\n </select>\n <select\n value={filters.priority}\n onChange={(e) => handleFilterChange('priority', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"\">All Priorities</option>\n <option value=\"urgent\">Urgent</option>\n <option value=\"high\">High</option>\n <option value=\"medium\">Medium</option>\n <option value=\"low\">Low</option>\n </select>\n <select\n value={filters.sortBy}\n onChange={(e) => handleFilterChange('sortBy', e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-blue-subtle/40\"\n >\n <option value=\"priority\">Sort by Priority</option>\n <option value=\"time\">Sort by Time</option>\n <option value=\"distance\">Sort by Distance</option>\n </select>\n </div>\n </div>\n\n {/* Task List */}\n {tasks.length === 0 ? (\n <EmptyState\n illustration=\"empty-data\"\n icon={<ClipboardList className=\"h-12 w-12\" />}\n title=\"No tasks available\"\n description=\"Check back later for new tasks\"\n />\n ) : (\n <div className=\"space-y-3\">\n {tasks.map((task) => {\n const typeConfig = getTaskTypeConfig(task.type);\n const TypeIcon = typeConfig.icon;\n return (\n <div\n key={task.id}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-5 hover:shadow-md transition-shadow bg-gloss-card shadow-pop\"\n >\n {/* Task Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <div>\n <div className=\"flex items-center gap-2 flex-wrap\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n Order #{task.orderId}\n </h3>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium',\n typeConfig.style\n )}\n >\n <TypeIcon className=\"h-3 w-3\" />\n {typeConfig.label}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mt-1\">\n {task.cartName} · {task.customerName}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(task.payment.amount, { minimumFractionDigits: 0 })}\n </p>\n <p\n className={cn(\n 'text-xs',\n task.payment.status === 'completed'\n ? 'text-status-success-text'\n : 'text-status-warning-text'\n )}\n >\n <span className=\"flex items-center gap-1 justify-end\">\n <CreditCard className=\"h-3 w-3\" />\n {task.payment.status === 'completed' ? 'Paid' : 'COD'}\n </span>\n </p>\n </div>\n </div>\n\n {/* Task Body */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3 mb-3 text-sm\">\n <div>\n <p className=\"text-xs text-text-secondary\">Items</p>\n <div className=\"text-xs text-text-primary\">\n {task.items.map((item, i) => (\n <span key={i}>\n {item.quantity}x {item.name}\n {i < task.items.length - 1 && ', '}\n </span>\n ))}\n </div>\n </div>\n {task.address && (\n <div>\n <p className=\"text-xs text-text-secondary\">Delivery Address</p>\n <p className=\"text-xs text-text-primary\">{task.address.addressLine1}</p>\n </div>\n )}\n <div>\n <p className=\"text-xs text-text-secondary\">Time</p>\n <p\n className={cn(\n 'text-xs font-medium',\n formatTimeRemaining(task.estimatedTime) === 'Overdue'\n ? 'text-status-error-text'\n : 'text-text-primary'\n )}\n >\n {formatTimeRemaining(task.estimatedTime)}\n </p>\n </div>\n </div>\n\n {/* Task Footer */}\n {task.status === 'pending' && (\n <div className=\"flex items-center flex-wrap gap-2 border-t border-border-subtle pt-3\">\n <button\n type=\"button\"\n onClick={() => handleStartTask(task.id)}\n disabled={currentTask !== null}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n currentTask !== null\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-accent-blue-subtle/10 text-accent-blue hover:bg-accent-blue-subtle/20'\n )}\n >\n <PlayCircle className=\"h-3.5 w-3.5\" />\n {currentTask ? 'Complete current first' : 'Start Task'}\n </button>\n <button\n type=\"button\"\n onClick={() => handleCallCustomer(task.customerPhone)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call\n </button>\n {task.type === 'delivery' && task.distance != null && (\n <span className=\"ml-auto text-xs text-text-secondary flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {task.distance} km away\n </span>\n )}\n </div>\n )}\n {task.status === 'in_progress' && task.id !== currentTask?.id && (\n <div className=\"flex items-center gap-2 border-t border-border-subtle pt-3\">\n <button\n type=\"button\"\n onClick={() => handleCompleteTask(task.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-status-success-bg-subtle/10 px-3 py-1.5 text-xs font-medium text-status-success-text hover:bg-status-success-bg-subtle/20 transition-colors\"\n >\n <CheckCircle2 className=\"h-3.5 w-3.5\" />\n Complete\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo(`/worker/task/${task.id}`)}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n Details\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n {task.status === 'completed' && (\n <div className=\"flex items-center gap-2 border-t border-border-subtle pt-3\">\n <StatusBadge status=\"completed\" />\n <button\n type=\"button\"\n onClick={() => navigateTo(`/worker/task/${task.id}`)}\n className=\"ml-auto inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n Details\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|