@burdenoff/microfe-adaptercloud 2026.625.1 → 2026.625.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adaptercloud/components/PageLayout.js +24 -17
- package/dist/adaptercloud/components/PageLayout.js.map +1 -1
- package/dist/adaptercloud/pages/HomePage.js +18 -16
- package/dist/adaptercloud/pages/HomePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +90 -82
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +70 -44
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +60 -55
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +97 -92
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +59 -57
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +118 -104
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +145 -140
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +152 -147
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +87 -81
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +179 -165
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +73 -48
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +95 -93
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +110 -107
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +293 -299
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +218 -224
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +122 -128
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +248 -244
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +96 -91
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/adaptercloud/pages/common/SettingsPage.js +754 -736
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +63 -61
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +110 -108
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +221 -217
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +89 -87
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +410 -381
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +120 -118
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +86 -81
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +53 -51
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +114 -109
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +60 -58
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +87 -72
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +65 -63
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +68 -53
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +63 -61
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +86 -84
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +57 -55
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +341 -308
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +34 -32
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +48 -46
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +383 -381
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +348 -319
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +84 -59
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +73 -71
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +76 -74
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +70 -68
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +3 -3
|
@@ -5,12 +5,13 @@ import { MetricsCard as r } from "../../components/MetricsCard.js";
|
|
|
5
5
|
import { useEffect as i, useState as a } from "react";
|
|
6
6
|
import { Activity as o, AlertTriangle as s, ArrowRight as c, BarChart3 as l, CheckCircle2 as u, Clock as d, CreditCard as f, Database as p, FileText as m, IndianRupee as h, Loader2 as g, Server as _, Settings as v, ShieldCheck as y, ShoppingBag as b, Store as x, UserPlus as S, Users as C, Wifi as w } from "lucide-react";
|
|
7
7
|
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
8
|
+
import { EmphasisPanel as D, NextSteps as O } from "@burdenoff/fe-libs/ui";
|
|
8
9
|
//#region src/adaptercloud/pages/admin/AdminDashboard.tsx
|
|
9
|
-
function
|
|
10
|
-
let { navigateTo:
|
|
10
|
+
function k() {
|
|
11
|
+
let { navigateTo: k, currentUser: A } = e(), j = A?.firstName ?? A?.name ?? "Admin", [M, N] = a(null), [P, F] = a([]), [I, L] = a(null), [R, z] = a(!0);
|
|
11
12
|
i(() => {
|
|
12
13
|
let e = setTimeout(() => {
|
|
13
|
-
|
|
14
|
+
N({
|
|
14
15
|
totalUsers: 12847,
|
|
15
16
|
totalCarts: 2934,
|
|
16
17
|
totalOrders: 45621,
|
|
@@ -19,13 +20,13 @@ function D() {
|
|
|
19
20
|
pendingApprovals: 47,
|
|
20
21
|
totalRevenue: 245e4,
|
|
21
22
|
platformCommission: 122500
|
|
22
|
-
}),
|
|
23
|
+
}), L({
|
|
23
24
|
customers: 8934,
|
|
24
25
|
cartOwners: 2456,
|
|
25
26
|
workers: 1245,
|
|
26
27
|
investors: 212,
|
|
27
28
|
growth: 15.7
|
|
28
|
-
}),
|
|
29
|
+
}), F([
|
|
29
30
|
{
|
|
30
31
|
id: "ACT-001",
|
|
31
32
|
type: "user_registration",
|
|
@@ -76,28 +77,28 @@ function D() {
|
|
|
76
77
|
status: "completed",
|
|
77
78
|
user: "Fatima Ali"
|
|
78
79
|
}
|
|
79
|
-
]),
|
|
80
|
+
]), z(!1);
|
|
80
81
|
}, 1e3);
|
|
81
82
|
return () => clearTimeout(e);
|
|
82
83
|
}, []);
|
|
83
|
-
let
|
|
84
|
+
let B = (e) => /* @__PURE__ */ T({
|
|
84
85
|
user_registration: S,
|
|
85
86
|
cart_approval: x,
|
|
86
87
|
investment: h,
|
|
87
88
|
order: b,
|
|
88
89
|
dispute: s
|
|
89
|
-
}[e] ?? o, { className: "h-4 w-4" }),
|
|
90
|
+
}[e] ?? o, { className: "h-4 w-4" }), V = (e) => ({
|
|
90
91
|
user_registration: "text-accent-blue",
|
|
91
92
|
cart_approval: "text-accent-purple",
|
|
92
93
|
investment: "text-status-success-text",
|
|
93
94
|
order: "text-status-success-text",
|
|
94
95
|
dispute: "text-status-warning-text"
|
|
95
|
-
})[e] ?? "text-text-secondary",
|
|
96
|
+
})[e] ?? "text-text-secondary", H = (e) => ({
|
|
96
97
|
completed: "bg-status-success-bg-subtle/20 text-status-success-text",
|
|
97
98
|
pending: "bg-status-warning-bg-subtle/20 text-status-warning-text",
|
|
98
99
|
failed: "bg-status-error-bg-subtle/20 text-status-error-text"
|
|
99
100
|
})[e] ?? "bg-secondary text-secondary-foreground";
|
|
100
|
-
return
|
|
101
|
+
return R ? /* @__PURE__ */ T(n, {
|
|
101
102
|
title: "Admin Dashboard",
|
|
102
103
|
description: "Loading...",
|
|
103
104
|
children: /* @__PURE__ */ E("div", {
|
|
@@ -109,12 +110,13 @@ function D() {
|
|
|
109
110
|
})
|
|
110
111
|
}) : /* @__PURE__ */ E(n, {
|
|
111
112
|
title: "Admin Dashboard",
|
|
112
|
-
description: `Welcome, ${
|
|
113
|
-
|
|
113
|
+
description: `Welcome, ${j}! Monitor and manage the platform.`,
|
|
114
|
+
purpose: "Your command center for the whole marketplace — review platform health at a glance, clear pending cart approvals, and jump into user, order, and financial management. Start here whenever you need to keep the platform running smoothly.",
|
|
115
|
+
actions: M?.pendingApprovals && M.pendingApprovals > 0 ? /* @__PURE__ */ E("div", {
|
|
114
116
|
className: "flex items-center gap-2 rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/10 px-3 py-2",
|
|
115
117
|
children: [/* @__PURE__ */ T(s, { className: "h-4 w-4 text-status-error-text" }), /* @__PURE__ */ E("span", {
|
|
116
118
|
className: "text-sm font-medium text-status-error-text",
|
|
117
|
-
children: [
|
|
119
|
+
children: [M.pendingApprovals, " pending approvals"]
|
|
118
120
|
})]
|
|
119
121
|
}) : void 0,
|
|
120
122
|
children: [
|
|
@@ -128,61 +130,85 @@ function D() {
|
|
|
128
130
|
children: [
|
|
129
131
|
/* @__PURE__ */ E("button", {
|
|
130
132
|
type: "button",
|
|
131
|
-
onClick: () =>
|
|
133
|
+
onClick: () => k("/admin/carts"),
|
|
132
134
|
className: "flex items-center gap-3 rounded-lg bg-status-error-bg-subtle hover:bg-status-error-bg-subtle text-white p-3 text-sm font-medium transition-colors",
|
|
133
135
|
children: [
|
|
134
136
|
/* @__PURE__ */ T(s, { className: "h-5 w-5" }),
|
|
135
137
|
"Approve Carts (",
|
|
136
|
-
|
|
138
|
+
M?.pendingApprovals,
|
|
137
139
|
")"
|
|
138
140
|
]
|
|
139
141
|
}),
|
|
140
142
|
/* @__PURE__ */ E("button", {
|
|
141
143
|
type: "button",
|
|
142
|
-
onClick: () =>
|
|
144
|
+
onClick: () => k("/admin/carts"),
|
|
143
145
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
144
146
|
children: [/* @__PURE__ */ T(x, { className: "h-5 w-5 text-text-secondary" }), "Manage Carts"]
|
|
145
147
|
}),
|
|
146
148
|
/* @__PURE__ */ E("button", {
|
|
147
149
|
type: "button",
|
|
148
|
-
onClick: () =>
|
|
150
|
+
onClick: () => k("/admin/users"),
|
|
149
151
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
150
152
|
children: [/* @__PURE__ */ T(C, { className: "h-5 w-5 text-text-secondary" }), "User Management"]
|
|
151
153
|
}),
|
|
152
154
|
/* @__PURE__ */ E("button", {
|
|
153
155
|
type: "button",
|
|
154
|
-
onClick: () =>
|
|
156
|
+
onClick: () => k("/admin/orders"),
|
|
155
157
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
156
158
|
children: [/* @__PURE__ */ T(b, { className: "h-5 w-5 text-text-secondary" }), "Order Management"]
|
|
157
159
|
}),
|
|
158
160
|
/* @__PURE__ */ E("button", {
|
|
159
161
|
type: "button",
|
|
160
|
-
onClick: () =>
|
|
162
|
+
onClick: () => k("/admin/financial"),
|
|
161
163
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
162
164
|
children: [/* @__PURE__ */ T(h, { className: "h-5 w-5 text-text-secondary" }), "Financial Analytics"]
|
|
163
165
|
}),
|
|
164
166
|
/* @__PURE__ */ E("button", {
|
|
165
167
|
type: "button",
|
|
166
|
-
onClick: () =>
|
|
168
|
+
onClick: () => k("/admin/analytics"),
|
|
167
169
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
168
170
|
children: [/* @__PURE__ */ T(l, { className: "h-5 w-5 text-text-secondary" }), "Analytics"]
|
|
169
171
|
}),
|
|
170
172
|
/* @__PURE__ */ E("button", {
|
|
171
173
|
type: "button",
|
|
172
|
-
onClick: () =>
|
|
174
|
+
onClick: () => k("/admin/settings"),
|
|
173
175
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
174
176
|
children: [/* @__PURE__ */ T(v, { className: "h-5 w-5 text-text-secondary" }), "Settings"]
|
|
175
177
|
}),
|
|
176
178
|
/* @__PURE__ */ E("button", {
|
|
177
179
|
type: "button",
|
|
178
|
-
onClick: () =>
|
|
180
|
+
onClick: () => k("/admin/analytics"),
|
|
179
181
|
className: "flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors",
|
|
180
182
|
children: [/* @__PURE__ */ T(m, { className: "h-5 w-5 text-text-secondary" }), "Reports"]
|
|
181
183
|
})
|
|
182
184
|
]
|
|
183
185
|
})]
|
|
184
186
|
}),
|
|
185
|
-
|
|
187
|
+
/* @__PURE__ */ T(O, {
|
|
188
|
+
storageKey: "adaptercloud-admin-dashboard",
|
|
189
|
+
className: "mb-8",
|
|
190
|
+
steps: [
|
|
191
|
+
{
|
|
192
|
+
id: "approve-carts",
|
|
193
|
+
label: "Review pending cart approvals",
|
|
194
|
+
description: "Keep the marketplace clean by approving or rejecting new carts.",
|
|
195
|
+
onClick: () => k("/admin/carts")
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: "manage-users",
|
|
199
|
+
label: "Manage users and roles",
|
|
200
|
+
description: "Verify, suspend, or activate accounts across the platform.",
|
|
201
|
+
onClick: () => k("/admin/users")
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: "check-finances",
|
|
205
|
+
label: "Check financial analytics",
|
|
206
|
+
description: "Track revenue, commission, and payouts.",
|
|
207
|
+
onClick: () => k("/admin/financial")
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
}),
|
|
211
|
+
M && /* @__PURE__ */ E(D, {
|
|
186
212
|
className: "mb-8",
|
|
187
213
|
children: [
|
|
188
214
|
/* @__PURE__ */ T("h2", {
|
|
@@ -194,28 +220,28 @@ function D() {
|
|
|
194
220
|
children: [
|
|
195
221
|
/* @__PURE__ */ T(r, {
|
|
196
222
|
icon: /* @__PURE__ */ T(C, { className: "h-5 w-5" }),
|
|
197
|
-
value:
|
|
223
|
+
value: M.totalUsers.toLocaleString("en-IN"),
|
|
198
224
|
label: "Total Users",
|
|
199
225
|
trend: "up",
|
|
200
226
|
trendValue: "+15.7%"
|
|
201
227
|
}),
|
|
202
228
|
/* @__PURE__ */ T(r, {
|
|
203
229
|
icon: /* @__PURE__ */ T(x, { className: "h-5 w-5" }),
|
|
204
|
-
value:
|
|
230
|
+
value: M.totalCarts.toLocaleString("en-IN"),
|
|
205
231
|
label: "Active Carts",
|
|
206
232
|
trend: "up",
|
|
207
233
|
trendValue: "+8 this week"
|
|
208
234
|
}),
|
|
209
235
|
/* @__PURE__ */ T(r, {
|
|
210
236
|
icon: /* @__PURE__ */ T(b, { className: "h-5 w-5" }),
|
|
211
|
-
value:
|
|
237
|
+
value: M.totalOrders.toLocaleString("en-IN"),
|
|
212
238
|
label: "Total Orders",
|
|
213
239
|
trend: "up",
|
|
214
240
|
trendValue: "+12.3%"
|
|
215
241
|
}),
|
|
216
242
|
/* @__PURE__ */ T(r, {
|
|
217
243
|
icon: /* @__PURE__ */ T(h, { className: "h-5 w-5" }),
|
|
218
|
-
value: `₹${(
|
|
244
|
+
value: `₹${(M.totalRevenue / 1e5).toFixed(1)}L`,
|
|
219
245
|
label: "Total Revenue",
|
|
220
246
|
trend: "up",
|
|
221
247
|
trendValue: "+8.5%"
|
|
@@ -232,7 +258,7 @@ function D() {
|
|
|
232
258
|
children: "Active Users (24h)"
|
|
233
259
|
}), /* @__PURE__ */ T("p", {
|
|
234
260
|
className: "text-xl font-bold text-status-success-text",
|
|
235
|
-
children:
|
|
261
|
+
children: M.activeUsers.toLocaleString("en-IN")
|
|
236
262
|
})]
|
|
237
263
|
}),
|
|
238
264
|
/* @__PURE__ */ E("div", {
|
|
@@ -242,7 +268,7 @@ function D() {
|
|
|
242
268
|
children: "Pending Approvals"
|
|
243
269
|
}), /* @__PURE__ */ T("p", {
|
|
244
270
|
className: "text-xl font-bold text-status-error-text",
|
|
245
|
-
children:
|
|
271
|
+
children: M.pendingApprovals
|
|
246
272
|
})]
|
|
247
273
|
}),
|
|
248
274
|
/* @__PURE__ */ E("div", {
|
|
@@ -252,7 +278,7 @@ function D() {
|
|
|
252
278
|
children: "Total Investments"
|
|
253
279
|
}), /* @__PURE__ */ T("p", {
|
|
254
280
|
className: "text-xl font-bold text-accent-blue",
|
|
255
|
-
children:
|
|
281
|
+
children: M.totalInvestments.toLocaleString("en-IN")
|
|
256
282
|
})]
|
|
257
283
|
}),
|
|
258
284
|
/* @__PURE__ */ E("div", {
|
|
@@ -264,7 +290,7 @@ function D() {
|
|
|
264
290
|
className: "text-xl font-bold text-accent-purple",
|
|
265
291
|
children: [
|
|
266
292
|
"₹",
|
|
267
|
-
(
|
|
293
|
+
(M.platformCommission / 1e3).toFixed(0),
|
|
268
294
|
"K"
|
|
269
295
|
]
|
|
270
296
|
})]
|
|
@@ -273,7 +299,7 @@ function D() {
|
|
|
273
299
|
})
|
|
274
300
|
]
|
|
275
301
|
}),
|
|
276
|
-
|
|
302
|
+
I && /* @__PURE__ */ E("div", {
|
|
277
303
|
className: "mb-8",
|
|
278
304
|
children: [/* @__PURE__ */ T("h2", {
|
|
279
305
|
className: "text-lg font-semibold text-text-primary mb-4",
|
|
@@ -288,7 +314,7 @@ function D() {
|
|
|
288
314
|
children: [
|
|
289
315
|
/* @__PURE__ */ T("div", {
|
|
290
316
|
className: "text-2xl sm:text-3xl font-bold text-accent-blue",
|
|
291
|
-
children:
|
|
317
|
+
children: I.customers.toLocaleString("en-IN")
|
|
292
318
|
}),
|
|
293
319
|
/* @__PURE__ */ T("div", {
|
|
294
320
|
className: "text-sm text-text-secondary",
|
|
@@ -305,7 +331,7 @@ function D() {
|
|
|
305
331
|
children: [
|
|
306
332
|
/* @__PURE__ */ T("div", {
|
|
307
333
|
className: "text-2xl sm:text-3xl font-bold text-status-success-text",
|
|
308
|
-
children:
|
|
334
|
+
children: I.cartOwners.toLocaleString("en-IN")
|
|
309
335
|
}),
|
|
310
336
|
/* @__PURE__ */ T("div", {
|
|
311
337
|
className: "text-sm text-text-secondary",
|
|
@@ -322,7 +348,7 @@ function D() {
|
|
|
322
348
|
children: [
|
|
323
349
|
/* @__PURE__ */ T("div", {
|
|
324
350
|
className: "text-2xl sm:text-3xl font-bold text-status-warning-text",
|
|
325
|
-
children:
|
|
351
|
+
children: I.workers.toLocaleString("en-IN")
|
|
326
352
|
}),
|
|
327
353
|
/* @__PURE__ */ T("div", {
|
|
328
354
|
className: "text-sm text-text-secondary",
|
|
@@ -339,7 +365,7 @@ function D() {
|
|
|
339
365
|
children: [
|
|
340
366
|
/* @__PURE__ */ T("div", {
|
|
341
367
|
className: "text-2xl sm:text-3xl font-bold text-accent-purple",
|
|
342
|
-
children:
|
|
368
|
+
children: I.investors.toLocaleString("en-IN")
|
|
343
369
|
}),
|
|
344
370
|
/* @__PURE__ */ T("div", {
|
|
345
371
|
className: "text-sm text-text-secondary",
|
|
@@ -363,7 +389,7 @@ function D() {
|
|
|
363
389
|
className: "text-sm font-medium text-status-success-text",
|
|
364
390
|
children: [
|
|
365
391
|
"+",
|
|
366
|
-
|
|
392
|
+
I.growth,
|
|
367
393
|
"%"
|
|
368
394
|
]
|
|
369
395
|
})]
|
|
@@ -380,17 +406,17 @@ function D() {
|
|
|
380
406
|
children: "Recent Platform Activity"
|
|
381
407
|
}), /* @__PURE__ */ E("button", {
|
|
382
408
|
type: "button",
|
|
383
|
-
onClick: () =>
|
|
409
|
+
onClick: () => k("/admin/analytics"),
|
|
384
410
|
className: "flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary transition-colors",
|
|
385
411
|
children: ["View all activities", /* @__PURE__ */ T(c, { className: "h-4 w-4" })]
|
|
386
412
|
})]
|
|
387
413
|
}), /* @__PURE__ */ T("div", {
|
|
388
414
|
className: "rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border",
|
|
389
|
-
children:
|
|
415
|
+
children: P.map((e) => /* @__PURE__ */ E("div", {
|
|
390
416
|
className: "flex items-start gap-3 px-4 py-3",
|
|
391
417
|
children: [/* @__PURE__ */ T("div", {
|
|
392
|
-
className: t("flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken mt-0.5",
|
|
393
|
-
children:
|
|
418
|
+
className: t("flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken mt-0.5", V(e.type)),
|
|
419
|
+
children: B(e.type)
|
|
394
420
|
}), /* @__PURE__ */ E("div", {
|
|
395
421
|
className: "flex-1 min-w-0",
|
|
396
422
|
children: [/* @__PURE__ */ E("div", {
|
|
@@ -399,7 +425,7 @@ function D() {
|
|
|
399
425
|
className: "text-sm font-medium text-text-primary",
|
|
400
426
|
children: e.description
|
|
401
427
|
}), /* @__PURE__ */ T("span", {
|
|
402
|
-
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize w-fit",
|
|
428
|
+
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize w-fit", H(e.status)),
|
|
403
429
|
children: e.status
|
|
404
430
|
})]
|
|
405
431
|
}), /* @__PURE__ */ E("div", {
|
|
@@ -612,7 +638,7 @@ function D() {
|
|
|
612
638
|
let n = e.icon;
|
|
613
639
|
return /* @__PURE__ */ E("button", {
|
|
614
640
|
type: "button",
|
|
615
|
-
onClick: () =>
|
|
641
|
+
onClick: () => k(e.path),
|
|
616
642
|
className: t("flex items-center gap-4 rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6 text-left transition-all bg-gloss-card shadow-pop", "hover:bg-accent hover:shadow-md"),
|
|
617
643
|
children: [/* @__PURE__ */ T("div", {
|
|
618
644
|
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary",
|
|
@@ -634,6 +660,6 @@ function D() {
|
|
|
634
660
|
});
|
|
635
661
|
}
|
|
636
662
|
//#endregion
|
|
637
|
-
export {
|
|
663
|
+
export { k as AdminDashboard };
|
|
638
664
|
|
|
639
665
|
//# sourceMappingURL=AdminDashboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/admin/AdminDashboard.tsx"],"sourcesContent":["/**\n * Admin Dashboard Page\n * @module adaptercloud/pages/admin\n *\n * Full-featured admin dashboard with loading state, 8 stats cards,\n * user distribution, recent activity, system health, financial overview,\n * management links, pending approvals banner, and quick actions.\n */\n\nimport { useState, useEffect } from'react';\nimport {\n Users,\n Store,\n ShoppingBag,\n IndianRupee,\n Activity,\n ArrowRight,\n CheckCircle2,\n AlertCircle,\n Clock,\n UserPlus,\n Settings,\n BarChart3,\n ShieldCheck,\n Server,\n Database,\n Wifi,\n CreditCard,\n TrendingUp,\n FileText,\n AlertTriangle,\n Loader2,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { MetricsCard } from'../../components/MetricsCard';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface SystemMetrics {\n totalUsers: number;\n totalCarts: number;\n totalOrders: number;\n totalInvestments: number;\n activeUsers: number;\n pendingApprovals: number;\n totalRevenue: number;\n platformCommission: number;\n}\n\ninterface RecentActivity {\n id: string;\n type: 'user_registration' | 'cart_approval' | 'investment' | 'order' | 'dispute';\n description: string;\n timestamp: string;\n status: 'completed' | 'pending' | 'failed';\n user?: string;\n amount?: number;\n}\n\ninterface UserStats {\n customers: number;\n cartOwners: number;\n workers: number;\n investors: number;\n growth: number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminDashboard() {\n const { navigateTo, currentUser } = useAdapterCloud();\n const firstName = currentUser?.firstName ?? currentUser?.name ?? 'Admin';\n\n const [metrics, setMetrics] = useState<SystemMetrics | null>(null);\n const [activities, setActivities] = useState<RecentActivity[]>([]);\n const [userStats, setUserStats] = useState<UserStats | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setMetrics({\n totalUsers: 12847,\n totalCarts: 2934,\n totalOrders: 45621,\n totalInvestments: 1256,\n activeUsers: 8934,\n pendingApprovals: 47,\n totalRevenue: 2450000,\n platformCommission: 122500,\n });\n\n setUserStats({\n customers: 8934,\n cartOwners: 2456,\n workers: 1245,\n investors: 212,\n growth: 15.7,\n });\n\n setActivities([\n {\n id: 'ACT-001',\n type: 'user_registration',\n description: 'New cart owner registered: Rajesh Kumar',\n timestamp: '2 minutes ago',\n status: 'completed',\n user: 'Rajesh Kumar',\n },\n {\n id: 'ACT-002',\n type: 'cart_approval',\n description: 'Cart approval request from Mumbai Chaat Corner',\n timestamp: '5 minutes ago',\n status: 'pending',\n user: 'Priya Sharma',\n },\n {\n id: 'ACT-003',\n type: 'investment',\n description: 'New investment in Dosa Express',\n timestamp: '12 minutes ago',\n status: 'completed',\n user: 'Amit Patel',\n amount: 75000,\n },\n {\n id: 'ACT-004',\n type: 'order',\n description: 'Large order placed: ₹2,500',\n timestamp: '18 minutes ago',\n status: 'completed',\n amount: 2500,\n },\n {\n id: 'ACT-005',\n type: 'dispute',\n description: 'Payment dispute raised by customer',\n timestamp: '25 minutes ago',\n status: 'pending',\n user: 'Suresh Nair',\n amount: 450,\n },\n {\n id: 'ACT-006',\n type: 'user_registration',\n description: 'New investor registered: Fatima Ali',\n timestamp: '32 minutes ago',\n status: 'completed',\n user: 'Fatima Ali',\n },\n ]);\n\n setIsLoading(false);\n }, 1000);\n\n return () => clearTimeout(timer);\n }, []);\n\n const getActivityIcon = (type: RecentActivity['type']) => {\n const iconMap = {\n user_registration: UserPlus,\n cart_approval: Store,\n investment: IndianRupee,\n order: ShoppingBag,\n dispute: AlertTriangle,\n };\n const Icon = iconMap[type] ?? Activity;\n return <Icon className=\"h-4 w-4\" />;\n };\n\n const getActivityIconColor = (type: RecentActivity['type']) => {\n const colorMap: Record<string, string> = {\n user_registration: 'text-accent-blue',\n cart_approval: 'text-accent-purple',\n investment: 'text-status-success-text',\n order: 'text-status-success-text',\n dispute: 'text-status-warning-text',\n };\n return colorMap[type] ?? 'text-text-secondary';\n };\n\n const getStatusBadge = (status: RecentActivity['status']) => {\n const config = {\n completed: 'bg-status-success-bg-subtle/20 text-status-success-text',\n pending: 'bg-status-warning-bg-subtle/20 text-status-warning-text',\n failed: 'bg-status-error-bg-subtle/20 text-status-error-text',\n };\n return config[status] ?? 'bg-secondary text-secondary-foreground';\n };\n\n /* ---- Loading state ---- */\n if (isLoading) {\n return (\n <PageLayout title=\"Admin Dashboard\" description=\"Loading...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading admin dashboard...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Admin Dashboard\"\n description={`Welcome, ${firstName}! Monitor and manage the platform.`}\n actions={\n metrics?.pendingApprovals && metrics.pendingApprovals > 0 ? (\n <div className=\"flex items-center gap-2 rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/10 px-3 py-2\">\n <AlertTriangle className=\"h-4 w-4 text-status-error-text\" />\n <span className=\"text-sm font-medium text-status-error-text\">\n {metrics.pendingApprovals} pending approvals\n </span>\n </div>\n ) : undefined\n }\n >\n {/* Quick Actions */}\n <div className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Quick Actions</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/carts')}\n className=\"flex items-center gap-3 rounded-lg bg-status-error-bg-subtle hover:bg-status-error-bg-subtle text-white p-3 text-sm font-medium transition-colors\"\n >\n <AlertTriangle className=\"h-5 w-5\" />\n Approve Carts ({metrics?.pendingApprovals})\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/carts')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <Store className=\"h-5 w-5 text-text-secondary\" />\n Manage Carts\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/users')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <Users className=\"h-5 w-5 text-text-secondary\" />\n User Management\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/orders')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <ShoppingBag className=\"h-5 w-5 text-text-secondary\" />\n Order Management\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/financial')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <IndianRupee className=\"h-5 w-5 text-text-secondary\" />\n Financial Analytics\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/analytics')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <BarChart3 className=\"h-5 w-5 text-text-secondary\" />\n Analytics\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/settings')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <Settings className=\"h-5 w-5 text-text-secondary\" />\n Settings\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/analytics')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <FileText className=\"h-5 w-5 text-text-secondary\" />\n Reports\n </button>\n </div>\n </div>\n\n {/* Platform Overview - 4 Primary Stats */}\n {metrics && (\n <div className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Platform Overview</h2>\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n <MetricsCard\n icon={<Users className=\"h-5 w-5\" />}\n value={metrics.totalUsers.toLocaleString('en-IN')}\n label=\"Total Users\"\n trend=\"up\"\n trendValue=\"+15.7%\"\n />\n <MetricsCard\n icon={<Store className=\"h-5 w-5\" />}\n value={metrics.totalCarts.toLocaleString('en-IN')}\n label=\"Active Carts\"\n trend=\"up\"\n trendValue=\"+8 this week\"\n />\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={metrics.totalOrders.toLocaleString('en-IN')}\n label=\"Total Orders\"\n trend=\"up\"\n trendValue=\"+12.3%\"\n />\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={`₹${(metrics.totalRevenue / 100000).toFixed(1)}L`}\n label=\"Total Revenue\"\n trend=\"up\"\n trendValue=\"+8.5%\"\n />\n </div>\n\n {/* 4 Additional Metric Cards */}\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4 mt-4\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Active Users (24h)</p>\n <p className=\"text-xl font-bold text-status-success-text\">\n {metrics.activeUsers.toLocaleString('en-IN')}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Pending Approvals</p>\n <p className=\"text-xl font-bold text-status-error-text\">\n {metrics.pendingApprovals}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Total Investments</p>\n <p className=\"text-xl font-bold text-accent-blue\">\n {metrics.totalInvestments.toLocaleString('en-IN')}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Platform Commission</p>\n <p className=\"text-xl font-bold text-accent-purple\">\n ₹{(metrics.platformCommission / 1000).toFixed(0)}K\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* User Distribution */}\n {userStats && (\n <div className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">User Distribution</h2>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-6\">\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-accent-blue\">\n {userStats.customers.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Customers</div>\n <div className=\"text-xs text-text-secondary\">69.5%</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-status-success-text\">\n {userStats.cartOwners.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Cart Owners</div>\n <div className=\"text-xs text-text-secondary\">19.1%</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-status-warning-text\">\n {userStats.workers.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Workers</div>\n <div className=\"text-xs text-text-secondary\">9.7%</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-accent-purple\">\n {userStats.investors.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Investors</div>\n <div className=\"text-xs text-text-secondary\">1.7%</div>\n </div>\n </div>\n <div className=\"mt-4 pt-4 border-t border-border-subtle\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-text-secondary\">User Growth (This Month)</span>\n <span className=\"text-sm font-medium text-status-success-text\">\n +{userStats.growth}%\n </span>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Recent Activity */}\n <div className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Recent Platform Activity</h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/analytics')}\n className=\"flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary transition-colors\"\n >\n View all activities\n <ArrowRight className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border\">\n {activities.map((activity) => (\n <div key={activity.id} className=\"flex items-start gap-3 px-4 py-3\">\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken mt-0.5',\n getActivityIconColor(activity.type)\n )}\n >\n {getActivityIcon(activity.type)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-col sm:flex-row sm:items-center justify-between gap-2\">\n <p className=\"text-sm font-medium text-text-primary\">{activity.description}</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize w-fit',\n getStatusBadge(activity.status)\n )}\n >\n {activity.status}\n </span>\n </div>\n <div className=\"flex flex-wrap items-center mt-1 text-xs text-text-secondary gap-3\">\n <span>{activity.timestamp}</span>\n {activity.user && (\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {activity.user}\n </span>\n )}\n {activity.amount && (\n <span className=\"flex items-center gap-1\">\n <IndianRupee className=\"h-3 w-3\" />₹{activity.amount.toLocaleString('en-IN')}\n </span>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* System Health & Financial Overview */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8\">\n {/* System Health */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-4\">\n <ShieldCheck className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">System Health</h3>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Server className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Server Status</span>\n </div>\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle/20 px-3 py-1 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Healthy\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Database className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Database Performance</span>\n </div>\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle/20 px-3 py-1 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Optimal\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <CreditCard className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Payment Gateway</span>\n </div>\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle/20 px-3 py-1 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Online\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Wifi className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">API Response Time</span>\n </div>\n <span className=\"text-sm font-medium text-text-primary\">145ms</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Uptime (30 days)</span>\n </div>\n <span className=\"text-sm font-medium text-text-primary\">99.8%</span>\n </div>\n </div>\n </div>\n\n {/* Financial Overview */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-4\">\n <IndianRupee className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Financial Overview</h3>\n </div>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Today's Revenue</span>\n <span className=\"font-medium text-text-primary\">₹1,45,230</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">This Month</span>\n <span className=\"font-medium text-text-primary\">₹24,50,000</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Platform Commission</span>\n <span className=\"font-medium text-text-primary\">₹1,22,500</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Active Investments</span>\n <span className=\"font-medium text-text-primary\">₹1.52Cr</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Pending Payouts</span>\n <span className=\"font-medium text-text-primary\">₹45,600</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Management Links */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n {[\n {\n icon: Store,\n label: 'Cart Management',\n desc: 'Approve, manage, and monitor carts',\n path: '/admin/carts',\n },\n {\n icon: Users,\n label: 'User Management',\n desc: 'Manage users and permissions',\n path: '/admin/users',\n },\n {\n icon: BarChart3,\n label: 'Analytics & Reports',\n desc: 'View detailed platform analytics',\n path: '/admin/analytics',\n },\n {\n icon: IndianRupee,\n label: 'Financial Analytics',\n desc: 'View revenue, investments, and financial metrics',\n path: '/admin/financial',\n },\n {\n icon: AlertTriangle,\n label: 'Order & Dispute Management',\n desc: 'Handle orders, disputes, and customer issues',\n path: '/admin/orders',\n },\n {\n icon: Settings,\n label: 'Platform Settings',\n desc: 'Configure platform-wide settings',\n path: '/admin/settings',\n },\n ].map((link) => {\n const LinkIcon = link.icon;\n return (\n <button\n key={link.label}\n type=\"button\"\n onClick={() => navigateTo(link.path)}\n className={cn(\n 'flex items-center gap-4 rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6 text-left transition-all bg-gloss-card shadow-pop',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary\">\n <LinkIcon className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <h3 className=\"font-semibold text-text-primary text-sm sm:text-base\">{link.label}</h3>\n <p className=\"text-xs sm:text-sm text-text-secondary\">{link.desc}</p>\n </div>\n </button>\n );\n })}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdminDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/admin/AdminDashboard.tsx"],"sourcesContent":["/**\n * Admin Dashboard Page\n * @module adaptercloud/pages/admin\n *\n * Full-featured admin dashboard with loading state, 8 stats cards,\n * user distribution, recent activity, system health, financial overview,\n * management links, pending approvals banner, and quick actions.\n */\n\nimport { useState, useEffect } from'react';\nimport {\n Users,\n Store,\n ShoppingBag,\n IndianRupee,\n Activity,\n ArrowRight,\n CheckCircle2,\n AlertCircle,\n Clock,\n UserPlus,\n Settings,\n BarChart3,\n ShieldCheck,\n Server,\n Database,\n Wifi,\n CreditCard,\n TrendingUp,\n FileText,\n AlertTriangle,\n Loader2,\n} from'lucide-react';\nimport { EmphasisPanel, NextSteps } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from'../../components/PageLayout';\nimport { MetricsCard } from'../../components/MetricsCard';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface SystemMetrics {\n totalUsers: number;\n totalCarts: number;\n totalOrders: number;\n totalInvestments: number;\n activeUsers: number;\n pendingApprovals: number;\n totalRevenue: number;\n platformCommission: number;\n}\n\ninterface RecentActivity {\n id: string;\n type: 'user_registration' | 'cart_approval' | 'investment' | 'order' | 'dispute';\n description: string;\n timestamp: string;\n status: 'completed' | 'pending' | 'failed';\n user?: string;\n amount?: number;\n}\n\ninterface UserStats {\n customers: number;\n cartOwners: number;\n workers: number;\n investors: number;\n growth: number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminDashboard() {\n const { navigateTo, currentUser } = useAdapterCloud();\n const firstName = currentUser?.firstName ?? currentUser?.name ?? 'Admin';\n\n const [metrics, setMetrics] = useState<SystemMetrics | null>(null);\n const [activities, setActivities] = useState<RecentActivity[]>([]);\n const [userStats, setUserStats] = useState<UserStats | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setMetrics({\n totalUsers: 12847,\n totalCarts: 2934,\n totalOrders: 45621,\n totalInvestments: 1256,\n activeUsers: 8934,\n pendingApprovals: 47,\n totalRevenue: 2450000,\n platformCommission: 122500,\n });\n\n setUserStats({\n customers: 8934,\n cartOwners: 2456,\n workers: 1245,\n investors: 212,\n growth: 15.7,\n });\n\n setActivities([\n {\n id: 'ACT-001',\n type: 'user_registration',\n description: 'New cart owner registered: Rajesh Kumar',\n timestamp: '2 minutes ago',\n status: 'completed',\n user: 'Rajesh Kumar',\n },\n {\n id: 'ACT-002',\n type: 'cart_approval',\n description: 'Cart approval request from Mumbai Chaat Corner',\n timestamp: '5 minutes ago',\n status: 'pending',\n user: 'Priya Sharma',\n },\n {\n id: 'ACT-003',\n type: 'investment',\n description: 'New investment in Dosa Express',\n timestamp: '12 minutes ago',\n status: 'completed',\n user: 'Amit Patel',\n amount: 75000,\n },\n {\n id: 'ACT-004',\n type: 'order',\n description: 'Large order placed: ₹2,500',\n timestamp: '18 minutes ago',\n status: 'completed',\n amount: 2500,\n },\n {\n id: 'ACT-005',\n type: 'dispute',\n description: 'Payment dispute raised by customer',\n timestamp: '25 minutes ago',\n status: 'pending',\n user: 'Suresh Nair',\n amount: 450,\n },\n {\n id: 'ACT-006',\n type: 'user_registration',\n description: 'New investor registered: Fatima Ali',\n timestamp: '32 minutes ago',\n status: 'completed',\n user: 'Fatima Ali',\n },\n ]);\n\n setIsLoading(false);\n }, 1000);\n\n return () => clearTimeout(timer);\n }, []);\n\n const getActivityIcon = (type: RecentActivity['type']) => {\n const iconMap = {\n user_registration: UserPlus,\n cart_approval: Store,\n investment: IndianRupee,\n order: ShoppingBag,\n dispute: AlertTriangle,\n };\n const Icon = iconMap[type] ?? Activity;\n return <Icon className=\"h-4 w-4\" />;\n };\n\n const getActivityIconColor = (type: RecentActivity['type']) => {\n const colorMap: Record<string, string> = {\n user_registration: 'text-accent-blue',\n cart_approval: 'text-accent-purple',\n investment: 'text-status-success-text',\n order: 'text-status-success-text',\n dispute: 'text-status-warning-text',\n };\n return colorMap[type] ?? 'text-text-secondary';\n };\n\n const getStatusBadge = (status: RecentActivity['status']) => {\n const config = {\n completed: 'bg-status-success-bg-subtle/20 text-status-success-text',\n pending: 'bg-status-warning-bg-subtle/20 text-status-warning-text',\n failed: 'bg-status-error-bg-subtle/20 text-status-error-text',\n };\n return config[status] ?? 'bg-secondary text-secondary-foreground';\n };\n\n /* ---- Loading state ---- */\n if (isLoading) {\n return (\n <PageLayout title=\"Admin Dashboard\" description=\"Loading...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">Loading admin dashboard...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Admin Dashboard\"\n description={`Welcome, ${firstName}! Monitor and manage the platform.`}\n purpose=\"Your command center for the whole marketplace — review platform health at a glance, clear pending cart approvals, and jump into user, order, and financial management. Start here whenever you need to keep the platform running smoothly.\"\n actions={\n metrics?.pendingApprovals && metrics.pendingApprovals > 0 ? (\n <div className=\"flex items-center gap-2 rounded-lg border border-status-error-border/30 bg-status-error-bg-subtle/10 px-3 py-2\">\n <AlertTriangle className=\"h-4 w-4 text-status-error-text\" />\n <span className=\"text-sm font-medium text-status-error-text\">\n {metrics.pendingApprovals} pending approvals\n </span>\n </div>\n ) : undefined\n }\n >\n {/* Quick Actions */}\n <div className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Quick Actions</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/carts')}\n className=\"flex items-center gap-3 rounded-lg bg-status-error-bg-subtle hover:bg-status-error-bg-subtle text-white p-3 text-sm font-medium transition-colors\"\n >\n <AlertTriangle className=\"h-5 w-5\" />\n Approve Carts ({metrics?.pendingApprovals})\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/carts')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <Store className=\"h-5 w-5 text-text-secondary\" />\n Manage Carts\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/users')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <Users className=\"h-5 w-5 text-text-secondary\" />\n User Management\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/orders')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <ShoppingBag className=\"h-5 w-5 text-text-secondary\" />\n Order Management\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/financial')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <IndianRupee className=\"h-5 w-5 text-text-secondary\" />\n Financial Analytics\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/analytics')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <BarChart3 className=\"h-5 w-5 text-text-secondary\" />\n Analytics\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/settings')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <Settings className=\"h-5 w-5 text-text-secondary\" />\n Settings\n </button>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/analytics')}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-surface hover:bg-accent p-3 text-sm font-medium text-text-primary transition-colors\"\n >\n <FileText className=\"h-5 w-5 text-text-secondary\" />\n Reports\n </button>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"adaptercloud-admin-dashboard\"\n className=\"mb-8\"\n steps={[\n {\n id: 'approve-carts',\n label: 'Review pending cart approvals',\n description: 'Keep the marketplace clean by approving or rejecting new carts.',\n onClick: () => navigateTo('/admin/carts'),\n },\n {\n id: 'manage-users',\n label: 'Manage users and roles',\n description: 'Verify, suspend, or activate accounts across the platform.',\n onClick: () => navigateTo('/admin/users'),\n },\n {\n id: 'check-finances',\n label: 'Check financial analytics',\n description: 'Track revenue, commission, and payouts.',\n onClick: () => navigateTo('/admin/financial'),\n },\n ]}\n />\n\n {/* Platform Overview - 4 Primary Stats (emphasis zone) */}\n {metrics && (\n <EmphasisPanel className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">Platform Overview</h2>\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n <MetricsCard\n icon={<Users className=\"h-5 w-5\" />}\n value={metrics.totalUsers.toLocaleString('en-IN')}\n label=\"Total Users\"\n trend=\"up\"\n trendValue=\"+15.7%\"\n />\n <MetricsCard\n icon={<Store className=\"h-5 w-5\" />}\n value={metrics.totalCarts.toLocaleString('en-IN')}\n label=\"Active Carts\"\n trend=\"up\"\n trendValue=\"+8 this week\"\n />\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={metrics.totalOrders.toLocaleString('en-IN')}\n label=\"Total Orders\"\n trend=\"up\"\n trendValue=\"+12.3%\"\n />\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={`₹${(metrics.totalRevenue / 100000).toFixed(1)}L`}\n label=\"Total Revenue\"\n trend=\"up\"\n trendValue=\"+8.5%\"\n />\n </div>\n\n {/* 4 Additional Metric Cards */}\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4 mt-4\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Active Users (24h)</p>\n <p className=\"text-xl font-bold text-status-success-text\">\n {metrics.activeUsers.toLocaleString('en-IN')}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Pending Approvals</p>\n <p className=\"text-xl font-bold text-status-error-text\">\n {metrics.pendingApprovals}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Total Investments</p>\n <p className=\"text-xl font-bold text-accent-blue\">\n {metrics.totalInvestments.toLocaleString('en-IN')}\n </p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 bg-gloss-card shadow-pop\">\n <p className=\"text-xs text-text-secondary\">Platform Commission</p>\n <p className=\"text-xl font-bold text-accent-purple\">\n ₹{(metrics.platformCommission / 1000).toFixed(0)}K\n </p>\n </div>\n </div>\n </EmphasisPanel>\n )}\n\n {/* User Distribution */}\n {userStats && (\n <div className=\"mb-8\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">User Distribution</h2>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-6\">\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-accent-blue\">\n {userStats.customers.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Customers</div>\n <div className=\"text-xs text-text-secondary\">69.5%</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-status-success-text\">\n {userStats.cartOwners.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Cart Owners</div>\n <div className=\"text-xs text-text-secondary\">19.1%</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-status-warning-text\">\n {userStats.workers.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Workers</div>\n <div className=\"text-xs text-text-secondary\">9.7%</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl sm:text-3xl font-bold text-accent-purple\">\n {userStats.investors.toLocaleString('en-IN')}\n </div>\n <div className=\"text-sm text-text-secondary\">Investors</div>\n <div className=\"text-xs text-text-secondary\">1.7%</div>\n </div>\n </div>\n <div className=\"mt-4 pt-4 border-t border-border-subtle\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-text-secondary\">User Growth (This Month)</span>\n <span className=\"text-sm font-medium text-status-success-text\">\n +{userStats.growth}%\n </span>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Recent Activity */}\n <div className=\"mb-8\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Recent Platform Activity</h2>\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin/analytics')}\n className=\"flex items-center gap-1 text-sm font-medium text-text-secondary hover:text-text-primary transition-colors\"\n >\n View all activities\n <ArrowRight className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface divide-y divide-border\">\n {activities.map((activity) => (\n <div key={activity.id} className=\"flex items-start gap-3 px-4 py-3\">\n <div\n className={cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-sunken mt-0.5',\n getActivityIconColor(activity.type)\n )}\n >\n {getActivityIcon(activity.type)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-col sm:flex-row sm:items-center justify-between gap-2\">\n <p className=\"text-sm font-medium text-text-primary\">{activity.description}</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize w-fit',\n getStatusBadge(activity.status)\n )}\n >\n {activity.status}\n </span>\n </div>\n <div className=\"flex flex-wrap items-center mt-1 text-xs text-text-secondary gap-3\">\n <span>{activity.timestamp}</span>\n {activity.user && (\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {activity.user}\n </span>\n )}\n {activity.amount && (\n <span className=\"flex items-center gap-1\">\n <IndianRupee className=\"h-3 w-3\" />₹{activity.amount.toLocaleString('en-IN')}\n </span>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* System Health & Financial Overview */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8\">\n {/* System Health */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-4\">\n <ShieldCheck className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">System Health</h3>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Server className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Server Status</span>\n </div>\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle/20 px-3 py-1 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Healthy\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Database className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Database Performance</span>\n </div>\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle/20 px-3 py-1 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Optimal\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <CreditCard className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Payment Gateway</span>\n </div>\n <span className=\"inline-flex items-center gap-1.5 rounded-full bg-status-success-bg-subtle/20 px-3 py-1 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Online\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Wifi className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">API Response Time</span>\n </div>\n <span className=\"text-sm font-medium text-text-primary\">145ms</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"text-sm text-text-secondary\">Uptime (30 days)</span>\n </div>\n <span className=\"text-sm font-medium text-text-primary\">99.8%</span>\n </div>\n </div>\n </div>\n\n {/* Financial Overview */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"flex items-center gap-2 mb-4\">\n <IndianRupee className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Financial Overview</h3>\n </div>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Today's Revenue</span>\n <span className=\"font-medium text-text-primary\">₹1,45,230</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">This Month</span>\n <span className=\"font-medium text-text-primary\">₹24,50,000</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Platform Commission</span>\n <span className=\"font-medium text-text-primary\">₹1,22,500</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Active Investments</span>\n <span className=\"font-medium text-text-primary\">₹1.52Cr</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Pending Payouts</span>\n <span className=\"font-medium text-text-primary\">₹45,600</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Management Links */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\">\n {[\n {\n icon: Store,\n label: 'Cart Management',\n desc: 'Approve, manage, and monitor carts',\n path: '/admin/carts',\n },\n {\n icon: Users,\n label: 'User Management',\n desc: 'Manage users and permissions',\n path: '/admin/users',\n },\n {\n icon: BarChart3,\n label: 'Analytics & Reports',\n desc: 'View detailed platform analytics',\n path: '/admin/analytics',\n },\n {\n icon: IndianRupee,\n label: 'Financial Analytics',\n desc: 'View revenue, investments, and financial metrics',\n path: '/admin/financial',\n },\n {\n icon: AlertTriangle,\n label: 'Order & Dispute Management',\n desc: 'Handle orders, disputes, and customer issues',\n path: '/admin/orders',\n },\n {\n icon: Settings,\n label: 'Platform Settings',\n desc: 'Configure platform-wide settings',\n path: '/admin/settings',\n },\n ].map((link) => {\n const LinkIcon = link.icon;\n return (\n <button\n key={link.label}\n type=\"button\"\n onClick={() => navigateTo(link.path)}\n className={cn(\n 'flex items-center gap-4 rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6 text-left transition-all bg-gloss-card shadow-pop',\n 'hover:bg-accent hover:shadow-md'\n )}\n >\n <div className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-bg-sunken text-text-secondary\">\n <LinkIcon className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <h3 className=\"font-semibold text-text-primary text-sm sm:text-base\">{link.label}</h3>\n <p className=\"text-xs sm:text-sm text-text-secondary\">{link.desc}</p>\n </div>\n </button>\n );\n })}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|