@burdenoff/microfe-movethewheels 2026.625.1 → 2026.626.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/{AIAssistantPage-CNyoKtID.js → AIAssistantPage-AvsMbunM.js} +35 -29
- package/dist/{AnalyticsPage-Ck615ox7.js → AnalyticsPage-CCLfHgQZ.js} +36 -25
- package/dist/CreateOrderPage-CjlnEtk3.js +510 -0
- package/dist/CustomerDetailsPage-I6cdDHUi.js +265 -0
- package/dist/CustomersPage-CGGfD4ki.js +163 -0
- package/dist/{DashboardPage-DTmyuC11.js → DashboardPage-D2HRqwg9.js} +93 -89
- package/dist/DataTable-CD9ZhpLB.js +249 -0
- package/dist/DriverDetailsPage-rg_pGNuP.js +330 -0
- package/dist/DriversPage-DKiynISH.js +167 -0
- package/dist/FinancePage-Vg8WPs38.js +158 -0
- package/dist/{FleetPage-DCfOmBa2.js → FleetPage-DddXt8r8.js} +109 -71
- package/dist/ImportExportPage-BW6qO3kc.js +248 -0
- package/dist/{InventoryPage-BW0QXWuf.js → InventoryPage-rMGuaJN-.js} +74 -70
- package/dist/LiveTrackingPage-DQ1q4Id3.js +375 -0
- package/dist/MarketplacePage-DKrXAv62.js +219 -0
- package/dist/OrderDetailsPage-CFASgsYX.js +431 -0
- package/dist/OrdersListPage-BHeT8S5o.js +309 -0
- package/dist/ProductDetailsPage-CFGcbaHo.js +195 -0
- package/dist/ProductsPage--xEpbQ8A.js +171 -0
- package/dist/{ReportsPage-Df3hciPy.js → ReportsPage-Bb7_90rK.js} +53 -45
- package/dist/RouteDetailsPage-CVtDVb1N.js +282 -0
- package/dist/RoutesPage-s57PtgcQ.js +163 -0
- package/dist/SettingsPage-BYNCBOpN.js +298 -0
- package/dist/{TrackingPage-CU0Vk4mx.js → TrackingPage-CcRc_dva.js} +77 -72
- package/dist/VehicleDetailsPage-3YDMPsPs.js +220 -0
- package/dist/VehiclesPage-UlxPWP9K.js +167 -0
- package/dist/WarehouseDetailsPage-Db7KeN-d.js +238 -0
- package/dist/WarehousesPage-CuTO-OPp.js +164 -0
- package/dist/index.js +2 -2
- package/package.json +2 -2
- package/src/movethewheels/components/DataTable.tsx +37 -2
- package/src/movethewheels/components/MetricCard.tsx +3 -1
- package/src/movethewheels/pages/AIAssistantPage.tsx +11 -3
- package/src/movethewheels/pages/AnalyticsPage.tsx +31 -25
- package/src/movethewheels/pages/CreateOrderPage.tsx +56 -17
- package/src/movethewheels/pages/CustomerDetailsPage.tsx +63 -38
- package/src/movethewheels/pages/CustomersPage.tsx +40 -2
- package/src/movethewheels/pages/DashboardPage.tsx +8 -1
- package/src/movethewheels/pages/DriverDetailsPage.tsx +57 -26
- package/src/movethewheels/pages/DriversPage.tsx +37 -1
- package/src/movethewheels/pages/FinancePage.tsx +45 -41
- package/src/movethewheels/pages/FleetPage.tsx +68 -25
- package/src/movethewheels/pages/ImportExportPage.tsx +46 -29
- package/src/movethewheels/pages/InventoryPage.tsx +20 -23
- package/src/movethewheels/pages/LiveTrackingPage.tsx +58 -20
- package/src/movethewheels/pages/MarketplacePage.tsx +37 -3
- package/src/movethewheels/pages/OrderDetailsPage.tsx +74 -46
- package/src/movethewheels/pages/OrdersListPage.tsx +62 -1
- package/src/movethewheels/pages/ProductDetailsPage.tsx +36 -11
- package/src/movethewheels/pages/ProductsPage.tsx +33 -1
- package/src/movethewheels/pages/ReportsPage.tsx +23 -19
- package/src/movethewheels/pages/RouteDetailsPage.tsx +71 -31
- package/src/movethewheels/pages/RoutesPage.tsx +41 -5
- package/src/movethewheels/pages/SettingsPage.tsx +68 -26
- package/src/movethewheels/pages/TrackingPage.tsx +50 -47
- package/src/movethewheels/pages/VehicleDetailsPage.tsx +49 -24
- package/src/movethewheels/pages/VehiclesPage.tsx +33 -1
- package/src/movethewheels/pages/WarehouseDetailsPage.tsx +55 -30
- package/src/movethewheels/pages/WarehousesPage.tsx +42 -4
- package/dist/CreateOrderPage-C9Vb57Yn.js +0 -471
- package/dist/CustomerDetailsPage-BVkHRZvi.js +0 -239
- package/dist/CustomersPage-DhQg-6h_.js +0 -118
- package/dist/DataTable-CfWvFw5B.js +0 -239
- package/dist/DriverDetailsPage-DaaCQ-2O.js +0 -297
- package/dist/DriversPage-D0RMBB_t.js +0 -129
- package/dist/FinancePage-BUXqW1IM.js +0 -154
- package/dist/ImportExportPage-BM1BoRcE.js +0 -232
- package/dist/LiveTrackingPage-DqcGXdkw.js +0 -332
- package/dist/MarketplacePage-DFqsxNYU.js +0 -192
- package/dist/OrderDetailsPage-Dx1m3cVA.js +0 -398
- package/dist/OrdersListPage-DHYBGrWf.js +0 -256
- package/dist/ProductDetailsPage-DOXO90kb.js +0 -168
- package/dist/ProductsPage-RLMTwWN0.js +0 -133
- package/dist/RouteDetailsPage-xzFDeR-X.js +0 -240
- package/dist/RoutesPage-DDFy1QVi.js +0 -118
- package/dist/SettingsPage-JH_-UPbf.js +0 -247
- package/dist/VehicleDetailsPage-P4xDttKw.js +0 -194
- package/dist/VehiclesPage-tJZ64QKV.js +0 -129
- package/dist/WarehouseDetailsPage-Bt_w2Yf7.js +0 -215
- package/dist/WarehousesPage-HsPpEFeG.js +0 -126
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { i as e, o as t, s as n } from "./PageLayout-D3N8MCTm.js";
|
|
2
|
+
import { t as r } from "./DataTable-CD9ZhpLB.js";
|
|
3
|
+
import { t as i } from "./download-Dpa9vqoG.js";
|
|
4
|
+
import { t as a } from "./plus-Dl1rLeJR.js";
|
|
5
|
+
import { t as o } from "./refresh-cw-CWfERAit.js";
|
|
6
|
+
import { t as s } from "./star-YsVV3MNQ.js";
|
|
7
|
+
import { t as c } from "./users-g2N0eL-Z.js";
|
|
8
|
+
import { r as l } from "./graphqlClient-CdJyR_ed.js";
|
|
9
|
+
import { n as u } from "./useFleet-BdETplNE.js";
|
|
10
|
+
import { r as d } from "./StatusBadge-CijYQXtb.js";
|
|
11
|
+
import { r as f } from "./formatters-_vJlC-47.js";
|
|
12
|
+
import { t as p } from "./navigation-BgnOfsVd.js";
|
|
13
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
14
|
+
import { CTAOverflowMenu as g, EmphasisPanel as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
|
|
15
|
+
//#region src/movethewheels/pages/DriversPage.tsx
|
|
16
|
+
function y() {
|
|
17
|
+
let { basePath: y, navigate: b } = l(), { drivers: x, totalDrivers: S, isLoading: C, refetch: w } = u(), T = (e) => b?.(p(y, e));
|
|
18
|
+
return /* @__PURE__ */ h(e, {
|
|
19
|
+
title: "Drivers",
|
|
20
|
+
subtitle: `${S} drivers`,
|
|
21
|
+
icon: /* @__PURE__ */ m(c, { size: 24 }),
|
|
22
|
+
headerActions: /* @__PURE__ */ m(g, {
|
|
23
|
+
primary: {
|
|
24
|
+
label: "Add Driver",
|
|
25
|
+
icon: /* @__PURE__ */ m(a, { size: 16 }),
|
|
26
|
+
onSelect: () => {}
|
|
27
|
+
},
|
|
28
|
+
actions: [{
|
|
29
|
+
label: "Refresh",
|
|
30
|
+
icon: /* @__PURE__ */ m(o, { size: 16 }),
|
|
31
|
+
onSelect: () => w()
|
|
32
|
+
}, {
|
|
33
|
+
label: "Export",
|
|
34
|
+
icon: /* @__PURE__ */ m(i, { size: 16 }),
|
|
35
|
+
onSelect: () => {}
|
|
36
|
+
}]
|
|
37
|
+
}),
|
|
38
|
+
children: [
|
|
39
|
+
/* @__PURE__ */ m(v, {
|
|
40
|
+
icon: /* @__PURE__ */ m(c, { size: 18 }),
|
|
41
|
+
children: "Your delivery workforce. Track each driver's availability, performance rating, completed deliveries and license status here — open a driver to review their history before assigning them to an order or route."
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m("p", {
|
|
44
|
+
className: "text-sm font-medium text-text-secondary",
|
|
45
|
+
children: "Workforce at a glance"
|
|
46
|
+
}), /* @__PURE__ */ h("div", {
|
|
47
|
+
className: "mt-3 grid grid-cols-3 gap-4",
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
50
|
+
className: "text-2xl font-bold text-text-primary tabular-nums",
|
|
51
|
+
children: S
|
|
52
|
+
}), /* @__PURE__ */ m("p", {
|
|
53
|
+
className: "text-xs text-text-secondary",
|
|
54
|
+
children: "Total drivers"
|
|
55
|
+
})] }),
|
|
56
|
+
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
57
|
+
className: "text-2xl font-bold text-text-primary tabular-nums",
|
|
58
|
+
children: x.filter((e) => e.status === "available" || e.status === "busy").length
|
|
59
|
+
}), /* @__PURE__ */ m("p", {
|
|
60
|
+
className: "text-xs text-text-secondary",
|
|
61
|
+
children: "On duty / available"
|
|
62
|
+
})] }),
|
|
63
|
+
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
64
|
+
className: "text-2xl font-bold text-text-primary tabular-nums",
|
|
65
|
+
children: x.length > 0 ? (x.reduce((e, t) => e + t.ratings.overall, 0) / x.length).toFixed(1) : "—"
|
|
66
|
+
}), /* @__PURE__ */ m("p", {
|
|
67
|
+
className: "text-xs text-text-secondary",
|
|
68
|
+
children: "Avg rating"
|
|
69
|
+
})] })
|
|
70
|
+
]
|
|
71
|
+
})] }),
|
|
72
|
+
/* @__PURE__ */ m(r, {
|
|
73
|
+
columns: [
|
|
74
|
+
{
|
|
75
|
+
id: "driver",
|
|
76
|
+
header: "Driver",
|
|
77
|
+
cell: (e) => /* @__PURE__ */ h("div", {
|
|
78
|
+
className: "flex items-center gap-3",
|
|
79
|
+
children: [/* @__PURE__ */ m(t, { children: /* @__PURE__ */ m(n, { children: e.fullName.split(" ").map((e) => e[0]).join("") }) }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
80
|
+
className: "font-medium",
|
|
81
|
+
children: e.fullName
|
|
82
|
+
}), /* @__PURE__ */ m("p", {
|
|
83
|
+
className: "text-sm text-text-secondary",
|
|
84
|
+
children: e.employeeId
|
|
85
|
+
})] })]
|
|
86
|
+
})
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: "status",
|
|
90
|
+
header: "Status",
|
|
91
|
+
accessorKey: "status",
|
|
92
|
+
sortable: !0,
|
|
93
|
+
cell: (e) => /* @__PURE__ */ m(d, {
|
|
94
|
+
status: e.status,
|
|
95
|
+
type: "driver"
|
|
96
|
+
})
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "rating",
|
|
100
|
+
header: "Rating",
|
|
101
|
+
cell: (e) => /* @__PURE__ */ h("div", {
|
|
102
|
+
className: "flex items-center gap-1",
|
|
103
|
+
children: [
|
|
104
|
+
/* @__PURE__ */ m(s, {
|
|
105
|
+
size: 14,
|
|
106
|
+
className: "text-yellow-500 fill-yellow-500"
|
|
107
|
+
}),
|
|
108
|
+
/* @__PURE__ */ m("span", {
|
|
109
|
+
className: "font-medium",
|
|
110
|
+
children: e.ratings.overall.toFixed(1)
|
|
111
|
+
}),
|
|
112
|
+
/* @__PURE__ */ h("span", {
|
|
113
|
+
className: "text-text-secondary text-sm",
|
|
114
|
+
children: [
|
|
115
|
+
"(",
|
|
116
|
+
e.ratings.totalRatings,
|
|
117
|
+
")"
|
|
118
|
+
]
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
})
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: "deliveries",
|
|
125
|
+
header: "Deliveries",
|
|
126
|
+
accessorKey: "completedOrders",
|
|
127
|
+
sortable: !0,
|
|
128
|
+
cell: (e) => /* @__PURE__ */ m("span", {
|
|
129
|
+
className: "font-medium",
|
|
130
|
+
children: e.completedOrders.toLocaleString()
|
|
131
|
+
})
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: "license",
|
|
135
|
+
header: "License",
|
|
136
|
+
cell: (e) => /* @__PURE__ */ h("div", {
|
|
137
|
+
className: "text-sm",
|
|
138
|
+
children: [/* @__PURE__ */ m("p", { children: e.licenseType }), /* @__PURE__ */ h("p", {
|
|
139
|
+
className: "text-text-secondary",
|
|
140
|
+
children: ["Exp: ", f(e.licenseExpiry, "short")]
|
|
141
|
+
})]
|
|
142
|
+
})
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "joined",
|
|
146
|
+
header: "Join Date",
|
|
147
|
+
accessorKey: "joinDate",
|
|
148
|
+
sortable: !0,
|
|
149
|
+
cell: (e) => f(e.joinDate, "short")
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
data: x,
|
|
153
|
+
isLoading: C,
|
|
154
|
+
searchable: !0,
|
|
155
|
+
searchPlaceholder: "Search drivers...",
|
|
156
|
+
searchFields: ["fullName", "employeeId"],
|
|
157
|
+
onRowClick: (e) => T(`fleet/drivers/${e.id}`),
|
|
158
|
+
getRowId: (e) => e.id,
|
|
159
|
+
emptyIllustration: "empty-people",
|
|
160
|
+
emptyTitle: "No drivers yet",
|
|
161
|
+
emptyDescription: "Add drivers to start assigning deliveries and routes."
|
|
162
|
+
})
|
|
163
|
+
]
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//#endregion
|
|
167
|
+
export { y as default };
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { d as e, f as t, g as n, h as r, i, it as a, u as o } from "./PageLayout-D3N8MCTm.js";
|
|
2
|
+
import { t as s } from "./dollar-sign-IB4O0wuQ.js";
|
|
3
|
+
import { t as c } from "./download-Dpa9vqoG.js";
|
|
4
|
+
import { t as l } from "./file-text-C8Uioy11.js";
|
|
5
|
+
import { t as u } from "./trending-up-C-85AwGT.js";
|
|
6
|
+
import { n as d } from "./useOrders-D_3_hGMp.js";
|
|
7
|
+
import { t as f } from "./useAnalytics-ph7eTIK6.js";
|
|
8
|
+
import { r as p, t as m } from "./MetricCard-B7yMyvMX.js";
|
|
9
|
+
import { n as h } from "./formatters-_vJlC-47.js";
|
|
10
|
+
import { jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
11
|
+
import { EmphasisPanel as v, IllustratedEmptyState as y, PagePurpose as b } from "@burdenoff/fe-libs/ui";
|
|
12
|
+
//#region node_modules/lucide-react/dist/esm/icons/credit-card.js
|
|
13
|
+
var x = a("CreditCard", [["rect", {
|
|
14
|
+
width: "20",
|
|
15
|
+
height: "14",
|
|
16
|
+
x: "2",
|
|
17
|
+
y: "5",
|
|
18
|
+
rx: "2",
|
|
19
|
+
key: "ynyp8z"
|
|
20
|
+
}], ["line", {
|
|
21
|
+
x1: "2",
|
|
22
|
+
x2: "22",
|
|
23
|
+
y1: "10",
|
|
24
|
+
y2: "10",
|
|
25
|
+
key: "1b3vmo"
|
|
26
|
+
}]]);
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/movethewheels/pages/FinancePage.tsx
|
|
29
|
+
function S() {
|
|
30
|
+
let { analytics: a } = f(), { stats: S } = d(), C = S.totalRevenue * .15, w = S.totalRevenue * .85;
|
|
31
|
+
return /* @__PURE__ */ _(i, {
|
|
32
|
+
title: "Finance",
|
|
33
|
+
subtitle: "Financial overview and reports",
|
|
34
|
+
icon: /* @__PURE__ */ g(s, { size: 24 }),
|
|
35
|
+
headerActions: /* @__PURE__ */ _("div", {
|
|
36
|
+
className: "flex gap-2",
|
|
37
|
+
children: [/* @__PURE__ */ _(o, {
|
|
38
|
+
variant: "outline",
|
|
39
|
+
children: [/* @__PURE__ */ g(l, { size: 16 }), " Invoices"]
|
|
40
|
+
}), /* @__PURE__ */ _(o, {
|
|
41
|
+
variant: "outline",
|
|
42
|
+
children: [/* @__PURE__ */ g(c, { size: 16 }), " Export"]
|
|
43
|
+
})]
|
|
44
|
+
}),
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ g(b, {
|
|
47
|
+
icon: /* @__PURE__ */ g(s, { size: 18 }),
|
|
48
|
+
children: "Follow the money behind your deliveries. See revenue earned, what's been collected versus still owed, and average order value — use it to chase pending payments, forecast cash flow, and confirm which shipments have actually been paid for."
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ _(p, {
|
|
51
|
+
columns: 4,
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ g(m, {
|
|
54
|
+
treatment: "glass",
|
|
55
|
+
glow: !0,
|
|
56
|
+
label: "Total Revenue",
|
|
57
|
+
value: h(a.overview.totalRevenue),
|
|
58
|
+
icon: /* @__PURE__ */ g(s, { size: 20 }),
|
|
59
|
+
change: "+12.5%",
|
|
60
|
+
changeType: "positive",
|
|
61
|
+
trend: "up"
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ g(m, {
|
|
64
|
+
label: "Completed",
|
|
65
|
+
value: h(w),
|
|
66
|
+
icon: /* @__PURE__ */ g(u, { size: 20 }),
|
|
67
|
+
changeType: "positive"
|
|
68
|
+
}),
|
|
69
|
+
/* @__PURE__ */ g(m, {
|
|
70
|
+
label: "Pending",
|
|
71
|
+
value: h(C),
|
|
72
|
+
icon: /* @__PURE__ */ g(x, { size: 20 }),
|
|
73
|
+
changeType: "neutral"
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ g(m, {
|
|
76
|
+
label: "Avg Order Value",
|
|
77
|
+
value: h(S.avgOrderValue),
|
|
78
|
+
icon: /* @__PURE__ */ g(s, { size: 20 })
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
}),
|
|
82
|
+
/* @__PURE__ */ _("div", {
|
|
83
|
+
className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
|
|
84
|
+
children: [/* @__PURE__ */ _(e, { children: [/* @__PURE__ */ g(r, { children: /* @__PURE__ */ g(n, { children: "Revenue by Month" }) }), /* @__PURE__ */ g(t, { children: /* @__PURE__ */ g("div", {
|
|
85
|
+
className: "space-y-4",
|
|
86
|
+
children: a.trends.revenue.map((e) => /* @__PURE__ */ _("div", {
|
|
87
|
+
className: "flex items-center justify-between p-3 bg-bg-sunken/50 rounded-lg",
|
|
88
|
+
children: [/* @__PURE__ */ _("span", {
|
|
89
|
+
className: "font-medium",
|
|
90
|
+
children: [e.month, " 2024"]
|
|
91
|
+
}), /* @__PURE__ */ g("span", {
|
|
92
|
+
className: "text-lg font-bold",
|
|
93
|
+
children: h(e.revenue)
|
|
94
|
+
})]
|
|
95
|
+
}, e.month))
|
|
96
|
+
}) })] }), /* @__PURE__ */ _(v, {
|
|
97
|
+
className: "space-y-4",
|
|
98
|
+
children: [/* @__PURE__ */ g("h2", {
|
|
99
|
+
className: "text-base font-semibold text-text-primary",
|
|
100
|
+
children: "Payment Status"
|
|
101
|
+
}), /* @__PURE__ */ _("div", {
|
|
102
|
+
className: "space-y-4",
|
|
103
|
+
children: [/* @__PURE__ */ _("div", {
|
|
104
|
+
className: "flex items-center justify-between p-4 bg-status-success-bg/10 rounded-lg",
|
|
105
|
+
children: [/* @__PURE__ */ _("div", {
|
|
106
|
+
className: "flex items-center gap-3",
|
|
107
|
+
children: [/* @__PURE__ */ g("div", {
|
|
108
|
+
className: "w-10 h-10 rounded-full bg-status-success-bg/20 flex items-center justify-center",
|
|
109
|
+
children: /* @__PURE__ */ g(u, {
|
|
110
|
+
size: 20,
|
|
111
|
+
className: "text-status-success-text"
|
|
112
|
+
})
|
|
113
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
114
|
+
className: "font-medium",
|
|
115
|
+
children: "Paid"
|
|
116
|
+
}), /* @__PURE__ */ _("p", {
|
|
117
|
+
className: "text-sm text-text-secondary",
|
|
118
|
+
children: [S.byStatus.delivered, " orders"]
|
|
119
|
+
})] })]
|
|
120
|
+
}), /* @__PURE__ */ g("span", {
|
|
121
|
+
className: "text-xl font-bold text-status-success-text",
|
|
122
|
+
children: h(w)
|
|
123
|
+
})]
|
|
124
|
+
}), /* @__PURE__ */ _("div", {
|
|
125
|
+
className: "flex items-center justify-between p-4 bg-status-warning-bg/10 rounded-lg",
|
|
126
|
+
children: [/* @__PURE__ */ _("div", {
|
|
127
|
+
className: "flex items-center gap-3",
|
|
128
|
+
children: [/* @__PURE__ */ g("div", {
|
|
129
|
+
className: "w-10 h-10 rounded-full bg-status-warning-bg/20 flex items-center justify-center",
|
|
130
|
+
children: /* @__PURE__ */ g(x, {
|
|
131
|
+
size: 20,
|
|
132
|
+
className: "text-status-warning-text"
|
|
133
|
+
})
|
|
134
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
135
|
+
className: "font-medium",
|
|
136
|
+
children: "Pending"
|
|
137
|
+
}), /* @__PURE__ */ _("p", {
|
|
138
|
+
className: "text-sm text-text-secondary",
|
|
139
|
+
children: [S.byStatus.pending + S.byStatus.in_transit, " orders"]
|
|
140
|
+
})] })]
|
|
141
|
+
}), /* @__PURE__ */ g("span", {
|
|
142
|
+
className: "text-xl font-bold text-status-warning-text",
|
|
143
|
+
children: h(C)
|
|
144
|
+
})]
|
|
145
|
+
})]
|
|
146
|
+
})]
|
|
147
|
+
})]
|
|
148
|
+
}),
|
|
149
|
+
/* @__PURE__ */ _(e, { children: [/* @__PURE__ */ g(r, { children: /* @__PURE__ */ g(n, { children: "Recent Transactions" }) }), /* @__PURE__ */ g(t, { children: /* @__PURE__ */ g(y, {
|
|
150
|
+
illustration: "empty-data",
|
|
151
|
+
title: "No transactions yet",
|
|
152
|
+
description: "Once payments are processed, your transaction history will appear here. Connect a payment gateway to start recording transactions."
|
|
153
|
+
}) })] })
|
|
154
|
+
]
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
//#endregion
|
|
158
|
+
export { S as default };
|
|
@@ -10,75 +10,107 @@ import { r as b, t as x } from "./MetricCard-B7yMyvMX.js";
|
|
|
10
10
|
import { a as S, r as C } from "./StatusBadge-CijYQXtb.js";
|
|
11
11
|
import { t as w } from "./navigation-BgnOfsVd.js";
|
|
12
12
|
import { jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
13
|
-
import { CTAOverflowMenu as D } from "@burdenoff/fe-libs/ui";
|
|
14
|
-
import { useI18n as
|
|
13
|
+
import { CTAOverflowMenu as D, EmphasisPanel as O, NextSteps as k, PagePurpose as A } from "@burdenoff/fe-libs/ui";
|
|
14
|
+
import { useI18n as j } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
15
15
|
//#region src/movethewheels/pages/FleetPage.tsx
|
|
16
|
-
function
|
|
17
|
-
let { t:
|
|
18
|
-
let n =
|
|
16
|
+
function M() {
|
|
17
|
+
let { t: M } = j(), N = (e, t) => {
|
|
18
|
+
let n = M(e);
|
|
19
19
|
return n === e ? t : n;
|
|
20
|
-
}, { basePath:
|
|
21
|
-
|
|
20
|
+
}, { basePath: P, navigate: F } = g(), { stats: I } = _(), { vehicles: L } = y(), { drivers: R } = v(), z = (e) => {
|
|
21
|
+
F && F(w(P, e));
|
|
22
22
|
};
|
|
23
23
|
return /* @__PURE__ */ E(o, {
|
|
24
|
-
title:
|
|
25
|
-
subtitle:
|
|
24
|
+
title: N("movethewheels.fleet.title", "Fleet Management"),
|
|
25
|
+
subtitle: N("movethewheels.fleet.subtitle", "Manage your vehicles and drivers"),
|
|
26
26
|
icon: /* @__PURE__ */ T(m, { size: 24 }),
|
|
27
27
|
headerActions: /* @__PURE__ */ T(D, {
|
|
28
28
|
primary: {
|
|
29
|
-
label:
|
|
29
|
+
label: N("movethewheels.fleet.actions.allVehicles", "All Vehicles"),
|
|
30
30
|
icon: /* @__PURE__ */ T(m, { size: 16 }),
|
|
31
|
-
onSelect: () =>
|
|
31
|
+
onSelect: () => z("fleet/vehicles")
|
|
32
32
|
},
|
|
33
33
|
actions: [{
|
|
34
|
-
label:
|
|
34
|
+
label: N("movethewheels.fleet.actions.allDrivers", "All Drivers"),
|
|
35
35
|
icon: /* @__PURE__ */ T(h, { size: 16 }),
|
|
36
|
-
onSelect: () =>
|
|
36
|
+
onSelect: () => z("fleet/drivers")
|
|
37
37
|
}]
|
|
38
38
|
}),
|
|
39
39
|
children: [
|
|
40
|
+
/* @__PURE__ */ T(A, {
|
|
41
|
+
icon: /* @__PURE__ */ T(m, { size: 18 }),
|
|
42
|
+
children: N("movethewheels.fleet.purpose", "Your command center for vehicles and drivers. See utilization at a glance, keep an eye on availability and ratings, and act on maintenance alerts so you always have road-ready capacity to fulfil orders.")
|
|
43
|
+
}),
|
|
44
|
+
/* @__PURE__ */ T(k, {
|
|
45
|
+
storageKey: "movethewheels-fleet",
|
|
46
|
+
steps: [
|
|
47
|
+
{
|
|
48
|
+
id: "vehicles",
|
|
49
|
+
label: N("movethewheels.fleet.nextSteps.vehicles", "Review your vehicles"),
|
|
50
|
+
description: N("movethewheels.fleet.nextSteps.vehiclesDesc", "Check capacity, fuel and maintenance status across the fleet."),
|
|
51
|
+
icon: /* @__PURE__ */ T(m, { size: 16 }),
|
|
52
|
+
onClick: () => z("fleet/vehicles")
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "drivers",
|
|
56
|
+
label: N("movethewheels.fleet.nextSteps.drivers", "Review your drivers"),
|
|
57
|
+
description: N("movethewheels.fleet.nextSteps.driversDesc", "See availability, ratings and delivery history before assigning work."),
|
|
58
|
+
icon: /* @__PURE__ */ T(h, { size: 16 }),
|
|
59
|
+
onClick: () => z("fleet/drivers")
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: "assign",
|
|
63
|
+
label: N("movethewheels.fleet.nextSteps.assign", "Assign capacity to orders"),
|
|
64
|
+
description: N("movethewheels.fleet.nextSteps.assignDesc", "Open an order to assign an available vehicle and driver."),
|
|
65
|
+
icon: /* @__PURE__ */ T(u, { size: 16 }),
|
|
66
|
+
onClick: () => z("orders")
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}),
|
|
40
70
|
/* @__PURE__ */ E(b, {
|
|
41
71
|
columns: 4,
|
|
42
72
|
children: [
|
|
43
73
|
/* @__PURE__ */ T(x, {
|
|
44
|
-
label:
|
|
45
|
-
value:
|
|
74
|
+
label: N("movethewheels.fleet.metrics.totalVehicles", "Total Vehicles"),
|
|
75
|
+
value: I.totalVehicles,
|
|
46
76
|
icon: /* @__PURE__ */ T(m, { size: 20 }),
|
|
47
|
-
subtitle: `${
|
|
48
|
-
onClick: () =>
|
|
77
|
+
subtitle: `${I.vehiclesByStatus.available} ${N("movethewheels.fleet.metrics.available", "available")}`,
|
|
78
|
+
onClick: () => z("fleet/vehicles")
|
|
49
79
|
}),
|
|
50
80
|
/* @__PURE__ */ T(x, {
|
|
51
|
-
label:
|
|
52
|
-
value:
|
|
81
|
+
label: N("movethewheels.fleet.metrics.totalDrivers", "Total Drivers"),
|
|
82
|
+
value: I.totalDrivers,
|
|
53
83
|
icon: /* @__PURE__ */ T(h, { size: 20 }),
|
|
54
|
-
subtitle: `${
|
|
55
|
-
onClick: () =>
|
|
84
|
+
subtitle: `${I.driversByStatus.available} ${N("movethewheels.fleet.metrics.available", "available")}`,
|
|
85
|
+
onClick: () => z("fleet/drivers")
|
|
56
86
|
}),
|
|
57
87
|
/* @__PURE__ */ T(x, {
|
|
58
|
-
|
|
59
|
-
|
|
88
|
+
treatment: "glass",
|
|
89
|
+
glow: !0,
|
|
90
|
+
label: N("movethewheels.fleet.metrics.utilization", "Fleet Utilization"),
|
|
91
|
+
value: `${I.utilization.toFixed(0)}%`,
|
|
60
92
|
icon: /* @__PURE__ */ T(m, { size: 20 }),
|
|
61
|
-
changeType:
|
|
93
|
+
changeType: I.utilization >= 70 ? "positive" : "neutral"
|
|
62
94
|
}),
|
|
63
95
|
/* @__PURE__ */ T(x, {
|
|
64
|
-
label:
|
|
65
|
-
value:
|
|
96
|
+
label: N("movethewheels.fleet.metrics.avgDriverRating", "Avg Driver Rating"),
|
|
97
|
+
value: I.avgDriverRating.toFixed(1),
|
|
66
98
|
icon: /* @__PURE__ */ T(p, { size: 20 }),
|
|
67
|
-
subtitle:
|
|
68
|
-
changeType:
|
|
99
|
+
subtitle: N("movethewheels.fleet.metrics.outOfFive", "out of 5"),
|
|
100
|
+
changeType: I.avgDriverRating >= 4.5 ? "positive" : "neutral"
|
|
69
101
|
})
|
|
70
102
|
]
|
|
71
103
|
}),
|
|
72
104
|
/* @__PURE__ */ E("div", {
|
|
73
105
|
className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
|
|
74
106
|
children: [/* @__PURE__ */ T(t, {
|
|
75
|
-
title:
|
|
107
|
+
title: N("movethewheels.fleet.vehicles.title", "Vehicles"),
|
|
76
108
|
actions: /* @__PURE__ */ E(l, {
|
|
77
109
|
variant: "ghost",
|
|
78
110
|
size: "sm",
|
|
79
|
-
onClick: () =>
|
|
111
|
+
onClick: () => z("fleet/vehicles"),
|
|
80
112
|
children: [
|
|
81
|
-
|
|
113
|
+
N("movethewheels.fleet.common.viewAll", "View all"),
|
|
82
114
|
" ",
|
|
83
115
|
/* @__PURE__ */ T(u, { size: 16 })
|
|
84
116
|
]
|
|
@@ -87,9 +119,9 @@ function k() {
|
|
|
87
119
|
className: "p-0",
|
|
88
120
|
children: /* @__PURE__ */ T("div", {
|
|
89
121
|
className: "divide-y",
|
|
90
|
-
children:
|
|
122
|
+
children: L.slice(0, 5).map((t) => /* @__PURE__ */ T("div", {
|
|
91
123
|
className: "p-4 hover:bg-bg-sunken/50 cursor-pointer transition-colors",
|
|
92
|
-
onClick: () =>
|
|
124
|
+
onClick: () => z(`fleet/vehicles/${t.id}`),
|
|
93
125
|
children: /* @__PURE__ */ E("div", {
|
|
94
126
|
className: "flex items-center justify-between",
|
|
95
127
|
children: [/* @__PURE__ */ E("div", {
|
|
@@ -149,13 +181,13 @@ function k() {
|
|
|
149
181
|
})
|
|
150
182
|
}) })
|
|
151
183
|
}), /* @__PURE__ */ T(t, {
|
|
152
|
-
title:
|
|
184
|
+
title: N("movethewheels.fleet.drivers.title", "Drivers"),
|
|
153
185
|
actions: /* @__PURE__ */ E(l, {
|
|
154
186
|
variant: "ghost",
|
|
155
187
|
size: "sm",
|
|
156
|
-
onClick: () =>
|
|
188
|
+
onClick: () => z("fleet/drivers"),
|
|
157
189
|
children: [
|
|
158
|
-
|
|
190
|
+
N("movethewheels.fleet.common.viewAll", "View all"),
|
|
159
191
|
" ",
|
|
160
192
|
/* @__PURE__ */ T(u, { size: 16 })
|
|
161
193
|
]
|
|
@@ -164,9 +196,9 @@ function k() {
|
|
|
164
196
|
className: "p-0",
|
|
165
197
|
children: /* @__PURE__ */ T("div", {
|
|
166
198
|
className: "divide-y",
|
|
167
|
-
children:
|
|
199
|
+
children: R.slice(0, 5).map((e) => /* @__PURE__ */ T("div", {
|
|
168
200
|
className: "p-4 hover:bg-bg-sunken/50 cursor-pointer transition-colors",
|
|
169
|
-
onClick: () =>
|
|
201
|
+
onClick: () => z(`fleet/drivers/${e.id}`),
|
|
170
202
|
children: /* @__PURE__ */ E("div", {
|
|
171
203
|
className: "flex items-center justify-between",
|
|
172
204
|
children: [/* @__PURE__ */ E("div", {
|
|
@@ -181,7 +213,7 @@ function k() {
|
|
|
181
213
|
" - ",
|
|
182
214
|
e.completedOrders,
|
|
183
215
|
" ",
|
|
184
|
-
|
|
216
|
+
N("movethewheels.fleet.drivers.deliveries", "deliveries")
|
|
185
217
|
]
|
|
186
218
|
})] })]
|
|
187
219
|
}), /* @__PURE__ */ E("div", {
|
|
@@ -209,30 +241,36 @@ function k() {
|
|
|
209
241
|
}),
|
|
210
242
|
/* @__PURE__ */ E("div", {
|
|
211
243
|
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
|
212
|
-
children: [/* @__PURE__ */ E(
|
|
244
|
+
children: [/* @__PURE__ */ E(O, {
|
|
213
245
|
className: "space-y-4",
|
|
214
|
-
children:
|
|
215
|
-
className: "
|
|
216
|
-
children:
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}), /* @__PURE__ */
|
|
228
|
-
|
|
229
|
-
|
|
246
|
+
children: [/* @__PURE__ */ T("h2", {
|
|
247
|
+
className: "text-base font-semibold text-text-primary",
|
|
248
|
+
children: N("movethewheels.fleet.status.vehicleTitle", "Vehicle Status")
|
|
249
|
+
}), /* @__PURE__ */ T("div", {
|
|
250
|
+
className: "space-y-4",
|
|
251
|
+
children: Object.entries(I.vehiclesByStatus).map(([t, n]) => /* @__PURE__ */ E("div", {
|
|
252
|
+
className: "flex items-center justify-between",
|
|
253
|
+
children: [/* @__PURE__ */ T("div", {
|
|
254
|
+
className: "flex items-center gap-3",
|
|
255
|
+
children: /* @__PURE__ */ T(C, {
|
|
256
|
+
status: t,
|
|
257
|
+
type: "vehicle"
|
|
258
|
+
})
|
|
259
|
+
}), /* @__PURE__ */ E("div", {
|
|
260
|
+
className: "flex items-center gap-3",
|
|
261
|
+
children: [/* @__PURE__ */ T("span", {
|
|
262
|
+
className: "font-medium",
|
|
263
|
+
children: n
|
|
264
|
+
}), /* @__PURE__ */ T(e, {
|
|
265
|
+
value: n / I.totalVehicles * 100,
|
|
266
|
+
className: "w-24 h-2"
|
|
267
|
+
})]
|
|
230
268
|
})]
|
|
231
|
-
})
|
|
232
|
-
}
|
|
233
|
-
})
|
|
269
|
+
}, t))
|
|
270
|
+
})]
|
|
271
|
+
}), /* @__PURE__ */ E(n, { children: [/* @__PURE__ */ T(a, { children: /* @__PURE__ */ T(i, { children: N("movethewheels.fleet.status.driverTitle", "Driver Status") }) }), /* @__PURE__ */ T(r, { children: /* @__PURE__ */ T("div", {
|
|
234
272
|
className: "space-y-4",
|
|
235
|
-
children: Object.entries(
|
|
273
|
+
children: Object.entries(I.driversByStatus).map(([t, n]) => /* @__PURE__ */ E("div", {
|
|
236
274
|
className: "flex items-center justify-between",
|
|
237
275
|
children: [/* @__PURE__ */ T("div", {
|
|
238
276
|
className: "flex items-center gap-3",
|
|
@@ -246,27 +284,27 @@ function k() {
|
|
|
246
284
|
className: "font-medium",
|
|
247
285
|
children: n
|
|
248
286
|
}), /* @__PURE__ */ T(e, {
|
|
249
|
-
value: n /
|
|
287
|
+
value: n / I.totalDrivers * 100,
|
|
250
288
|
className: "w-24 h-2"
|
|
251
289
|
})]
|
|
252
290
|
})]
|
|
253
291
|
}, t))
|
|
254
292
|
}) })] })]
|
|
255
293
|
}),
|
|
256
|
-
|
|
257
|
-
className: "border-
|
|
294
|
+
I.vehiclesByStatus.maintenance > 0 && /* @__PURE__ */ E(n, {
|
|
295
|
+
className: "border-status-warning-border",
|
|
258
296
|
children: [/* @__PURE__ */ T(a, { children: /* @__PURE__ */ E(i, {
|
|
259
|
-
className: "flex items-center gap-2 text-
|
|
260
|
-
children: [/* @__PURE__ */ T(f, { size: 18 }),
|
|
297
|
+
className: "flex items-center gap-2 text-status-warning-text",
|
|
298
|
+
children: [/* @__PURE__ */ T(f, { size: 18 }), N("movethewheels.fleet.maintenance.title", "Maintenance Required")]
|
|
261
299
|
}) }), /* @__PURE__ */ T(r, { children: /* @__PURE__ */ T("div", {
|
|
262
300
|
className: "space-y-3",
|
|
263
|
-
children:
|
|
264
|
-
className: "flex items-center justify-between p-3 bg-
|
|
301
|
+
children: L.filter((e) => e.status === "maintenance").map((e) => /* @__PURE__ */ E("div", {
|
|
302
|
+
className: "flex items-center justify-between p-3 bg-status-warning-bg/10 rounded-lg",
|
|
265
303
|
children: [/* @__PURE__ */ E("div", {
|
|
266
304
|
className: "flex items-center gap-3",
|
|
267
305
|
children: [/* @__PURE__ */ T(m, {
|
|
268
306
|
size: 20,
|
|
269
|
-
className: "text-
|
|
307
|
+
className: "text-status-warning-text"
|
|
270
308
|
}), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("p", {
|
|
271
309
|
className: "font-medium",
|
|
272
310
|
children: e.vehicleNumber
|
|
@@ -281,8 +319,8 @@ function k() {
|
|
|
281
319
|
}), /* @__PURE__ */ T(l, {
|
|
282
320
|
variant: "outline",
|
|
283
321
|
size: "sm",
|
|
284
|
-
onClick: () =>
|
|
285
|
-
children:
|
|
322
|
+
onClick: () => z(`fleet/vehicles/${e.id}`),
|
|
323
|
+
children: N("movethewheels.fleet.maintenance.viewDetails", "View Details")
|
|
286
324
|
})]
|
|
287
325
|
}, e.id))
|
|
288
326
|
}) })]
|
|
@@ -291,4 +329,4 @@ function k() {
|
|
|
291
329
|
});
|
|
292
330
|
}
|
|
293
331
|
//#endregion
|
|
294
|
-
export {
|
|
332
|
+
export { M as default };
|