@burdenoff/microfe-kadaikodi 2026.802.1 → 2026.830.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 (58) hide show
  1. package/dist/kadaikodi/KadaikodiRoot.d.ts.map +1 -1
  2. package/dist/kadaikodi/KadaikodiRoot.js +69 -72
  3. package/dist/kadaikodi/KadaikodiRoot.js.map +1 -1
  4. package/dist/kadaikodi/components/InvestmentCard.d.ts.map +1 -1
  5. package/dist/kadaikodi/components/InvestmentCard.js +58 -54
  6. package/dist/kadaikodi/components/InvestmentCard.js.map +1 -1
  7. package/dist/kadaikodi/components/OrderCard.d.ts.map +1 -1
  8. package/dist/kadaikodi/components/StatusBadge.d.ts.map +1 -1
  9. package/dist/kadaikodi/components/StatusBadge.js +25 -14
  10. package/dist/kadaikodi/components/StatusBadge.js.map +1 -1
  11. package/dist/kadaikodi/hooks/useKadaikodiApi.d.ts +24 -0
  12. package/dist/kadaikodi/hooks/useKadaikodiApi.d.ts.map +1 -1
  13. package/dist/kadaikodi/hooks/useKadaikodiApi.js +177 -132
  14. package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
  15. package/dist/kadaikodi/pages/HomePage.d.ts.map +1 -1
  16. package/dist/kadaikodi/pages/HomePage.js +284 -282
  17. package/dist/kadaikodi/pages/HomePage.js.map +1 -1
  18. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.d.ts +7 -2
  19. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.d.ts.map +1 -1
  20. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +319 -228
  21. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
  22. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +1 -1
  23. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  24. package/dist/kadaikodi/pages/admin/CartManagementPage.d.ts +10 -4
  25. package/dist/kadaikodi/pages/admin/CartManagementPage.d.ts.map +1 -1
  26. package/dist/kadaikodi/pages/admin/CartManagementPage.js +320 -279
  27. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  28. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.d.ts.map +1 -1
  29. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js +365 -292
  30. package/dist/kadaikodi/pages/cart-owner/MerchantOnboardingPage.js.map +1 -1
  31. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.d.ts +7 -2
  32. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.d.ts.map +1 -1
  33. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +300 -158
  34. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
  35. package/dist/kadaikodi/pages/common/SettingsPage.js +286 -286
  36. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  37. package/dist/kadaikodi/pages/customer/CartDetailPage.d.ts.map +1 -1
  38. package/dist/kadaikodi/pages/customer/CartDetailPage.js +3 -3
  39. package/dist/kadaikodi/pages/customer/CartDetailPage.js.map +1 -1
  40. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.d.ts +13 -3
  41. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.d.ts.map +1 -1
  42. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js +270 -220
  43. package/dist/kadaikodi/pages/customer/CartDiscoveryPage.js.map +1 -1
  44. package/dist/kadaikodi/pages/customer/CustomerDashboard.js +97 -97
  45. package/dist/kadaikodi/pages/customer/OrderTrackingPage.d.ts.map +1 -1
  46. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js +1 -1
  47. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  48. package/dist/kadaikodi/pages/worker/TaskDetailsPage.d.ts +5 -3
  49. package/dist/kadaikodi/pages/worker/TaskDetailsPage.d.ts.map +1 -1
  50. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +286 -199
  51. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  52. package/dist/kadaikodi/types/index.d.ts +46 -2
  53. package/dist/kadaikodi/types/index.d.ts.map +1 -1
  54. package/dist/shared/hooks/useTr.d.ts +2 -0
  55. package/dist/shared/hooks/useTr.d.ts.map +1 -0
  56. package/dist/shared/hooks/useTr.js +14 -0
  57. package/dist/shared/hooks/useTr.js.map +1 -0
  58. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"TaskDetailsPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/worker/TaskDetailsPage.tsx"],"sourcesContent":["/**\n * Task Details Page\n *\n * A delivery-job detail screen, elevated to the kk-worker-02-task-details\n * concept: a stylised (honest, not-to-scale) pickup → drop route panel, a\n * StepProgress tracker for the delivery flow, separate Pickup and Drop cards\n * with Call / Navigate actions, an earnings summary, a delivery-note field and\n * a single primary CTA that advances the task (Mark Picked Up → Mark Delivered).\n *\n * All data is real (useWorkerTasks). Status transitions use\n * useUpdateWorkerTaskStatus; the delivery note uses useUpdateWorkerTask. Nothing\n * is fabricated — fields the worker-task backend does not carry (per-item order\n * breakdown, payment badge) are simply omitted.\n *\n * @module kadaikodi/pages/worker\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n Package,\n Phone,\n MapPin,\n Clock,\n Navigation,\n CheckCircle2,\n Loader2,\n Truck,\n ShoppingBag,\n User,\n AlertTriangle,\n FileText,\n StickyNote,\n IndianRupee,\n ShoppingCart,\n} from 'lucide-react';\nimport { GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { StepProgress, Timeline, type TimelineItem } from '../../components/viz';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport {\n useWorkerTasks,\n useUpdateWorkerTask,\n useUpdateWorkerTaskStatus,\n} from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { TaskStatus, WorkerTask } from '../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskCustomerInfo {\n name: string;\n phone: string;\n address: string;\n}\n\ninterface TaskDetails {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: WorkerTask['type'];\n status: TaskStatus;\n priority: WorkerTask['priority'];\n title: string;\n description: string;\n estimatedTime: number;\n assignedBy: string;\n assignedTime: string;\n dueTime: string;\n location?: string;\n earnings: number;\n distance?: number;\n customerInfo: TaskCustomerInfo;\n specialInstructions?: string;\n notes?: string;\n completedAt?: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst typeLabels: Record<string, string> = {\n delivery: 'Delivery',\n pickup: 'Pickup',\n service: 'Service',\n};\n\nfunction getTaskTypeIcon(type: string) {\n switch (type) {\n case 'delivery':\n return Truck;\n case 'pickup':\n return ShoppingBag;\n case 'service':\n return Package;\n default:\n return FileText;\n }\n}\n\nfunction getPriorityStyle(priority: string): string {\n switch (priority) {\n case 'urgent':\n case 'high':\n return 'bg-status-error-bg-subtle text-status-error-text';\n case 'medium':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'low':\n return 'bg-status-success-bg-subtle text-status-success-text';\n default:\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction formatTime(dateString: string): string {\n const d = new Date(dateString);\n if (Number.isNaN(d.getTime())) return dateString;\n return d.toLocaleTimeString('en-IN', { hour: 'numeric', minute: '2-digit', hour12: true });\n}\n\n/** Map a real worker task into the page's detail view-model (no fabricated fields). */\nfunction mapWorkerTaskToDetails(t: WorkerTask): TaskDetails {\n const address = t.deliveryAddress\n ? [\n t.deliveryAddress.street,\n t.deliveryAddress.area,\n t.deliveryAddress.city,\n t.deliveryAddress.pincode,\n ]\n .filter(Boolean)\n .join(', ')\n : '';\n return {\n id: t.id,\n orderId: t.orderId,\n cartId: t.cartId,\n cartName: t.cartName,\n type: t.type,\n status: t.status,\n priority: t.priority,\n title: t.title ?? t.description ?? 'Task',\n description: t.description,\n estimatedTime: t.estimatedTime ?? 0,\n assignedBy: t.assignedBy ?? '',\n assignedTime: t.assignedAt || '',\n dueTime: t.dueAt,\n location: t.location,\n earnings: t.earnings,\n distance: t.distance,\n customerInfo: { name: t.customerName, phone: t.customerPhone, address },\n specialInstructions: t.notes ?? undefined,\n notes: t.notes ?? '',\n completedAt: t.completedAt,\n };\n}\n\nconst DELIVERY_STEPS = [{ label: 'Assigned' }, { label: 'Picked Up' }, { label: 'Delivered' }];\n\nfunction currentStep(status: TaskStatus): number {\n switch (status) {\n case 'pending':\n return 1;\n case 'in_progress':\n return 2;\n case 'completed':\n return 3;\n default:\n return 0;\n }\n}\n\n/**\n * Honest, illustrative pickup → drop panel. This is a stylised schematic (clearly\n * labelled \"not to scale\"), NOT a real map — the worker-task backend does not\n * expose geo-coordinates, so we never imply a real position.\n */\nfunction RouteSchematic({\n pickupLabel,\n dropLabel,\n distance,\n}: {\n pickupLabel: string;\n dropLabel: string;\n distance?: number;\n}) {\n return (\n <div className=\"relative overflow-hidden rounded-[var(--radius-card)] border border-border-subtle bg-bg-sunken\">\n <svg\n viewBox=\"0 0 400 190\"\n className=\"block w-full\"\n role=\"img\"\n aria-label={`Illustrative route from ${pickupLabel} to ${dropLabel}`}\n >\n {/* faint street grid */}\n <g stroke=\"var(--color-border-subtle)\" strokeWidth=\"1\" opacity=\"0.7\">\n <path d=\"M0 45 H400 M0 95 H400 M0 145 H400\" />\n <path d=\"M70 0 V190 M160 0 V190 M250 0 V190 M330 0 V190\" />\n </g>\n {/* route */}\n <path\n d=\"M70 55 H150 Q165 55 165 70 V120 Q165 135 180 135 H300\"\n fill=\"none\"\n stroke=\"var(--color-accent-primary)\"\n strokeWidth=\"3.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray=\"1 0\"\n />\n {/* pickup node */}\n <circle cx=\"70\" cy=\"55\" r=\"7\" fill=\"var(--color-accent-primary)\" />\n <circle cx=\"70\" cy=\"55\" r=\"12\" fill=\"var(--color-accent-primary)\" opacity=\"0.18\" />\n {/* drop node */}\n <circle cx=\"300\" cy=\"135\" r=\"7\" fill=\"var(--color-status-success-text)\" />\n <circle cx=\"300\" cy=\"135\" r=\"12\" fill=\"var(--color-status-success-text)\" opacity=\"0.18\" />\n </svg>\n <div className=\"pointer-events-none absolute left-3 top-3 flex items-center gap-1.5 rounded-md bg-bg-surface/85 px-2 py-1 backdrop-blur\">\n <Package className=\"h-3.5 w-3.5 text-accent-primary\" />\n <span className=\"max-w-[9rem] truncate text-[11px] font-medium text-text-primary\">\n {pickupLabel}\n </span>\n </div>\n <div className=\"pointer-events-none absolute bottom-3 right-3 flex items-center gap-1.5 rounded-md bg-bg-surface/85 px-2 py-1 backdrop-blur\">\n <MapPin className=\"h-3.5 w-3.5 text-status-success-text\" />\n <span className=\"max-w-[9rem] truncate text-[11px] font-medium text-text-primary\">\n {dropLabel}\n </span>\n </div>\n <div className=\"flex items-center justify-between border-t border-border-subtle px-3 py-2\">\n <span className=\"text-[11px] text-text-muted\">Illustrative route · not to scale</span>\n {distance != null && (\n <span className=\"text-[11px] font-medium text-text-secondary tabular-nums\">\n {distance} km\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function TaskDetailsPage() {\n const { taskId } = useParams<{ taskId: string }>();\n const { navigateTo, currentUser } = useKadaikodi();\n const workerId = currentUser?.id ?? '';\n const { data: tasks = [], isLoading: loading } = useWorkerTasks(workerId);\n const updateStatus = useUpdateWorkerTaskStatus();\n const updateNotes = useUpdateWorkerTask();\n const [task, setTask] = useState<TaskDetails | null>(null);\n const [notes, setNotes] = useState('');\n const [notesSaved, setNotesSaved] = useState(false);\n\n useEffect(() => {\n const found = tasks.find((t) => t.id === taskId);\n if (found) {\n const mapped = mapWorkerTaskToDetails(found);\n setTask(mapped);\n setNotes(mapped.notes ?? '');\n } else {\n setTask(null);\n }\n }, [tasks, taskId]);\n\n const handleAdvanceStatus = () => {\n if (!task) return;\n if (task.status === 'pending') {\n setTask({ ...task, status: 'in_progress' });\n updateStatus.mutate({ taskId: task.id, status: 'IN_PROGRESS' });\n } else if (task.status === 'in_progress') {\n setTask({ ...task, status: 'completed' });\n updateStatus.mutate({ taskId: task.id, status: 'COMPLETED' });\n }\n };\n\n const handleCallCustomer = () => {\n if (task?.customerInfo?.phone) {\n window.location.href = `tel:${task.customerInfo.phone.replace(/\\s/g, '')}`;\n }\n };\n\n const handleNavigate = (query: string) => {\n if (query) {\n window.open(`https://maps.google.com?q=${encodeURIComponent(query)}`, '_blank');\n }\n };\n\n const handleSaveNotes = () => {\n if (!task) return;\n setNotesSaved(false);\n updateNotes.mutate(\n { taskId: task.id, notes },\n {\n onSuccess: () => {\n setTask((t) => (t ? { ...t, notes } : t));\n setNotesSaved(true);\n },\n }\n );\n };\n\n const timeline = useMemo<TimelineItem[]>(() => {\n if (!task) return [];\n return [\n {\n title: 'Task assigned',\n time: task.assignedTime ? formatTime(task.assignedTime) : undefined,\n meta: task.assignedBy || undefined,\n tone: 'success',\n },\n {\n title: 'Picked up',\n time: task.status === 'in_progress' || task.status === 'completed' ? 'Done' : undefined,\n tone: task.status === 'in_progress' || task.status === 'completed' ? 'success' : 'muted',\n },\n {\n title: 'Delivered',\n time:\n task.status === 'completed'\n ? task.completedAt\n ? formatTime(task.completedAt)\n : 'Done'\n : undefined,\n tone: task.status === 'completed' ? 'success' : 'muted',\n },\n ];\n }, [task]);\n\n if (loading) {\n return (\n <PageLayout title=\"Task Details\">\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 task details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n if (!task) {\n return (\n <PageLayout title=\"Task Not Found\">\n <EmptyState\n icon={<FileText className=\"h-12 w-12\" />}\n title=\"Task not found\"\n description={`No task found with ID \"${taskId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n View All Orders\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const TaskTypeIcon = getTaskTypeIcon(task.type);\n const typeLabel = typeLabels[task.type] ?? 'Task';\n const pickupLabel = task.cartName || 'Pickup';\n const dropLabel = task.customerInfo.address || task.customerInfo.name || 'Drop-off';\n const ctaLabel =\n task.status === 'pending'\n ? 'Mark Picked Up'\n : task.status === 'in_progress'\n ? 'Mark Delivered'\n : 'Delivered';\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3 min-w-0\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-md p-1 text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors shrink-0\"\n aria-label=\"Back to orders\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span className=\"truncate\">\n {typeLabel}\n {task.orderId ? <span className=\"text-text-secondary\"> · #{task.orderId}</span> : null}\n </span>\n </div>\n }\n description=\"Everything you need to complete this delivery\"\n >\n <PagePurpose className=\"mb-6\">\n One delivery, start to finish. Reach the customer, follow the route, jot a note, and advance\n the job — mark it picked up, then delivered — so nothing gets missed and your completion\n stats stay strong.\n </PagePurpose>\n\n <div className=\"space-y-6\">\n {/* Delivery step tracker */}\n <GlassCard treatment=\"metric\" className=\"p-5\">\n <div className=\"mb-4 flex flex-wrap items-center gap-2\">\n <span className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-accent-primary/12 text-accent-primary\">\n <TaskTypeIcon className=\"h-4.5 w-4.5\" />\n </span>\n <h2 className=\"text-base font-semibold text-text-primary\">{task.title}</h2>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium uppercase',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n </div>\n <StepProgress steps={DELIVERY_STEPS} current={currentStep(task.status)} />\n </GlassCard>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Main column */}\n <div className=\"lg:col-span-2 space-y-6\">\n <RouteSchematic\n pickupLabel={pickupLabel}\n dropLabel={dropLabel}\n distance={task.distance}\n />\n\n {/* Pickup + Drop cards */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {/* Pickup */}\n <GlassCard className=\"p-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">\n Pickup\n </p>\n <p className=\"mt-1 text-sm font-semibold text-text-primary\">{task.cartName}</p>\n {task.location && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.location}</p>\n )}\n <div className=\"mt-4\">\n <button\n type=\"button\"\n onClick={() => handleNavigate(task.location || task.cartName)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n </div>\n </GlassCard>\n\n {/* Drop */}\n <GlassCard className=\"p-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">Drop</p>\n <p className=\"mt-1 text-sm font-semibold text-text-primary\">\n {task.customerInfo.name || 'Customer'}\n </p>\n {task.customerInfo.address && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.customerInfo.address}</p>\n )}\n {task.customerInfo.phone && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.customerInfo.phone}</p>\n )}\n <div className=\"mt-4 flex gap-2\">\n {task.customerInfo.phone && (\n <button\n type=\"button\"\n onClick={handleCallCustomer}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call\n </button>\n )}\n {task.customerInfo.address && (\n <button\n type=\"button\"\n onClick={() => handleNavigate(task.customerInfo.address)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n )}\n </div>\n </GlassCard>\n </div>\n\n {/* Earnings summary */}\n <GlassCard treatment=\"insight\" className=\"p-5\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle text-status-success-text\">\n <IndianRupee className=\"h-4.5 w-4.5\" />\n </span>\n <div>\n <p className=\"text-xs text-text-secondary\">You earn</p>\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(task.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-4 text-sm\">\n <span className=\"flex items-center gap-1.5 text-text-secondary\">\n <ShoppingCart className=\"h-4 w-4\" />\n {task.cartName}\n </span>\n {task.dueTime && (\n <span className=\"flex items-center gap-1.5 text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Due {formatTime(task.dueTime)}\n </span>\n )}\n </div>\n </div>\n </GlassCard>\n\n {/* Special Instructions */}\n {task.specialInstructions && (\n <div className=\"rounded-[var(--radius-card)] border border-status-warning-text/20 bg-status-warning-bg-subtle p-4\">\n <p className=\"text-sm text-status-warning-text flex items-start gap-2\">\n <AlertTriangle className=\"h-4 w-4 shrink-0 mt-0.5\" />\n {task.specialInstructions}\n </p>\n </div>\n )}\n\n {/* Delivery note */}\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <StickyNote className=\"h-4 w-4 text-text-secondary\" />\n Delivery note\n </h3>\n <textarea\n value={notes}\n onChange={(e) => {\n setNotes(e.target.value);\n setNotesSaved(false);\n }}\n placeholder=\"Add a delivery note...\"\n rows={3}\n className=\"w-full resize-none rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-border-focus/40\"\n />\n <div className=\"mt-3 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleSaveNotes}\n disabled={updateNotes.isPending}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors disabled:opacity-50\"\n >\n {updateNotes.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <StickyNote className=\"h-3.5 w-3.5\" />\n )}\n {updateNotes.isPending ? 'Saving...' : 'Save note'}\n </button>\n {notesSaved && !updateNotes.isPending && (\n <span className=\"text-xs text-status-success-text\">Note saved</span>\n )}\n {updateNotes.isError && (\n <span className=\"text-xs text-status-error-text\">Couldn&apos;t save — retry</span>\n )}\n </div>\n </GlassCard>\n\n {/* Primary CTA */}\n <button\n type=\"button\"\n onClick={handleAdvanceStatus}\n disabled={task.status === 'completed' || updateStatus.isPending}\n className={cn(\n 'w-full inline-flex items-center justify-center gap-2 rounded-[var(--radius-card)] px-4 py-3.5 text-base font-semibold transition-colors',\n task.status === 'completed'\n ? 'bg-status-success-bg-subtle text-status-success-text cursor-default'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-60'\n )}\n >\n {updateStatus.isPending ? (\n <Loader2 className=\"h-5 w-5 animate-spin\" />\n ) : (\n <CheckCircle2 className=\"h-5 w-5\" />\n )}\n {ctaLabel}\n </button>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Delivery timeline</h3>\n <Timeline items={timeline} />\n </GlassCard>\n\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Job details</h3>\n <dl className=\"space-y-3 text-sm\">\n {task.orderId && (\n <div className=\"flex items-center gap-2\">\n <FileText className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Order ID</dt>\n <dd className=\"font-mono font-medium text-text-primary\">{task.orderId}</dd>\n </div>\n </div>\n )}\n {task.customerInfo.name && (\n <div className=\"flex items-center gap-2\">\n <User className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Customer</dt>\n <dd className=\"font-medium text-text-primary\">{task.customerInfo.name}</dd>\n </div>\n </div>\n )}\n {task.distance != null && (\n <div className=\"flex items-center gap-2\">\n <Navigation className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Distance</dt>\n <dd className=\"font-medium text-text-primary\">{task.distance} km</dd>\n </div>\n </div>\n )}\n {task.assignedTime && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Assigned</dt>\n <dd className=\"font-medium text-text-primary\">\n {formatDate(task.assignedTime)}\n </dd>\n </div>\n </div>\n )}\n </dl>\n </GlassCard>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TaskDetailsPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/worker/TaskDetailsPage.tsx"],"sourcesContent":["/**\n * Task Details Page\n *\n * A delivery-job detail screen, elevated to the kk-worker-02-task-details\n * concept: a stylised (honest, not-to-scale) pickup → drop route panel, a\n * StepProgress tracker for the delivery flow, separate Pickup and Drop cards\n * with Call / Navigate actions, an earnings summary, a delivery-note field and\n * a single primary CTA that advances the task (Mark Picked Up → Mark Delivered).\n *\n * All data is real (useWorkerTasks). Status transitions use\n * useUpdateWorkerTaskStatus; the delivery note uses useUpdateWorkerTask. The\n * order summary (line items, total, payment state, order number) comes from\n * `KadaikodiWorkerTask.order`, whose resolver admits the assigned worker.\n * Nothing is fabricated — there is still no geo data behind the route panel, so\n * it stays a labelled schematic.\n *\n * @module kadaikodi/pages/worker\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport { useParams } from 'react-router';\nimport {\n ArrowLeft,\n Package,\n Phone,\n MapPin,\n Clock,\n Navigation,\n CheckCircle2,\n Loader2,\n Truck,\n ShoppingBag,\n User,\n AlertTriangle,\n FileText,\n StickyNote,\n IndianRupee,\n ShoppingCart,\n RotateCcw,\n} from 'lucide-react';\nimport { GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { StepProgress, Timeline, type TimelineItem } from '../../components/viz';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport {\n useWorkerTasks,\n useUpdateWorkerTask,\n useUpdateWorkerTaskStatus,\n} from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { PaymentStatus, TaskStatus, WorkerTask, WorkerTaskOrderSummary } from '../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface TaskCustomerInfo {\n name: string;\n phone: string;\n address: string;\n}\n\ninterface TaskDetails {\n id: string;\n orderId: string;\n cartId: string;\n cartName: string;\n type: WorkerTask['type'];\n status: TaskStatus;\n priority: WorkerTask['priority'];\n title: string;\n description: string;\n estimatedTime: number;\n assignedBy: string;\n assignedTime: string;\n dueTime: string;\n location?: string;\n earnings: number;\n distance?: number;\n customerInfo: TaskCustomerInfo;\n specialInstructions?: string;\n notes?: string;\n completedAt?: string;\n order?: WorkerTaskOrderSummary;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst typeLabels: Record<string, string> = {\n delivery: 'Delivery',\n pickup: 'Pickup',\n service: 'Service',\n};\n\nfunction getTaskTypeIcon(type: string) {\n switch (type) {\n case 'delivery':\n return Truck;\n case 'pickup':\n return ShoppingBag;\n case 'service':\n return Package;\n default:\n return FileText;\n }\n}\n\nfunction getPriorityStyle(priority: string): string {\n switch (priority) {\n case 'urgent':\n case 'high':\n return 'bg-status-error-bg-subtle text-status-error-text';\n case 'medium':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'low':\n return 'bg-status-success-bg-subtle text-status-success-text';\n default:\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction formatTime(dateString: string): string {\n const d = new Date(dateString);\n if (Number.isNaN(d.getTime())) return dateString;\n return d.toLocaleTimeString('en-IN', { hour: 'numeric', minute: '2-digit', hour12: true });\n}\n\n/** Map a real worker task into the page's detail view-model (no fabricated fields). */\nfunction mapWorkerTaskToDetails(t: WorkerTask): TaskDetails {\n const address = t.deliveryAddress\n ? [\n t.deliveryAddress.street,\n t.deliveryAddress.area,\n t.deliveryAddress.city,\n t.deliveryAddress.pincode,\n ]\n .filter(Boolean)\n .join(', ')\n : '';\n return {\n id: t.id,\n orderId: t.orderId,\n cartId: t.cartId,\n cartName: t.cartName,\n type: t.type,\n status: t.status,\n priority: t.priority,\n title: t.title ?? t.description ?? 'Task',\n description: t.description,\n estimatedTime: t.estimatedTime ?? 0,\n assignedBy: t.assignedBy ?? '',\n assignedTime: t.assignedAt || '',\n dueTime: t.dueAt,\n location: t.location,\n earnings: t.earnings,\n distance: t.distance,\n customerInfo: { name: t.customerName, phone: t.customerPhone, address },\n specialInstructions: t.notes ?? undefined,\n notes: t.notes ?? '',\n completedAt: t.completedAt,\n order: t.order,\n };\n}\n\n/**\n * How each `KadaikodiPaymentStatus` reads to the worker on the doorstep — the\n * distinction that matters to them is \"already settled\" vs \"collect on delivery\".\n */\nconst PAYMENT_META: Record<\n PaymentStatus,\n { label: string; cls: string; icon: typeof CheckCircle2 }\n> = {\n paid: {\n label: 'Paid',\n cls: 'bg-status-success-bg-subtle text-status-success-text',\n icon: CheckCircle2,\n },\n processing: {\n label: 'Payment processing',\n cls: 'bg-status-warning-bg-subtle text-status-warning-text',\n icon: Clock,\n },\n pending: {\n label: 'Collect payment',\n cls: 'bg-status-warning-bg-subtle text-status-warning-text',\n icon: IndianRupee,\n },\n failed: {\n label: 'Payment failed',\n cls: 'bg-status-error-bg-subtle text-status-error-text',\n icon: AlertTriangle,\n },\n refunded: {\n label: 'Refunded',\n cls: 'bg-bg-sunken text-text-secondary',\n icon: RotateCcw,\n },\n};\n\nconst DELIVERY_STEPS = [{ label: 'Assigned' }, { label: 'Picked Up' }, { label: 'Delivered' }];\n\nfunction currentStep(status: TaskStatus): number {\n switch (status) {\n case 'pending':\n return 1;\n case 'in_progress':\n return 2;\n case 'completed':\n return 3;\n case 'blocked':\n case 'cancelled':\n default:\n return 0;\n }\n}\n\n/** True only for the two states the worker can actually advance from. */\nconst canAdvance = (status: TaskStatus): boolean =>\n status === 'pending' || status === 'in_progress';\n\n/**\n * Honest, illustrative pickup → drop panel. This is a stylised schematic (clearly\n * labelled \"not to scale\"), NOT a real map — the worker-task backend does not\n * expose geo-coordinates, so we never imply a real position.\n */\nfunction RouteSchematic({\n pickupLabel,\n dropLabel,\n distance,\n}: {\n pickupLabel: string;\n dropLabel: string;\n distance?: number;\n}) {\n return (\n <div className=\"relative overflow-hidden rounded-[var(--radius-card)] border border-border-subtle bg-bg-sunken\">\n <svg\n viewBox=\"0 0 400 190\"\n className=\"block w-full\"\n role=\"img\"\n aria-label={`Illustrative route from ${pickupLabel} to ${dropLabel}`}\n >\n {/* faint street grid */}\n <g stroke=\"var(--color-border-subtle)\" strokeWidth=\"1\" opacity=\"0.7\">\n <path d=\"M0 45 H400 M0 95 H400 M0 145 H400\" />\n <path d=\"M70 0 V190 M160 0 V190 M250 0 V190 M330 0 V190\" />\n </g>\n {/* route */}\n <path\n d=\"M70 55 H150 Q165 55 165 70 V120 Q165 135 180 135 H300\"\n fill=\"none\"\n stroke=\"var(--color-accent-primary)\"\n strokeWidth=\"3.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeDasharray=\"1 0\"\n />\n {/* pickup node */}\n <circle cx=\"70\" cy=\"55\" r=\"7\" fill=\"var(--color-accent-primary)\" />\n <circle cx=\"70\" cy=\"55\" r=\"12\" fill=\"var(--color-accent-primary)\" opacity=\"0.18\" />\n {/* drop node */}\n <circle cx=\"300\" cy=\"135\" r=\"7\" fill=\"var(--color-status-success-text)\" />\n <circle cx=\"300\" cy=\"135\" r=\"12\" fill=\"var(--color-status-success-text)\" opacity=\"0.18\" />\n </svg>\n <div className=\"pointer-events-none absolute left-3 top-3 flex items-center gap-1.5 rounded-md bg-bg-surface/85 px-2 py-1 backdrop-blur\">\n <Package className=\"h-3.5 w-3.5 text-accent-primary\" />\n <span className=\"max-w-[9rem] truncate text-[11px] font-medium text-text-primary\">\n {pickupLabel}\n </span>\n </div>\n <div className=\"pointer-events-none absolute bottom-3 right-3 flex items-center gap-1.5 rounded-md bg-bg-surface/85 px-2 py-1 backdrop-blur\">\n <MapPin className=\"h-3.5 w-3.5 text-status-success-text\" />\n <span className=\"max-w-[9rem] truncate text-[11px] font-medium text-text-primary\">\n {dropLabel}\n </span>\n </div>\n <div className=\"flex items-center justify-between border-t border-border-subtle px-3 py-2\">\n <span className=\"text-[11px] text-text-muted\">Illustrative route · not to scale</span>\n {distance != null && (\n <span className=\"text-[11px] font-medium text-text-secondary tabular-nums\">\n {distance} km\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function TaskDetailsPage() {\n const { taskId } = useParams<{ taskId: string }>();\n const { navigateTo, currentUser } = useKadaikodi();\n const workerId = currentUser?.id ?? '';\n const { data: tasks = [], isLoading: loading } = useWorkerTasks(workerId);\n const updateStatus = useUpdateWorkerTaskStatus();\n const updateNotes = useUpdateWorkerTask();\n const [task, setTask] = useState<TaskDetails | null>(null);\n const [notes, setNotes] = useState('');\n const [notesSaved, setNotesSaved] = useState(false);\n\n useEffect(() => {\n const found = tasks.find((t) => t.id === taskId);\n if (found) {\n const mapped = mapWorkerTaskToDetails(found);\n setTask(mapped);\n setNotes(mapped.notes ?? '');\n } else {\n setTask(null);\n }\n }, [tasks, taskId]);\n\n const handleAdvanceStatus = () => {\n if (!task) return;\n if (task.status === 'pending') {\n setTask({ ...task, status: 'in_progress' });\n updateStatus.mutate({ taskId: task.id, status: 'IN_PROGRESS' });\n } else if (task.status === 'in_progress') {\n setTask({ ...task, status: 'completed' });\n updateStatus.mutate({ taskId: task.id, status: 'COMPLETED' });\n }\n };\n\n const handleCallCustomer = () => {\n if (task?.customerInfo?.phone) {\n window.location.href = `tel:${task.customerInfo.phone.replace(/\\s/g, '')}`;\n }\n };\n\n const handleNavigate = (query: string) => {\n if (query) {\n window.open(`https://maps.google.com?q=${encodeURIComponent(query)}`, '_blank');\n }\n };\n\n const handleSaveNotes = () => {\n if (!task) return;\n setNotesSaved(false);\n updateNotes.mutate(\n { taskId: task.id, notes },\n {\n onSuccess: () => {\n setTask((t) => (t ? { ...t, notes } : t));\n setNotesSaved(true);\n },\n }\n );\n };\n\n const timeline = useMemo<TimelineItem[]>(() => {\n if (!task) return [];\n return [\n {\n title: 'Task assigned',\n time: task.assignedTime ? formatTime(task.assignedTime) : undefined,\n meta: task.assignedBy || undefined,\n tone: 'success',\n },\n {\n title: 'Picked up',\n time: task.status === 'in_progress' || task.status === 'completed' ? 'Done' : undefined,\n tone: task.status === 'in_progress' || task.status === 'completed' ? 'success' : 'muted',\n },\n {\n title: 'Delivered',\n time:\n task.status === 'completed'\n ? task.completedAt\n ? formatTime(task.completedAt)\n : 'Done'\n : undefined,\n tone: task.status === 'completed' ? 'success' : 'muted',\n },\n ];\n }, [task]);\n\n if (loading) {\n return (\n <PageLayout title=\"Task Details\">\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 task details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n if (!task) {\n return (\n <PageLayout title=\"Task Not Found\">\n <EmptyState\n icon={<FileText className=\"h-12 w-12\" />}\n title=\"Task not found\"\n description={`No task found with ID \"${taskId}\".`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n View All Orders\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const TaskTypeIcon = getTaskTypeIcon(task.type);\n const typeLabel = typeLabels[task.type] ?? 'Task';\n const pickupLabel = task.cartName || 'Pickup';\n const dropLabel = task.customerInfo.address || task.customerInfo.name || 'Drop-off';\n const advanceable = canAdvance(task.status);\n const ctaLabel =\n task.status === 'pending'\n ? 'Mark Picked Up'\n : task.status === 'in_progress'\n ? 'Mark Delivered'\n : task.status === 'completed'\n ? 'Delivered'\n : task.status === 'cancelled'\n ? 'Cancelled'\n : 'Blocked';\n // Prefer the order's human reference over the raw task/order UUID.\n const orderRef = task.order?.orderNumber || task.orderId;\n const payment = task.order ? PAYMENT_META[task.order.paymentStatus] : undefined;\n const itemCount = task.order?.items.reduce((sum, i) => sum + i.quantity, 0) ?? 0;\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3 min-w-0\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/worker/orders')}\n className=\"rounded-md p-1 text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors shrink-0\"\n aria-label=\"Back to orders\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span className=\"truncate\">\n {typeLabel}\n {orderRef ? <span className=\"text-text-secondary\"> · #{orderRef}</span> : null}\n </span>\n </div>\n }\n description=\"Everything you need to complete this delivery\"\n >\n <PagePurpose className=\"mb-6\">\n One delivery, start to finish. Reach the customer, follow the route, jot a note, and advance\n the job — mark it picked up, then delivered — so nothing gets missed and your completion\n stats stay strong.\n </PagePurpose>\n\n <div className=\"space-y-6\">\n {/* Delivery step tracker */}\n <GlassCard treatment=\"metric\" className=\"p-5\">\n <div className=\"mb-4 flex flex-wrap items-center gap-2\">\n <span className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-accent-primary/12 text-accent-primary\">\n <TaskTypeIcon className=\"h-4.5 w-4.5\" />\n </span>\n <h2 className=\"text-base font-semibold text-text-primary\">{task.title}</h2>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium uppercase',\n getPriorityStyle(task.priority)\n )}\n >\n {task.priority}\n </span>\n </div>\n <StepProgress steps={DELIVERY_STEPS} current={currentStep(task.status)} />\n </GlassCard>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Main column */}\n <div className=\"lg:col-span-2 space-y-6\">\n <RouteSchematic\n pickupLabel={pickupLabel}\n dropLabel={dropLabel}\n distance={task.distance}\n />\n\n {/* Pickup + Drop cards */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {/* Pickup */}\n <GlassCard className=\"p-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">\n Pickup\n </p>\n <p className=\"mt-1 text-sm font-semibold text-text-primary\">{task.cartName}</p>\n {task.location && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.location}</p>\n )}\n <div className=\"mt-4\">\n <button\n type=\"button\"\n onClick={() => handleNavigate(task.location || task.cartName)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n </div>\n </GlassCard>\n\n {/* Drop */}\n <GlassCard className=\"p-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">Drop</p>\n <p className=\"mt-1 text-sm font-semibold text-text-primary\">\n {task.customerInfo.name || 'Customer'}\n </p>\n {task.customerInfo.address && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.customerInfo.address}</p>\n )}\n {task.customerInfo.phone && (\n <p className=\"mt-0.5 text-xs text-text-secondary\">{task.customerInfo.phone}</p>\n )}\n <div className=\"mt-4 flex gap-2\">\n {task.customerInfo.phone && (\n <button\n type=\"button\"\n onClick={handleCallCustomer}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call\n </button>\n )}\n {task.customerInfo.address && (\n <button\n type=\"button\"\n onClick={() => handleNavigate(task.customerInfo.address)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Navigation className=\"h-3.5 w-3.5\" />\n Navigate\n </button>\n )}\n </div>\n </GlassCard>\n </div>\n\n {/* Order summary — real line items from the task's parent order */}\n {task.order && (\n <GlassCard className=\"p-5\">\n <div className=\"mb-3 flex flex-wrap items-center justify-between gap-2\">\n <h3 className=\"flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <ShoppingBag className=\"h-4 w-4 text-text-secondary\" />\n Order\n {task.order.orderNumber && (\n <span className=\"font-mono text-xs font-normal text-text-secondary\">\n #{task.order.orderNumber}\n </span>\n )}\n </h3>\n {payment && (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n payment.cls\n )}\n >\n <payment.icon className=\"h-3 w-3\" />\n {payment.label}\n </span>\n )}\n </div>\n\n {task.order.items.length > 0 ? (\n <>\n <p className=\"mb-2 text-xs text-text-secondary\">\n {itemCount} {itemCount === 1 ? 'item' : 'items'}\n </p>\n <ul className=\"divide-y divide-border-subtle\">\n {task.order.items.map((item) => (\n <li\n key={item.id}\n className=\"flex items-center justify-between gap-3 py-2 text-sm\"\n >\n <span className=\"min-w-0 truncate text-text-primary\">{item.name}</span>\n <span className=\"shrink-0 tabular-nums text-text-secondary\">\n &times;{item.quantity}\n </span>\n </li>\n ))}\n </ul>\n </>\n ) : (\n <p className=\"text-sm text-text-secondary\">\n This order has no itemised lines recorded.\n </p>\n )}\n\n <div className=\"mt-3 flex items-center justify-between border-t border-border-subtle pt-3\">\n <span className=\"text-sm text-text-secondary\">Order total</span>\n <span className=\"text-base font-semibold tabular-nums text-text-primary\">\n {formatCurrency(task.order.total, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </GlassCard>\n )}\n\n {/* Earnings summary */}\n <GlassCard treatment=\"insight\" className=\"p-5\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle text-status-success-text\">\n <IndianRupee className=\"h-4.5 w-4.5\" />\n </span>\n <div>\n <p className=\"text-xs text-text-secondary\">You earn</p>\n <p className=\"text-lg font-bold text-text-primary\">\n {formatCurrency(task.earnings, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-4 text-sm\">\n <span className=\"flex items-center gap-1.5 text-text-secondary\">\n <ShoppingCart className=\"h-4 w-4\" />\n {task.cartName}\n </span>\n {task.dueTime && (\n <span className=\"flex items-center gap-1.5 text-text-secondary\">\n <Clock className=\"h-4 w-4\" />\n Due {formatTime(task.dueTime)}\n </span>\n )}\n </div>\n </div>\n </GlassCard>\n\n {/* Special Instructions */}\n {task.specialInstructions && (\n <div className=\"rounded-[var(--radius-card)] border border-status-warning-text/20 bg-status-warning-bg-subtle p-4\">\n <p className=\"text-sm text-status-warning-text flex items-start gap-2\">\n <AlertTriangle className=\"h-4 w-4 shrink-0 mt-0.5\" />\n {task.specialInstructions}\n </p>\n </div>\n )}\n\n {/* Delivery note */}\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <StickyNote className=\"h-4 w-4 text-text-secondary\" />\n Delivery note\n </h3>\n <textarea\n value={notes}\n onChange={(e) => {\n setNotes(e.target.value);\n setNotesSaved(false);\n }}\n placeholder=\"Add a delivery note...\"\n rows={3}\n className=\"w-full resize-none rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-border-focus/40\"\n />\n <div className=\"mt-3 flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleSaveNotes}\n disabled={updateNotes.isPending}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-default bg-bg-surface px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken transition-colors disabled:opacity-50\"\n >\n {updateNotes.isPending ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <StickyNote className=\"h-3.5 w-3.5\" />\n )}\n {updateNotes.isPending ? 'Saving...' : 'Save note'}\n </button>\n {notesSaved && !updateNotes.isPending && (\n <span className=\"text-xs text-status-success-text\">Note saved</span>\n )}\n {updateNotes.isError && (\n <span className=\"text-xs text-status-error-text\">Couldn&apos;t save — retry</span>\n )}\n </div>\n </GlassCard>\n\n {/* Primary CTA */}\n <button\n type=\"button\"\n onClick={handleAdvanceStatus}\n disabled={!advanceable || updateStatus.isPending}\n className={cn(\n 'w-full inline-flex items-center justify-center gap-2 rounded-[var(--radius-card)] px-4 py-3.5 text-base font-semibold transition-colors',\n !advanceable\n ? task.status === 'completed'\n ? 'bg-status-success-bg-subtle text-status-success-text cursor-default'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-60'\n )}\n >\n {updateStatus.isPending ? (\n <Loader2 className=\"h-5 w-5 animate-spin\" />\n ) : task.status === 'blocked' || task.status === 'cancelled' ? (\n <AlertTriangle className=\"h-5 w-5\" />\n ) : (\n <CheckCircle2 className=\"h-5 w-5\" />\n )}\n {ctaLabel}\n </button>\n {task.status === 'blocked' && (\n <p className=\"-mt-4 text-xs text-text-secondary\">\n This task is blocked. Ask the cart owner to unblock it before continuing.\n </p>\n )}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Delivery timeline</h3>\n <Timeline items={timeline} />\n </GlassCard>\n\n <GlassCard className=\"p-5\">\n <h3 className=\"mb-3 text-sm font-semibold text-text-primary\">Job details</h3>\n <dl className=\"space-y-3 text-sm\">\n {orderRef && (\n <div className=\"flex items-center gap-2\">\n <FileText className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Order</dt>\n <dd className=\"font-mono font-medium text-text-primary\">{orderRef}</dd>\n </div>\n </div>\n )}\n {task.customerInfo.name && (\n <div className=\"flex items-center gap-2\">\n <User className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Customer</dt>\n <dd className=\"font-medium text-text-primary\">{task.customerInfo.name}</dd>\n </div>\n </div>\n )}\n {task.distance != null && (\n <div className=\"flex items-center gap-2\">\n <Navigation className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Distance</dt>\n <dd className=\"font-medium text-text-primary\">{task.distance} km</dd>\n </div>\n </div>\n )}\n {task.assignedTime && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary shrink-0\" />\n <div>\n <dt className=\"text-xs text-text-secondary\">Assigned</dt>\n <dd className=\"font-medium text-text-primary\">\n {formatDate(task.assignedTime)}\n </dd>\n </div>\n </div>\n )}\n </dl>\n </GlassCard>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -108,6 +108,13 @@ export interface BusinessDayHours {
108
108
  close: string;
109
109
  isOpen: boolean;
110
110
  }
111
+ /**
112
+ * Lifecycle status of a service provider (cart), mirroring the service's
113
+ * `KadaikodiProviderStatus` enum exactly. Values arrive uppercase from the
114
+ * resolver; `normalizeProviderStatus` in the API layer is the only place that
115
+ * widens an unrecognised value.
116
+ */
117
+ export type ProviderLifecycleStatus = 'DRAFT' | 'ACTIVE' | 'VERIFIED' | 'PAUSED' | 'SUSPENDED' | 'ARCHIVED';
111
118
  /**
112
119
  * A service provider (cart) on the platform
113
120
  */
@@ -129,6 +136,13 @@ export interface MockCart {
129
136
  images?: string[];
130
137
  isOpen: boolean;
131
138
  isVerified?: boolean;
139
+ /**
140
+ * Raw `KadaikodiServiceProvider.status` enum value as the service stores it
141
+ * (DRAFT | ACTIVE | VERIFIED | PAUSED | SUSPENDED | ARCHIVED). `isOpen` and
142
+ * `isVerified` are lossy derivations of this — admin surfaces that must tell
143
+ * a suspended cart from an archived or paused one read `status` directly.
144
+ */
145
+ status?: ProviderLifecycleStatus;
132
146
  location: {
133
147
  address: string;
134
148
  coordinates: {
@@ -152,7 +166,7 @@ export type OrderStatus = 'pending' | 'confirmed' | 'preparing' | 'ready' | 'pic
152
166
  /**
153
167
  * Payment status for an order
154
168
  */
155
- export type PaymentStatus = 'pending' | 'completed' | 'failed' | 'refunded';
169
+ export type PaymentStatus = 'pending' | 'processing' | 'paid' | 'failed' | 'refunded';
156
170
  /**
157
171
  * An item within an order
158
172
  */
@@ -342,6 +356,14 @@ export interface AdminAnalytics {
342
356
  total: number;
343
357
  status: string;
344
358
  createdAt: string;
359
+ /**
360
+ * Ships in the payload today — `adminAnalytics` selects `customerId` on
361
+ * every row and `orderTrends` is an opaque JSON scalar, so the field
362
+ * arrives over the wire whether or not the client names it. It is the only
363
+ * per-customer signal in this query and is what makes a real customer-growth
364
+ * series derivable (`customerGrowth` itself is a bare total).
365
+ */
366
+ customerId?: string | null;
345
367
  }>;
346
368
  topProviders: Array<{
347
369
  id: string;
@@ -361,7 +383,26 @@ export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
361
383
  /**
362
384
  * Task status in the worker workflow
363
385
  */
364
- export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled';
386
+ export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled' | 'blocked';
387
+ /**
388
+ * The slice of the task's parent order a worker is allowed to see.
389
+ *
390
+ * Sourced from `KadaikodiWorkerTask.order`, whose resolver (`getOrder`) admits
391
+ * the worker the task is assigned to, so every field here is really readable by
392
+ * the signed-in worker — it is not a merchant-only projection.
393
+ */
394
+ export interface WorkerTaskOrderSummary {
395
+ id: string;
396
+ /** Human-readable order reference (e.g. "ORD-1042"), not the UUID. */
397
+ orderNumber: string;
398
+ total: number;
399
+ paymentStatus: PaymentStatus;
400
+ items: Array<{
401
+ id: string;
402
+ name: string;
403
+ quantity: number;
404
+ }>;
405
+ }
365
406
  /**
366
407
  * A task assigned to a worker
367
408
  */
@@ -386,8 +427,11 @@ export interface WorkerTask {
386
427
  title?: string;
387
428
  estimatedTime?: number;
388
429
  dueTime?: string;
430
+ /** Pickup address — the assigned provider's own `location.address`. */
389
431
  location?: string;
390
432
  assignedBy?: string;
433
+ /** Parent order (items, total, payment state) when the task carries an orderId. */
434
+ order?: WorkerTaskOrderSummary;
391
435
  }
392
436
  /**
393
437
  * A scheduled shift for a worker
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kadaikodi/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kadaikodi/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function useTr(): (key: string, fallback: string, params?: Record<string, string | number>) => string;
2
+ //# sourceMappingURL=useTr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTr.d.ts","sourceRoot":"","sources":["../../../src/shared/hooks/useTr.ts"],"names":[],"mappings":"AAkBA,wBAAgB,KAAK,IAAI,CACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KACrC,MAAM,CAcV"}
@@ -0,0 +1,14 @@
1
+ import { useCallback as e } from "react";
2
+ import { useI18n as t } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
+ //#region src/shared/hooks/useTr.ts
4
+ function n() {
5
+ let { t: n } = t();
6
+ return e((e, t, r) => {
7
+ let i = n(e), a = i === e ? t : i;
8
+ return r ? Object.entries(r).reduce((e, [t, n]) => e.replace(RegExp(`\\{\\{${t}\\}\\}`, "g"), String(n)), a) : a;
9
+ }, [n]);
10
+ }
11
+ //#endregion
12
+ export { n as useTr };
13
+
14
+ //# sourceMappingURL=useTr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTr.js","names":[],"sources":["../../../src/shared/hooks/useTr.ts"],"sourcesContent":["/**\n * useTr — translation hook with fallback semantics.\n *\n * Wraps `useI18n().t()` so that when a key has no translation (i.e. the\n * provider returns the key itself), the caller's English fallback is used\n * instead. This keeps consumer call sites consistent and avoids leaking\n * untranslated keys into the UI.\n *\n * Supports optional interpolation params using `{{key}}` placeholders.\n *\n * @example\n * const tr = useTr();\n * return <h1>{tr('kadaikodi.dashboard.title', 'Dashboard')}</h1>;\n * return <p>{tr('kadaikodi.delete.confirm', 'Delete {{count}} items?', { count: 5 })}</p>;\n */\nimport { useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\nexport function useTr(): (\n key: string,\n fallback: string,\n params?: Record<string, string | number>\n) => string {\n const { t } = useI18n();\n return useCallback(\n (key: string, fallback: string, params?: Record<string, string | number>): string => {\n const translated = t(key);\n const raw = translated === key ? fallback : translated;\n if (!params) return raw;\n return Object.entries(params).reduce(\n (str, [k, v]) => str.replace(new RegExp(`\\\\{\\\\{${k}\\\\}\\\\}`, 'g'), String(v)),\n raw\n );\n },\n [t]\n );\n}\n"],"mappings":";;;AAkBA,SAAgB,IAIJ;CACV,IAAM,EAAE,SAAM,GAAS;AACvB,QAAO,GACJ,GAAa,GAAkB,MAAqD;EACnF,IAAM,IAAa,EAAE,EAAI,EACnB,IAAM,MAAe,IAAM,IAAW;AAE5C,SADK,IACE,OAAO,QAAQ,EAAO,CAAC,QAC3B,GAAK,CAAC,GAAG,OAAO,EAAI,QAAY,OAAO,SAAS,EAAE,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,EAC5E,EACD,GAJmB;IAMtB,CAAC,EAAE,CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-kadaikodi",
3
- "version": "2026.802.1",
3
+ "version": "2026.830.1",
4
4
  "description": "Burdenoff Kadaikodi Microfrontend - Mobile services marketplace platform for connecting service providers with customers",
5
5
  "type": "module",
6
6
  "files": [
@@ -101,7 +101,7 @@
101
101
  "zustand": "^5.0.0"
102
102
  },
103
103
  "publishConfig": {
104
- "access": "restricted"
104
+ "access": "public"
105
105
  },
106
106
  "overrides": {
107
107
  "lodash": ">=4.17.21",