@burdenoff/microfe-adaptercloud 2026.614.1 → 2026.624.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.
- package/dist/adaptercloud/components/EmptyState.js +3 -3
- package/dist/adaptercloud/components/EmptyState.js.map +1 -1
- package/dist/adaptercloud/components/InvestmentCard.js +9 -9
- package/dist/adaptercloud/components/InvestmentCard.js.map +1 -1
- package/dist/adaptercloud/components/MetricsCard.js +5 -5
- package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
- package/dist/adaptercloud/components/PageLayout.js +3 -3
- package/dist/adaptercloud/components/PageLayout.js.map +1 -1
- package/dist/adaptercloud/components/RatingDisplay.js +3 -3
- package/dist/adaptercloud/components/RatingDisplay.js.map +1 -1
- package/dist/adaptercloud/components/StatusBadge.js +2 -2
- package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
- package/dist/adaptercloud/pages/HomePage.js +54 -54
- package/dist/adaptercloud/pages/HomePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +60 -60
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +77 -77
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +43 -43
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +85 -85
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +34 -34
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +40 -40
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +86 -86
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +80 -80
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +100 -100
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +29 -29
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +81 -81
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +100 -100
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +67 -67
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +94 -94
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +57 -57
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +75 -75
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +102 -102
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +35 -35
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/SettingsPage.js +109 -109
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +60 -60
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +71 -71
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +54 -54
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +75 -75
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +69 -69
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +72 -72
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +75 -75
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +30 -30
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +41 -41
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +53 -53
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +51 -51
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +33 -33
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +33 -33
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +108 -108
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +76 -76
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +69 -69
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +53 -53
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +32 -32
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +55 -55
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +138 -138
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +65 -65
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +74 -74
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +49 -49
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +92 -92
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +55 -55
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/dist/adaptercloud/utils/cn.js +2 -2
- package/dist/node_modules/{.bun/clsx@2.1.1/node_modules/clsx → clsx}/dist/clsx.js +1 -1
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/{.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge → tailwind-merge}/dist/bundle-mjs.js +212 -170
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +1 -1
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
|
@@ -53,7 +53,7 @@ function A() {
|
|
|
53
53
|
children: /* @__PURE__ */ T("div", {
|
|
54
54
|
className: "flex flex-col items-center justify-center py-16 text-center",
|
|
55
55
|
children: [/* @__PURE__ */ w("div", { className: "animate-spin rounded-full h-12 w-12 border-b-2 border-foreground mx-auto mb-4" }), /* @__PURE__ */ w("p", {
|
|
56
|
-
className: "text-sm text-
|
|
56
|
+
className: "text-sm text-text-secondary",
|
|
57
57
|
children: "Loading order details..."
|
|
58
58
|
})]
|
|
59
59
|
})
|
|
@@ -79,7 +79,7 @@ function A() {
|
|
|
79
79
|
children: [/* @__PURE__ */ w("button", {
|
|
80
80
|
type: "button",
|
|
81
81
|
onClick: () => _("/customer/orders"),
|
|
82
|
-
className: "rounded-md p-1 text-
|
|
82
|
+
className: "rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
|
|
83
83
|
children: /* @__PURE__ */ w(u, { className: "h-5 w-5" })
|
|
84
84
|
}), /* @__PURE__ */ w("span", { children: "Track Order" })]
|
|
85
85
|
}),
|
|
@@ -90,42 +90,42 @@ function A() {
|
|
|
90
90
|
className: "lg:col-span-2 space-y-6",
|
|
91
91
|
children: [
|
|
92
92
|
/* @__PURE__ */ T("div", {
|
|
93
|
-
className: "rounded-lg border border-border bg-
|
|
93
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
94
94
|
children: [/* @__PURE__ */ T("div", {
|
|
95
95
|
className: "flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3",
|
|
96
96
|
children: [/* @__PURE__ */ T("div", {
|
|
97
97
|
className: "flex-1",
|
|
98
98
|
children: [
|
|
99
99
|
/* @__PURE__ */ T("h2", {
|
|
100
|
-
className: "text-lg font-semibold text-
|
|
100
|
+
className: "text-lg font-semibold text-text-primary",
|
|
101
101
|
children: ["Order #", j.id]
|
|
102
102
|
}),
|
|
103
103
|
/* @__PURE__ */ w("p", {
|
|
104
|
-
className: "text-sm text-
|
|
104
|
+
className: "text-sm text-text-secondary",
|
|
105
105
|
children: j.cartName
|
|
106
106
|
}),
|
|
107
107
|
/* @__PURE__ */ w("p", {
|
|
108
|
-
className: "text-xs text-
|
|
108
|
+
className: "text-xs text-text-secondary mt-0.5",
|
|
109
109
|
children: o(j.orderDate)
|
|
110
110
|
})
|
|
111
111
|
]
|
|
112
112
|
}), /* @__PURE__ */ T("div", {
|
|
113
113
|
className: "text-left sm:text-right",
|
|
114
114
|
children: [/* @__PURE__ */ w("p", {
|
|
115
|
-
className: "text-xl font-bold text-
|
|
115
|
+
className: "text-xl font-bold text-text-primary",
|
|
116
116
|
children: a(j.total, { minimumFractionDigits: 0 })
|
|
117
117
|
}), /* @__PURE__ */ w("p", {
|
|
118
|
-
className: "text-xs text-
|
|
118
|
+
className: "text-xs text-text-secondary uppercase",
|
|
119
119
|
children: j.paymentMethod
|
|
120
120
|
})]
|
|
121
121
|
})]
|
|
122
122
|
}), N ? /* @__PURE__ */ T("div", {
|
|
123
|
-
className: "mt-4 flex items-start gap-3 rounded-lg bg-
|
|
124
|
-
children: [/* @__PURE__ */ w(S, { className: "h-5 w-5 text-
|
|
125
|
-
className: "font-medium text-
|
|
123
|
+
className: "mt-4 flex items-start gap-3 rounded-lg bg-status-error-bg/10 p-4 border border-status-error-border/20",
|
|
124
|
+
children: [/* @__PURE__ */ w(S, { className: "h-5 w-5 text-status-error-text mt-0.5 shrink-0" }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
125
|
+
className: "font-medium text-status-error-text",
|
|
126
126
|
children: "Order Cancelled"
|
|
127
127
|
}), j.cancellationReason && /* @__PURE__ */ w("p", {
|
|
128
|
-
className: "text-sm text-
|
|
128
|
+
className: "text-sm text-status-error-text/80 mt-0.5",
|
|
129
129
|
children: j.cancellationReason
|
|
130
130
|
})] })]
|
|
131
131
|
}) : /* @__PURE__ */ T("div", {
|
|
@@ -137,9 +137,9 @@ function A() {
|
|
|
137
137
|
})]
|
|
138
138
|
}),
|
|
139
139
|
!N && /* @__PURE__ */ T("div", {
|
|
140
|
-
className: "rounded-lg border border-border bg-
|
|
140
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
141
141
|
children: [/* @__PURE__ */ w("h3", {
|
|
142
|
-
className: "text-base font-semibold text-
|
|
142
|
+
className: "text-base font-semibold text-text-primary mb-5",
|
|
143
143
|
children: "Order Status"
|
|
144
144
|
}), /* @__PURE__ */ w("div", {
|
|
145
145
|
className: "relative space-y-0",
|
|
@@ -150,18 +150,18 @@ function A() {
|
|
|
150
150
|
children: [
|
|
151
151
|
!a && /* @__PURE__ */ w("div", { className: t("absolute left-5 top-10 w-0.5 h-8 z-0", r ? "bg-green-500" : "bg-border") }),
|
|
152
152
|
/* @__PURE__ */ w("div", {
|
|
153
|
-
className: t("relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full", r ? "bg-green-500/10 border-2 border-green-500 text-green-600 dark:text-green-400" : "bg-
|
|
153
|
+
className: t("relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full", r ? "bg-green-500/10 border-2 border-green-500 text-green-600 dark:text-green-400" : "bg-bg-sunken border-2 border-border-subtle text-text-secondary", i && "ring-4 ring-green-500/20"),
|
|
154
154
|
children: /* @__PURE__ */ w(o, { className: "h-4 w-4" })
|
|
155
155
|
}),
|
|
156
156
|
/* @__PURE__ */ T("div", {
|
|
157
157
|
className: "ml-4 flex-1 pb-8",
|
|
158
158
|
children: [
|
|
159
159
|
/* @__PURE__ */ w("h4", {
|
|
160
|
-
className: t("text-sm font-semibold", r ? "text-
|
|
160
|
+
className: t("text-sm font-semibold", r ? "text-text-primary" : "text-text-secondary"),
|
|
161
161
|
children: O[e]
|
|
162
162
|
}),
|
|
163
163
|
/* @__PURE__ */ w("p", {
|
|
164
|
-
className: t("text-xs", r ? "text-
|
|
164
|
+
className: t("text-xs", r ? "text-text-secondary" : "text-text-secondary/50"),
|
|
165
165
|
children: k[e]
|
|
166
166
|
}),
|
|
167
167
|
i && j.assignedWorker && /* @__PURE__ */ T("div", {
|
|
@@ -176,29 +176,29 @@ function A() {
|
|
|
176
176
|
})]
|
|
177
177
|
}),
|
|
178
178
|
/* @__PURE__ */ T("div", {
|
|
179
|
-
className: "rounded-lg border border-border bg-
|
|
179
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
180
180
|
children: [
|
|
181
181
|
/* @__PURE__ */ w("h3", {
|
|
182
|
-
className: "text-base font-semibold text-
|
|
182
|
+
className: "text-base font-semibold text-text-primary mb-3",
|
|
183
183
|
children: "Order Items"
|
|
184
184
|
}),
|
|
185
185
|
/* @__PURE__ */ w("div", {
|
|
186
186
|
className: "space-y-2",
|
|
187
187
|
children: j.items.map((e, t) => /* @__PURE__ */ T("div", {
|
|
188
|
-
className: "flex justify-between items-start pb-2 border-b border-border last:border-b-0",
|
|
188
|
+
className: "flex justify-between items-start pb-2 border-b border-border-subtle last:border-b-0",
|
|
189
189
|
children: [/* @__PURE__ */ T("div", {
|
|
190
190
|
className: "flex-1 pr-2",
|
|
191
191
|
children: [
|
|
192
192
|
/* @__PURE__ */ w("p", {
|
|
193
|
-
className: "text-sm font-medium text-
|
|
193
|
+
className: "text-sm font-medium text-text-primary",
|
|
194
194
|
children: e.name
|
|
195
195
|
}),
|
|
196
196
|
e.customizations && e.customizations.length > 0 && /* @__PURE__ */ w("p", {
|
|
197
|
-
className: "text-xs text-
|
|
197
|
+
className: "text-xs text-text-secondary",
|
|
198
198
|
children: e.customizations.join(", ")
|
|
199
199
|
}),
|
|
200
200
|
/* @__PURE__ */ T("p", {
|
|
201
|
-
className: "text-xs text-
|
|
201
|
+
className: "text-xs text-text-secondary",
|
|
202
202
|
children: [
|
|
203
203
|
a(e.price, { minimumFractionDigits: 0 }),
|
|
204
204
|
" x ",
|
|
@@ -207,24 +207,24 @@ function A() {
|
|
|
207
207
|
})
|
|
208
208
|
]
|
|
209
209
|
}), /* @__PURE__ */ w("p", {
|
|
210
|
-
className: "text-sm font-medium text-
|
|
210
|
+
className: "text-sm font-medium text-text-primary",
|
|
211
211
|
children: a(e.price * e.quantity, { minimumFractionDigits: 0 })
|
|
212
212
|
})]
|
|
213
213
|
}, t))
|
|
214
214
|
}),
|
|
215
215
|
/* @__PURE__ */ T("div", {
|
|
216
|
-
className: "mt-4 pt-4 border-t border-border space-y-2 text-sm",
|
|
216
|
+
className: "mt-4 pt-4 border-t border-border-subtle space-y-2 text-sm",
|
|
217
217
|
children: [
|
|
218
218
|
/* @__PURE__ */ T("div", {
|
|
219
|
-
className: "flex justify-between text-
|
|
219
|
+
className: "flex justify-between text-text-secondary",
|
|
220
220
|
children: [/* @__PURE__ */ w("span", { children: "Subtotal" }), /* @__PURE__ */ w("span", { children: a(j.subtotal, { minimumFractionDigits: 0 }) })]
|
|
221
221
|
}),
|
|
222
222
|
/* @__PURE__ */ T("div", {
|
|
223
|
-
className: "flex justify-between text-
|
|
223
|
+
className: "flex justify-between text-text-secondary",
|
|
224
224
|
children: [/* @__PURE__ */ w("span", { children: "Delivery Fee" }), /* @__PURE__ */ w("span", { children: j.deliveryFee === 0 ? "FREE" : a(j.deliveryFee, { minimumFractionDigits: 0 }) })]
|
|
225
225
|
}),
|
|
226
226
|
/* @__PURE__ */ T("div", {
|
|
227
|
-
className: "flex justify-between text-
|
|
227
|
+
className: "flex justify-between text-text-secondary",
|
|
228
228
|
children: [/* @__PURE__ */ w("span", { children: "Tax" }), /* @__PURE__ */ w("span", { children: a(j.taxes, { minimumFractionDigits: 0 }) })]
|
|
229
229
|
}),
|
|
230
230
|
j.discount && j.discount > 0 && /* @__PURE__ */ T("div", {
|
|
@@ -232,7 +232,7 @@ function A() {
|
|
|
232
232
|
children: [/* @__PURE__ */ w("span", { children: "Discount" }), /* @__PURE__ */ T("span", { children: ["-", a(j.discount, { minimumFractionDigits: 0 })] })]
|
|
233
233
|
}),
|
|
234
234
|
/* @__PURE__ */ T("div", {
|
|
235
|
-
className: "flex justify-between font-semibold pt-2 border-t border-border text-
|
|
235
|
+
className: "flex justify-between font-semibold pt-2 border-t border-border-subtle text-text-primary",
|
|
236
236
|
children: [/* @__PURE__ */ w("span", { children: "Total" }), /* @__PURE__ */ w("span", { children: a(j.total, { minimumFractionDigits: 0 }) })]
|
|
237
237
|
})
|
|
238
238
|
]
|
|
@@ -244,30 +244,30 @@ function A() {
|
|
|
244
244
|
className: "lg:col-span-1 space-y-6",
|
|
245
245
|
children: [
|
|
246
246
|
/* @__PURE__ */ T("div", {
|
|
247
|
-
className: "rounded-lg border border-border bg-
|
|
247
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
248
248
|
children: [/* @__PURE__ */ w("h3", {
|
|
249
|
-
className: "text-base font-semibold text-
|
|
249
|
+
className: "text-base font-semibold text-text-primary mb-3",
|
|
250
250
|
children: "Delivery Details"
|
|
251
251
|
}), /* @__PURE__ */ T("div", {
|
|
252
252
|
className: "space-y-3",
|
|
253
253
|
children: [
|
|
254
254
|
/* @__PURE__ */ T("div", {
|
|
255
255
|
className: "flex items-start gap-2",
|
|
256
|
-
children: [/* @__PURE__ */ w(h, { className: "mt-0.5 h-4 w-4 shrink-0 text-
|
|
256
|
+
children: [/* @__PURE__ */ w(h, { className: "mt-0.5 h-4 w-4 shrink-0 text-text-secondary" }), /* @__PURE__ */ T("div", { children: [
|
|
257
257
|
/* @__PURE__ */ w("p", {
|
|
258
|
-
className: "text-xs text-
|
|
258
|
+
className: "text-xs text-text-secondary",
|
|
259
259
|
children: "Delivery Address"
|
|
260
260
|
}),
|
|
261
261
|
/* @__PURE__ */ w("p", {
|
|
262
|
-
className: "text-sm font-medium text-
|
|
262
|
+
className: "text-sm font-medium text-text-primary",
|
|
263
263
|
children: j.deliveryAddress.street
|
|
264
264
|
}),
|
|
265
265
|
/* @__PURE__ */ w("p", {
|
|
266
|
-
className: "text-sm text-
|
|
266
|
+
className: "text-sm text-text-secondary",
|
|
267
267
|
children: j.deliveryAddress.area
|
|
268
268
|
}),
|
|
269
269
|
/* @__PURE__ */ T("p", {
|
|
270
|
-
className: "text-sm text-
|
|
270
|
+
className: "text-sm text-text-secondary",
|
|
271
271
|
children: [
|
|
272
272
|
j.deliveryAddress.city,
|
|
273
273
|
", ",
|
|
@@ -275,29 +275,29 @@ function A() {
|
|
|
275
275
|
]
|
|
276
276
|
}),
|
|
277
277
|
j.deliveryAddress.landmark && /* @__PURE__ */ T("p", {
|
|
278
|
-
className: "text-xs text-
|
|
278
|
+
className: "text-xs text-text-secondary mt-0.5",
|
|
279
279
|
children: ["Landmark: ", j.deliveryAddress.landmark]
|
|
280
280
|
})
|
|
281
281
|
] })]
|
|
282
282
|
}),
|
|
283
283
|
j.customerNotes && /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
284
|
-
className: "text-xs text-
|
|
284
|
+
className: "text-xs text-text-secondary",
|
|
285
285
|
children: "Customer Notes"
|
|
286
286
|
}), /* @__PURE__ */ w("p", {
|
|
287
|
-
className: "text-sm text-
|
|
287
|
+
className: "text-sm text-text-primary",
|
|
288
288
|
children: j.customerNotes
|
|
289
289
|
})] }),
|
|
290
290
|
/* @__PURE__ */ T("div", { children: [
|
|
291
291
|
/* @__PURE__ */ w("p", {
|
|
292
|
-
className: "text-xs text-
|
|
292
|
+
className: "text-xs text-text-secondary",
|
|
293
293
|
children: "Payment Method"
|
|
294
294
|
}),
|
|
295
295
|
/* @__PURE__ */ w("p", {
|
|
296
|
-
className: "text-sm font-medium text-
|
|
296
|
+
className: "text-sm font-medium text-text-primary capitalize",
|
|
297
297
|
children: j.paymentMethod
|
|
298
298
|
}),
|
|
299
299
|
/* @__PURE__ */ w("p", {
|
|
300
|
-
className: "text-xs text-
|
|
300
|
+
className: "text-xs text-text-secondary",
|
|
301
301
|
children: j.paymentStatus === "completed" ? "Paid" : "Payment Pending"
|
|
302
302
|
})
|
|
303
303
|
] })
|
|
@@ -305,9 +305,9 @@ function A() {
|
|
|
305
305
|
})]
|
|
306
306
|
}),
|
|
307
307
|
j.assignedWorker && /* @__PURE__ */ T("div", {
|
|
308
|
-
className: "rounded-lg border border-border bg-
|
|
308
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
309
309
|
children: [/* @__PURE__ */ w("h3", {
|
|
310
|
-
className: "text-base font-semibold text-
|
|
310
|
+
className: "text-base font-semibold text-text-primary mb-3",
|
|
311
311
|
children: "Delivery Partner"
|
|
312
312
|
}), /* @__PURE__ */ T("div", {
|
|
313
313
|
className: "space-y-3",
|
|
@@ -315,7 +315,7 @@ function A() {
|
|
|
315
315
|
className: "flex items-center gap-3",
|
|
316
316
|
children: [
|
|
317
317
|
/* @__PURE__ */ w("div", {
|
|
318
|
-
className: "flex h-10 w-10 items-center justify-center rounded-full bg-
|
|
318
|
+
className: "flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary",
|
|
319
319
|
children: /* @__PURE__ */ w("span", {
|
|
320
320
|
className: "text-sm font-semibold",
|
|
321
321
|
children: j.assignedWorker.name.charAt(0)
|
|
@@ -324,34 +324,34 @@ function A() {
|
|
|
324
324
|
/* @__PURE__ */ T("div", {
|
|
325
325
|
className: "flex-1 min-w-0",
|
|
326
326
|
children: [/* @__PURE__ */ w("p", {
|
|
327
|
-
className: "text-sm font-medium text-
|
|
327
|
+
className: "text-sm font-medium text-text-primary",
|
|
328
328
|
children: j.assignedWorker.name
|
|
329
329
|
}), /* @__PURE__ */ T("div", {
|
|
330
330
|
className: "flex items-center gap-1.5 mt-0.5",
|
|
331
331
|
children: [/* @__PURE__ */ w(b, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }), /* @__PURE__ */ T("span", {
|
|
332
|
-
className: "text-xs text-
|
|
332
|
+
className: "text-xs text-text-secondary",
|
|
333
333
|
children: [j.assignedWorker.rating, "/5"]
|
|
334
334
|
})]
|
|
335
335
|
})]
|
|
336
336
|
}),
|
|
337
337
|
/* @__PURE__ */ w("a", {
|
|
338
338
|
href: `tel:${j.assignedWorker.phone}`,
|
|
339
|
-
className: "flex h-9 w-9 items-center justify-center rounded-full bg-
|
|
339
|
+
className: "flex h-9 w-9 items-center justify-center rounded-full bg-bg-sunken text-text-secondary hover:bg-accent hover:text-text-primary transition-colors",
|
|
340
340
|
children: /* @__PURE__ */ w(v, { className: "h-4 w-4" })
|
|
341
341
|
})
|
|
342
342
|
]
|
|
343
343
|
}), /* @__PURE__ */ T("button", {
|
|
344
344
|
type: "button",
|
|
345
345
|
onClick: () => window.location.href = `tel:${j.assignedWorker.phone}`,
|
|
346
|
-
className: "w-full flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2.5 text-sm font-medium text-
|
|
346
|
+
className: "w-full flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
347
347
|
children: [/* @__PURE__ */ w(v, { className: "h-4 w-4" }), "Call Driver"]
|
|
348
348
|
})]
|
|
349
349
|
})]
|
|
350
350
|
}),
|
|
351
351
|
/* @__PURE__ */ T("div", {
|
|
352
|
-
className: "rounded-lg border border-border bg-
|
|
352
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
|
|
353
353
|
children: [/* @__PURE__ */ w("h3", {
|
|
354
|
-
className: "text-base font-semibold text-
|
|
354
|
+
className: "text-base font-semibold text-text-primary mb-3",
|
|
355
355
|
children: "Need Help?"
|
|
356
356
|
}), /* @__PURE__ */ T("div", {
|
|
357
357
|
className: "space-y-2",
|
|
@@ -359,13 +359,13 @@ function A() {
|
|
|
359
359
|
/* @__PURE__ */ T("button", {
|
|
360
360
|
type: "button",
|
|
361
361
|
onClick: () => alert("Chat support coming soon!"),
|
|
362
|
-
className: "w-full flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2.5 text-sm font-medium text-
|
|
362
|
+
className: "w-full flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
363
363
|
children: [/* @__PURE__ */ w(g, { className: "h-4 w-4" }), "Chat Support"]
|
|
364
364
|
}),
|
|
365
365
|
/* @__PURE__ */ T("button", {
|
|
366
366
|
type: "button",
|
|
367
367
|
onClick: () => window.location.href = "tel:7012270561",
|
|
368
|
-
className: "w-full flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2.5 text-sm font-medium text-
|
|
368
|
+
className: "w-full flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
369
369
|
children: [/* @__PURE__ */ w(v, { className: "h-4 w-4" }), "Call Support"]
|
|
370
370
|
}),
|
|
371
371
|
P && !j.rating && /* @__PURE__ */ T("button", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderTrackingPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/OrderTrackingPage.tsx"],"sourcesContent":["/**\n * Order Tracking Page\n * @module adaptercloud/pages/customer\n *\n * Real-time order tracking with status timeline, delivery partner info,\n * price breakdown, Need Help sidebar, and rate order functionality.\n */\n\nimport { useState, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n CheckCircle2,\n Circle,\n Clock,\n MapPin,\n Phone,\n Star,\n Package,\n Truck,\n ChefHat,\n ShoppingBag,\n XCircle,\n MessageCircle,\n AlertTriangle,\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 { getOrderById } from '../../mocks/data';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { OrderStatus } from '../../types';\n\nconst statusIcons: Record<string, typeof Package> = {\n pending: Clock,\n confirmed: CheckCircle2,\n preparing: ChefHat,\n ready: Package,\n picked_up: Package,\n out_for_delivery: Truck,\n delivered: CheckCircle2,\n cancelled: XCircle,\n};\n\nconst statusOrder: OrderStatus[] = [\n 'pending',\n 'confirmed',\n 'preparing',\n 'ready',\n 'out_for_delivery',\n 'delivered',\n];\n\nconst statusLabels: Record<string, string> = {\n pending: 'Order Placed',\n confirmed: 'Confirmed',\n preparing: 'Preparing',\n ready: 'Ready',\n out_for_delivery: 'Out for Delivery',\n delivered: 'Delivered',\n};\n\nconst statusDescriptions: Record<string, string> = {\n pending: 'Your order has been received',\n confirmed: 'Cart has accepted your order',\n preparing: 'Your food is being prepared',\n ready: 'Order is ready for pickup/delivery',\n out_for_delivery: 'Your order is on the way',\n delivered: 'Order has been delivered',\n};\n\nexport function OrderTrackingPage() {\n const { orderId } = useParams<{ orderId: string }>();\n const { navigateTo } = useAdapterCloud();\n const [isLoading, setIsLoading] = useState(true);\n\n // Simulate loading\n useMemo(() => {\n const timer = setTimeout(() => setIsLoading(false), 800);\n return () => clearTimeout(timer);\n }, []);\n\n const order = useMemo(() => (orderId ? getOrderById(orderId) : undefined), [orderId]);\n\n if (isLoading) {\n return (\n <PageLayout title=\"Track Order\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-foreground mx-auto mb-4\" />\n <p className=\"text-sm text-muted-foreground\">Loading order details...</p>\n </div>\n </PageLayout>\n );\n }\n\n if (!order) {\n return (\n <PageLayout title=\"Order Not Found\">\n <EmptyState\n icon={<ShoppingBag className=\"h-12 w-12\" />}\n title=\"Order not found\"\n description={`The order you're looking for doesn't exist.`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n View All Orders\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const currentStatusIndex = statusOrder.indexOf(order.status);\n const isCancelled = order.status === 'cancelled';\n const isDelivered = order.status === 'delivered';\n\n const isStepCompleted = (stepStatus: string): boolean => {\n const stepIndex = statusOrder.indexOf(stepStatus as OrderStatus);\n return stepIndex <= currentStatusIndex;\n };\n\n const isCurrentStep = (stepStatus: string): boolean => {\n return stepStatus === order.status;\n };\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"rounded-md p-1 text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span>Track Order</span>\n </div>\n }\n actions={<StatusBadge status={order.status} />}\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Left: Order Details & Timeline */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Order Header */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <div className=\"flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3\">\n <div className=\"flex-1\">\n <h2 className=\"text-lg font-semibold text-foreground\">Order #{order.id}</h2>\n <p className=\"text-sm text-muted-foreground\">{order.cartName}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n {formatDate(order.orderDate)}\n </p>\n </div>\n <div className=\"text-left sm:text-right\">\n <p className=\"text-xl font-bold text-foreground\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"text-xs text-muted-foreground uppercase\">{order.paymentMethod}</p>\n </div>\n </div>\n\n {/* Status Banner */}\n {isCancelled ? (\n <div className=\"mt-4 flex items-start gap-3 rounded-lg bg-destructive/10 p-4 border border-destructive/20\">\n <XCircle className=\"h-5 w-5 text-destructive mt-0.5 shrink-0\" />\n <div>\n <p className=\"font-medium text-destructive\">Order Cancelled</p>\n {order.cancellationReason && (\n <p className=\"text-sm text-destructive/80 mt-0.5\">{order.cancellationReason}</p>\n )}\n </div>\n </div>\n ) : (\n <div\n className={cn(\n 'mt-4 flex items-start gap-3 rounded-lg p-4 border',\n isDelivered\n ? 'bg-green-500/10 border-green-500/20'\n : 'bg-blue-500/10 border-blue-500/20'\n )}\n >\n {isDelivered ? (\n <CheckCircle2 className=\"h-5 w-5 text-green-600 dark:text-green-400 mt-0.5 shrink-0\" />\n ) : (\n <Clock className=\"h-5 w-5 text-blue-600 dark:text-blue-400 mt-0.5 shrink-0\" />\n )}\n <p\n className={cn(\n 'text-sm font-medium',\n isDelivered\n ? 'text-green-600 dark:text-green-400'\n : 'text-blue-600 dark:text-blue-400'\n )}\n >\n {isDelivered\n ? `Delivered at ${formatDate(order.actualDeliveryTime!)}`\n : order.estimatedDeliveryTime\n ? `Estimated delivery by ${formatDate(order.estimatedDeliveryTime)}`\n : 'Estimated delivery time: TBD'}\n </p>\n </div>\n )}\n </div>\n\n {/* Tracking Progress Timeline */}\n {!isCancelled && (\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-5\">Order Status</h3>\n <div className=\"relative space-y-0\">\n {statusOrder.map((stepStatus, index) => {\n const completed = isStepCompleted(stepStatus);\n const current = isCurrentStep(stepStatus);\n const isLast = index === statusOrder.length - 1;\n const StepIcon = statusIcons[stepStatus] ?? Circle;\n\n return (\n <div key={stepStatus} className=\"flex items-start relative\">\n {/* Connecting line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute left-5 top-10 w-0.5 h-8 z-0',\n completed ? 'bg-green-500' : 'bg-border'\n )}\n />\n )}\n\n {/* Step circle */}\n <div\n className={cn(\n 'relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full',\n completed\n ? 'bg-green-500/10 border-2 border-green-500 text-green-600 dark:text-green-400'\n : 'bg-muted border-2 border-border text-muted-foreground',\n current && 'ring-4 ring-green-500/20'\n )}\n >\n <StepIcon className=\"h-4 w-4\" />\n </div>\n\n {/* Step content */}\n <div className=\"ml-4 flex-1 pb-8\">\n <h4\n className={cn(\n 'text-sm font-semibold',\n completed ? 'text-foreground' : 'text-muted-foreground'\n )}\n >\n {statusLabels[stepStatus]}\n </h4>\n <p\n className={cn(\n 'text-xs',\n completed ? 'text-muted-foreground' : 'text-muted-foreground/50'\n )}\n >\n {statusDescriptions[stepStatus]}\n </p>\n {/* Show driver info at current step */}\n {current && order.assignedWorker && (\n <div className=\"mt-1.5 text-xs text-blue-600 dark:text-blue-400\">\n <p>Driver: {order.assignedWorker.name}</p>\n <p>Contact: {order.assignedWorker.phone}</p>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Order Items & Price Breakdown */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Order Items</h3>\n <div className=\"space-y-2\">\n {order.items.map((item, index) => (\n <div\n key={index}\n className=\"flex justify-between items-start pb-2 border-b border-border last:border-b-0\"\n >\n <div className=\"flex-1 pr-2\">\n <p className=\"text-sm font-medium text-foreground\">{item.name}</p>\n {item.customizations && item.customizations.length > 0 && (\n <p className=\"text-xs text-muted-foreground\">\n {item.customizations.join(', ')}\n </p>\n )}\n <p className=\"text-xs text-muted-foreground\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })} x {item.quantity}\n </p>\n </div>\n <p className=\"text-sm font-medium text-foreground\">\n {formatCurrency(item.price * item.quantity, { minimumFractionDigits: 0 })}\n </p>\n </div>\n ))}\n </div>\n\n {/* Price Breakdown */}\n <div className=\"mt-4 pt-4 border-t border-border space-y-2 text-sm\">\n <div className=\"flex justify-between text-muted-foreground\">\n <span>Subtotal</span>\n <span>{formatCurrency(order.subtotal, { minimumFractionDigits: 0 })}</span>\n </div>\n <div className=\"flex justify-between text-muted-foreground\">\n <span>Delivery Fee</span>\n <span>\n {order.deliveryFee === 0\n ? 'FREE'\n : formatCurrency(order.deliveryFee, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between text-muted-foreground\">\n <span>Tax</span>\n <span>{formatCurrency(order.taxes, { minimumFractionDigits: 0 })}</span>\n </div>\n {order.discount && order.discount > 0 && (\n <div className=\"flex justify-between text-green-600 dark:text-green-400\">\n <span>Discount</span>\n <span>-{formatCurrency(order.discount, { minimumFractionDigits: 0 })}</span>\n </div>\n )}\n <div className=\"flex justify-between font-semibold pt-2 border-t border-border text-foreground\">\n <span>Total</span>\n <span>{formatCurrency(order.total, { minimumFractionDigits: 0 })}</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Right: Sidebar */}\n <div className=\"lg:col-span-1 space-y-6\">\n {/* Delivery Details */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Delivery Details</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-start gap-2\">\n <MapPin className=\"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground\" />\n <div>\n <p className=\"text-xs text-muted-foreground\">Delivery Address</p>\n <p className=\"text-sm font-medium text-foreground\">\n {order.deliveryAddress.street}\n </p>\n <p className=\"text-sm text-muted-foreground\">{order.deliveryAddress.area}</p>\n <p className=\"text-sm text-muted-foreground\">\n {order.deliveryAddress.city}, {order.deliveryAddress.pincode}\n </p>\n {order.deliveryAddress.landmark && (\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n Landmark: {order.deliveryAddress.landmark}\n </p>\n )}\n </div>\n </div>\n\n {/* Customer Notes */}\n {order.customerNotes && (\n <div>\n <p className=\"text-xs text-muted-foreground\">Customer Notes</p>\n <p className=\"text-sm text-foreground\">{order.customerNotes}</p>\n </div>\n )}\n\n {/* Payment */}\n <div>\n <p className=\"text-xs text-muted-foreground\">Payment Method</p>\n <p className=\"text-sm font-medium text-foreground capitalize\">\n {order.paymentMethod}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {order.paymentStatus === 'completed' ? 'Paid' : 'Payment Pending'}\n </p>\n </div>\n </div>\n </div>\n\n {/* Delivery Partner */}\n {order.assignedWorker && (\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Delivery Partner</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-muted text-muted-foreground\">\n <span className=\"text-sm font-semibold\">\n {order.assignedWorker.name.charAt(0)}\n </span>\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground\">\n {order.assignedWorker.name}\n </p>\n <div className=\"flex items-center gap-1.5 mt-0.5\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n <span className=\"text-xs text-muted-foreground\">\n {order.assignedWorker.rating}/5\n </span>\n </div>\n </div>\n <a\n href={`tel:${order.assignedWorker.phone}`}\n className=\"flex h-9 w-9 items-center justify-center rounded-full bg-muted text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n </a>\n </div>\n <button\n type=\"button\"\n onClick={() => (window.location.href = `tel:${order.assignedWorker!.phone}`)}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n Call Driver\n </button>\n </div>\n </div>\n )}\n\n {/* Need Help */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <h3 className=\"text-base font-semibold text-foreground mb-3\">Need Help?</h3>\n <div className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => alert('Chat support coming soon!')}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <MessageCircle className=\"h-4 w-4\" />\n Chat Support\n </button>\n <button\n type=\"button\"\n onClick={() => (window.location.href = 'tel:7012270561')}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg border border-border px-3 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n Call Support\n </button>\n {isDelivered && !order.rating && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/orders/${order.id}/rate`)}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg bg-foreground px-3 py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Star className=\"h-4 w-4\" />\n Rate Order\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OrderTrackingPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/OrderTrackingPage.tsx"],"sourcesContent":["/**\n * Order Tracking Page\n * @module adaptercloud/pages/customer\n *\n * Real-time order tracking with status timeline, delivery partner info,\n * price breakdown, Need Help sidebar, and rate order functionality.\n */\n\nimport { useState, useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\nimport {\n ArrowLeft,\n CheckCircle2,\n Circle,\n Clock,\n MapPin,\n Phone,\n Star,\n Package,\n Truck,\n ChefHat,\n ShoppingBag,\n XCircle,\n MessageCircle,\n AlertTriangle,\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 { getOrderById } from '../../mocks/data';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\nimport type { OrderStatus } from '../../types';\n\nconst statusIcons: Record<string, typeof Package> = {\n pending: Clock,\n confirmed: CheckCircle2,\n preparing: ChefHat,\n ready: Package,\n picked_up: Package,\n out_for_delivery: Truck,\n delivered: CheckCircle2,\n cancelled: XCircle,\n};\n\nconst statusOrder: OrderStatus[] = [\n 'pending',\n 'confirmed',\n 'preparing',\n 'ready',\n 'out_for_delivery',\n 'delivered',\n];\n\nconst statusLabels: Record<string, string> = {\n pending: 'Order Placed',\n confirmed: 'Confirmed',\n preparing: 'Preparing',\n ready: 'Ready',\n out_for_delivery: 'Out for Delivery',\n delivered: 'Delivered',\n};\n\nconst statusDescriptions: Record<string, string> = {\n pending: 'Your order has been received',\n confirmed: 'Cart has accepted your order',\n preparing: 'Your food is being prepared',\n ready: 'Order is ready for pickup/delivery',\n out_for_delivery: 'Your order is on the way',\n delivered: 'Order has been delivered',\n};\n\nexport function OrderTrackingPage() {\n const { orderId } = useParams<{ orderId: string }>();\n const { navigateTo } = useAdapterCloud();\n const [isLoading, setIsLoading] = useState(true);\n\n // Simulate loading\n useMemo(() => {\n const timer = setTimeout(() => setIsLoading(false), 800);\n return () => clearTimeout(timer);\n }, []);\n\n const order = useMemo(() => (orderId ? getOrderById(orderId) : undefined), [orderId]);\n\n if (isLoading) {\n return (\n <PageLayout title=\"Track Order\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-foreground mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading order details...</p>\n </div>\n </PageLayout>\n );\n }\n\n if (!order) {\n return (\n <PageLayout title=\"Order Not Found\">\n <EmptyState\n icon={<ShoppingBag className=\"h-12 w-12\" />}\n title=\"Order not found\"\n description={`The order you're looking for doesn't exist.`}\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n View All Orders\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const currentStatusIndex = statusOrder.indexOf(order.status);\n const isCancelled = order.status === 'cancelled';\n const isDelivered = order.status === 'delivered';\n\n const isStepCompleted = (stepStatus: string): boolean => {\n const stepIndex = statusOrder.indexOf(stepStatus as OrderStatus);\n return stepIndex <= currentStatusIndex;\n };\n\n const isCurrentStep = (stepStatus: string): boolean => {\n return stepStatus === order.status;\n };\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/orders')}\n className=\"rounded-md p-1 text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <ArrowLeft className=\"h-5 w-5\" />\n </button>\n <span>Track Order</span>\n </div>\n }\n actions={<StatusBadge status={order.status} />}\n >\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Left: Order Details & Timeline */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Order Header */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <div className=\"flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3\">\n <div className=\"flex-1\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Order #{order.id}</h2>\n <p className=\"text-sm text-text-secondary\">{order.cartName}</p>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n {formatDate(order.orderDate)}\n </p>\n </div>\n <div className=\"text-left sm:text-right\">\n <p className=\"text-xl font-bold text-text-primary\">\n {formatCurrency(order.total, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"text-xs text-text-secondary uppercase\">{order.paymentMethod}</p>\n </div>\n </div>\n\n {/* Status Banner */}\n {isCancelled ? (\n <div className=\"mt-4 flex items-start gap-3 rounded-lg bg-status-error-bg/10 p-4 border border-status-error-border/20\">\n <XCircle className=\"h-5 w-5 text-status-error-text mt-0.5 shrink-0\" />\n <div>\n <p className=\"font-medium text-status-error-text\">Order Cancelled</p>\n {order.cancellationReason && (\n <p className=\"text-sm text-status-error-text/80 mt-0.5\">{order.cancellationReason}</p>\n )}\n </div>\n </div>\n ) : (\n <div\n className={cn(\n 'mt-4 flex items-start gap-3 rounded-lg p-4 border',\n isDelivered\n ? 'bg-green-500/10 border-green-500/20'\n : 'bg-blue-500/10 border-blue-500/20'\n )}\n >\n {isDelivered ? (\n <CheckCircle2 className=\"h-5 w-5 text-green-600 dark:text-green-400 mt-0.5 shrink-0\" />\n ) : (\n <Clock className=\"h-5 w-5 text-blue-600 dark:text-blue-400 mt-0.5 shrink-0\" />\n )}\n <p\n className={cn(\n 'text-sm font-medium',\n isDelivered\n ? 'text-green-600 dark:text-green-400'\n : 'text-blue-600 dark:text-blue-400'\n )}\n >\n {isDelivered\n ? `Delivered at ${formatDate(order.actualDeliveryTime!)}`\n : order.estimatedDeliveryTime\n ? `Estimated delivery by ${formatDate(order.estimatedDeliveryTime)}`\n : 'Estimated delivery time: TBD'}\n </p>\n </div>\n )}\n </div>\n\n {/* Tracking Progress Timeline */}\n {!isCancelled && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-5\">Order Status</h3>\n <div className=\"relative space-y-0\">\n {statusOrder.map((stepStatus, index) => {\n const completed = isStepCompleted(stepStatus);\n const current = isCurrentStep(stepStatus);\n const isLast = index === statusOrder.length - 1;\n const StepIcon = statusIcons[stepStatus] ?? Circle;\n\n return (\n <div key={stepStatus} className=\"flex items-start relative\">\n {/* Connecting line */}\n {!isLast && (\n <div\n className={cn(\n 'absolute left-5 top-10 w-0.5 h-8 z-0',\n completed ? 'bg-green-500' : 'bg-border'\n )}\n />\n )}\n\n {/* Step circle */}\n <div\n className={cn(\n 'relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full',\n completed\n ? 'bg-green-500/10 border-2 border-green-500 text-green-600 dark:text-green-400'\n : 'bg-bg-sunken border-2 border-border-subtle text-text-secondary',\n current && 'ring-4 ring-green-500/20'\n )}\n >\n <StepIcon className=\"h-4 w-4\" />\n </div>\n\n {/* Step content */}\n <div className=\"ml-4 flex-1 pb-8\">\n <h4\n className={cn(\n 'text-sm font-semibold',\n completed ? 'text-text-primary' : 'text-text-secondary'\n )}\n >\n {statusLabels[stepStatus]}\n </h4>\n <p\n className={cn(\n 'text-xs',\n completed ? 'text-text-secondary' : 'text-text-secondary/50'\n )}\n >\n {statusDescriptions[stepStatus]}\n </p>\n {/* Show driver info at current step */}\n {current && order.assignedWorker && (\n <div className=\"mt-1.5 text-xs text-blue-600 dark:text-blue-400\">\n <p>Driver: {order.assignedWorker.name}</p>\n <p>Contact: {order.assignedWorker.phone}</p>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Order Items & Price Breakdown */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Order Items</h3>\n <div className=\"space-y-2\">\n {order.items.map((item, index) => (\n <div\n key={index}\n className=\"flex justify-between items-start pb-2 border-b border-border-subtle last:border-b-0\"\n >\n <div className=\"flex-1 pr-2\">\n <p className=\"text-sm font-medium text-text-primary\">{item.name}</p>\n {item.customizations && item.customizations.length > 0 && (\n <p className=\"text-xs text-text-secondary\">\n {item.customizations.join(', ')}\n </p>\n )}\n <p className=\"text-xs text-text-secondary\">\n {formatCurrency(item.price, { minimumFractionDigits: 0 })} x {item.quantity}\n </p>\n </div>\n <p className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(item.price * item.quantity, { minimumFractionDigits: 0 })}\n </p>\n </div>\n ))}\n </div>\n\n {/* Price Breakdown */}\n <div className=\"mt-4 pt-4 border-t border-border-subtle space-y-2 text-sm\">\n <div className=\"flex justify-between text-text-secondary\">\n <span>Subtotal</span>\n <span>{formatCurrency(order.subtotal, { minimumFractionDigits: 0 })}</span>\n </div>\n <div className=\"flex justify-between text-text-secondary\">\n <span>Delivery Fee</span>\n <span>\n {order.deliveryFee === 0\n ? 'FREE'\n : formatCurrency(order.deliveryFee, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between text-text-secondary\">\n <span>Tax</span>\n <span>{formatCurrency(order.taxes, { minimumFractionDigits: 0 })}</span>\n </div>\n {order.discount && order.discount > 0 && (\n <div className=\"flex justify-between text-green-600 dark:text-green-400\">\n <span>Discount</span>\n <span>-{formatCurrency(order.discount, { minimumFractionDigits: 0 })}</span>\n </div>\n )}\n <div className=\"flex justify-between font-semibold pt-2 border-t border-border-subtle text-text-primary\">\n <span>Total</span>\n <span>{formatCurrency(order.total, { minimumFractionDigits: 0 })}</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Right: Sidebar */}\n <div className=\"lg:col-span-1 space-y-6\">\n {/* Delivery Details */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Delivery Details</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-start gap-2\">\n <MapPin className=\"mt-0.5 h-4 w-4 shrink-0 text-text-secondary\" />\n <div>\n <p className=\"text-xs text-text-secondary\">Delivery Address</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {order.deliveryAddress.street}\n </p>\n <p className=\"text-sm text-text-secondary\">{order.deliveryAddress.area}</p>\n <p className=\"text-sm text-text-secondary\">\n {order.deliveryAddress.city}, {order.deliveryAddress.pincode}\n </p>\n {order.deliveryAddress.landmark && (\n <p className=\"text-xs text-text-secondary mt-0.5\">\n Landmark: {order.deliveryAddress.landmark}\n </p>\n )}\n </div>\n </div>\n\n {/* Customer Notes */}\n {order.customerNotes && (\n <div>\n <p className=\"text-xs text-text-secondary\">Customer Notes</p>\n <p className=\"text-sm text-text-primary\">{order.customerNotes}</p>\n </div>\n )}\n\n {/* Payment */}\n <div>\n <p className=\"text-xs text-text-secondary\">Payment Method</p>\n <p className=\"text-sm font-medium text-text-primary capitalize\">\n {order.paymentMethod}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {order.paymentStatus === 'completed' ? 'Paid' : 'Payment Pending'}\n </p>\n </div>\n </div>\n </div>\n\n {/* Delivery Partner */}\n {order.assignedWorker && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Delivery Partner</h3>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <span className=\"text-sm font-semibold\">\n {order.assignedWorker.name.charAt(0)}\n </span>\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-text-primary\">\n {order.assignedWorker.name}\n </p>\n <div className=\"flex items-center gap-1.5 mt-0.5\">\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n <span className=\"text-xs text-text-secondary\">\n {order.assignedWorker.rating}/5\n </span>\n </div>\n </div>\n <a\n href={`tel:${order.assignedWorker.phone}`}\n className=\"flex h-9 w-9 items-center justify-center rounded-full bg-bg-sunken text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n </a>\n </div>\n <button\n type=\"button\"\n onClick={() => (window.location.href = `tel:${order.assignedWorker!.phone}`)}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n Call Driver\n </button>\n </div>\n </div>\n )}\n\n {/* Need Help */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h3 className=\"text-base font-semibold text-text-primary mb-3\">Need Help?</h3>\n <div className=\"space-y-2\">\n <button\n type=\"button\"\n onClick={() => alert('Chat support coming soon!')}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <MessageCircle className=\"h-4 w-4\" />\n Chat Support\n </button>\n <button\n type=\"button\"\n onClick={() => (window.location.href = 'tel:7012270561')}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg border border-border-subtle px-3 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-4 w-4\" />\n Call Support\n </button>\n {isDelivered && !order.rating && (\n <button\n type=\"button\"\n onClick={() => navigateTo(`/customer/orders/${order.id}/rate`)}\n className=\"w-full flex items-center justify-center gap-2 rounded-lg bg-foreground px-3 py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Star className=\"h-4 w-4\" />\n Rate Order\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|