@burdenoff/microfe-movethewheels 2026.1031.2 → 2026.1031.4
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/MoveTheWheelsRoot.js +121 -104
- package/dist/MoveTheWheelsRoutes.js +142 -133
- package/dist/components/DocumentsCard.js +11 -11
- package/dist/components/ProofOfDeliveryCard.js +13 -13
- package/dist/components/ShipmentRiskDialog.js +24 -24
- package/dist/components/ShippingQuoteResults.js +46 -46
- package/dist/components/TrackingAlertList.js +17 -17
- package/dist/generated/tracking-quality-operations.d.ts +140 -0
- package/dist/hooks/useEntityImport.js +68 -0
- package/dist/hooks/useOrderDispatch.js +17 -17
- package/dist/movethewheels/hooks/useEntityImport.d.ts +19 -0
- package/dist/movethewheels/pages/ImportExportPage.d.ts +9 -0
- package/dist/movethewheels/pages/SettingsPage.d.ts +1 -0
- package/dist/movethewheels/providers/ModuleSettingsProvider.d.ts +17 -0
- package/dist/movethewheels/utils/entityImport.d.ts +109 -0
- package/dist/movethewheels/utils/formatters.d.ts +23 -3
- package/dist/movethewheels/utils/moduleSettings.d.ts +52 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-down-up.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/bell.js +11 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-spreadsheet.js +30 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-up.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js +11 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.js +13 -0
- package/dist/pages/AnalyticsPage.js +27 -27
- package/dist/pages/CreateOrderPage.js +340 -317
- package/dist/pages/CustomerDetailsPage.js +246 -246
- package/dist/pages/CustomersPage.js +88 -79
- package/dist/pages/DashboardPage.js +24 -24
- package/dist/pages/DeliveryCapturePage.js +74 -74
- package/dist/pages/DriverDetailsPage.js +337 -337
- package/dist/pages/DriversPage.js +119 -110
- package/dist/pages/FinancePage.js +26 -26
- package/dist/pages/ImportExportPage.js +435 -0
- package/dist/pages/InventoryPage.js +28 -28
- package/dist/pages/LiveTrackingPage.js +108 -108
- package/dist/pages/MarketplacePage.js +44 -44
- package/dist/pages/OrderDetailsPage.js +306 -306
- package/dist/pages/OrdersListPage.js +27 -27
- package/dist/pages/ProductDetailsPage.js +89 -89
- package/dist/pages/ProductsPage.js +86 -77
- package/dist/pages/RouteDetailsPage.js +282 -285
- package/dist/pages/RoutesPage.js +78 -78
- package/dist/pages/SettingsPage.js +459 -0
- package/dist/pages/TrackingPage.js +41 -41
- package/dist/pages/VehicleDetailsPage.js +207 -207
- package/dist/pages/VehiclesPage.js +100 -90
- package/dist/pages/WarehouseDetailsPage.js +132 -132
- package/dist/pages/WarehousesPage.js +97 -88
- package/dist/providers/ModuleSettingsProvider.js +74 -0
- package/dist/utils/entityImport.js +73 -0
- package/dist/utils/formatters.js +53 -26
- package/dist/utils/moduleSettings.js +132 -0
- package/package.json +4 -2
- package/src/generated/tracking-quality-operations.ts +184 -0
- package/src/movethewheels/MoveTheWheelsRoot.tsx +22 -3
- package/src/movethewheels/MoveTheWheelsRoutes.tsx +13 -0
- package/src/movethewheels/hooks/useEntityImport.ts +108 -0
- package/src/movethewheels/pages/CreateOrderPage.tsx +38 -6
- package/src/movethewheels/pages/CustomersPage.tsx +6 -1
- package/src/movethewheels/pages/DriversPage.tsx +6 -0
- package/src/movethewheels/pages/ImportExportPage.tsx +483 -0
- package/src/movethewheels/pages/ProductsPage.tsx +16 -3
- package/src/movethewheels/pages/RouteDetailsPage.tsx +3 -6
- package/src/movethewheels/pages/RoutesPage.tsx +2 -2
- package/src/movethewheels/pages/SettingsPage.tsx +516 -0
- package/src/movethewheels/pages/VehicleDetailsPage.tsx +4 -2
- package/src/movethewheels/pages/VehiclesPage.tsx +8 -1
- package/src/movethewheels/pages/WarehousesPage.tsx +6 -1
- package/src/movethewheels/providers/ModuleSettingsProvider.tsx +133 -0
- package/src/movethewheels/utils/entityImport.ts +239 -0
- package/src/movethewheels/utils/formatters.ts +69 -10
- package/src/movethewheels/utils/moduleSettings.ts +224 -0
|
@@ -3,97 +3,106 @@ import { Download as t } from "../node_modules/lucide-react/dist/esm/icons/downl
|
|
|
3
3
|
import { Plus as n } from "../node_modules/lucide-react/dist/esm/icons/plus.js";
|
|
4
4
|
import { RefreshCw as r } from "../node_modules/lucide-react/dist/esm/icons/refresh-cw.js";
|
|
5
5
|
import { Star as i } from "../node_modules/lucide-react/dist/esm/icons/star.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
6
|
+
import { Upload as a } from "../node_modules/lucide-react/dist/esm/icons/upload.js";
|
|
7
|
+
import { Users as o } from "../node_modules/lucide-react/dist/esm/icons/users.js";
|
|
8
|
+
import { joinPath as s } from "../utils/navigation.js";
|
|
9
|
+
import { useMoveTheWheels as c } from "../providers/MoveTheWheelsProvider.js";
|
|
10
|
+
import { formatDate as l } from "../utils/formatters.js";
|
|
11
|
+
import { useCustomerStats as u, useCustomers as d } from "../hooks/useCustomers.js";
|
|
12
|
+
import { Avatar as f, AvatarFallback as p, Button as m } from "../components/ui.js";
|
|
13
|
+
import { PageLayout as h } from "../components/PageLayout.js";
|
|
14
|
+
import { MetricCard as g, MetricGrid as _ } from "../components/MetricCard.js";
|
|
15
|
+
import { TypeBadge as v } from "../components/StatusBadge.js";
|
|
16
|
+
import { DataTable as y } from "../components/DataTable.js";
|
|
17
|
+
import { useDebouncedValue as b } from "../hooks/useDebouncedValue.js";
|
|
18
|
+
import { useEntityExport as x } from "../hooks/useEntityExport.js";
|
|
19
|
+
import { ExportStatusBanner as S } from "../components/ExportStatusBanner.js";
|
|
20
|
+
import { useState as C } from "react";
|
|
21
|
+
import { jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
22
|
+
import { CTAOverflowMenu as E, PagePurpose as D } from "@burdenoff/fe-libs/ui";
|
|
22
23
|
//#region src/movethewheels/pages/CustomersPage.tsx
|
|
23
|
-
function
|
|
24
|
-
let { basePath:
|
|
25
|
-
limit:
|
|
26
|
-
offset:
|
|
27
|
-
filters: { search:
|
|
28
|
-
}), { stats:
|
|
29
|
-
return /* @__PURE__ */
|
|
24
|
+
function O() {
|
|
25
|
+
let { basePath: O, navigate: k } = c(), { state: A, isExporting: j, startExport: M, dismiss: N } = x("customers", "customer"), [P, F] = C(0), [I, L] = C(25), [R, z] = C(""), B = b(R), { customers: V, totalCustomers: H, hasMore: U, isLoading: W, error: G, refetch: K } = d({
|
|
26
|
+
limit: I,
|
|
27
|
+
offset: P * I,
|
|
28
|
+
filters: { search: B }
|
|
29
|
+
}), { stats: q } = u(), J = (e) => k?.(s(O, e));
|
|
30
|
+
return /* @__PURE__ */ T(h, {
|
|
30
31
|
title: "Customers",
|
|
31
|
-
subtitle: `${
|
|
32
|
-
icon: /* @__PURE__ */
|
|
33
|
-
headerActions: /* @__PURE__ */
|
|
32
|
+
subtitle: `${q.total} customers`,
|
|
33
|
+
icon: /* @__PURE__ */ w(o, { size: 24 }),
|
|
34
|
+
headerActions: /* @__PURE__ */ w(E, {
|
|
34
35
|
primary: {
|
|
35
36
|
label: "Add Customer",
|
|
36
|
-
icon: /* @__PURE__ */
|
|
37
|
-
onSelect: () =>
|
|
37
|
+
icon: /* @__PURE__ */ w(n, { size: 16 }),
|
|
38
|
+
onSelect: () => J("customers/new")
|
|
38
39
|
},
|
|
39
|
-
actions: [
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
actions: [
|
|
41
|
+
{
|
|
42
|
+
label: "Refresh",
|
|
43
|
+
icon: /* @__PURE__ */ w(r, { size: 16 }),
|
|
44
|
+
onSelect: () => K()
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: "Import",
|
|
48
|
+
icon: /* @__PURE__ */ w(a, { size: 16 }),
|
|
49
|
+
onSelect: () => J("import-export?entity=CUSTOMER")
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: j ? "Exporting…" : "Export",
|
|
53
|
+
icon: /* @__PURE__ */ w(t, { size: 16 }),
|
|
54
|
+
onSelect: M
|
|
55
|
+
}
|
|
56
|
+
]
|
|
48
57
|
}),
|
|
49
58
|
children: [
|
|
50
|
-
/* @__PURE__ */
|
|
51
|
-
icon: /* @__PURE__ */
|
|
59
|
+
/* @__PURE__ */ w(D, {
|
|
60
|
+
icon: /* @__PURE__ */ w(o, { size: 18 }),
|
|
52
61
|
children: "The businesses and individuals you deliver for. Keep contact details, locations and satisfaction ratings here, and open a customer to see their order history before booking the next shipment."
|
|
53
62
|
}),
|
|
54
|
-
/* @__PURE__ */
|
|
55
|
-
state:
|
|
56
|
-
onDismiss:
|
|
63
|
+
/* @__PURE__ */ w(S, {
|
|
64
|
+
state: A,
|
|
65
|
+
onDismiss: N
|
|
57
66
|
}),
|
|
58
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
59
68
|
className: "mb-3 text-sm font-medium text-text-secondary",
|
|
60
69
|
children: "Customer base at a glance"
|
|
61
|
-
}), /* @__PURE__ */
|
|
70
|
+
}), /* @__PURE__ */ T(_, {
|
|
62
71
|
columns: 3,
|
|
63
72
|
children: [
|
|
64
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ w(g, {
|
|
65
74
|
label: "Total customers",
|
|
66
|
-
value:
|
|
67
|
-
icon: /* @__PURE__ */
|
|
75
|
+
value: q.total,
|
|
76
|
+
icon: /* @__PURE__ */ w(o, { size: 20 }),
|
|
68
77
|
accent: "brand"
|
|
69
78
|
}),
|
|
70
|
-
/* @__PURE__ */
|
|
79
|
+
/* @__PURE__ */ w(g, {
|
|
71
80
|
label: "Avg. rating",
|
|
72
|
-
value:
|
|
73
|
-
icon: /* @__PURE__ */
|
|
81
|
+
value: q.avgRating > 0 ? q.avgRating.toFixed(1) : "—",
|
|
82
|
+
icon: /* @__PURE__ */ w(i, { size: 20 }),
|
|
74
83
|
accent: "success",
|
|
75
84
|
subtitle: "Across all customers"
|
|
76
85
|
}),
|
|
77
|
-
/* @__PURE__ */
|
|
86
|
+
/* @__PURE__ */ w(g, {
|
|
78
87
|
label: "Business accounts",
|
|
79
|
-
value:
|
|
80
|
-
icon: /* @__PURE__ */
|
|
88
|
+
value: q.b2b,
|
|
89
|
+
icon: /* @__PURE__ */ w(e, { size: 20 }),
|
|
81
90
|
accent: "blue",
|
|
82
91
|
subtitle: "B2B relationships"
|
|
83
92
|
})
|
|
84
93
|
]
|
|
85
94
|
})] }),
|
|
86
|
-
/* @__PURE__ */
|
|
95
|
+
/* @__PURE__ */ w(y, {
|
|
87
96
|
columns: [
|
|
88
97
|
{
|
|
89
98
|
id: "customer",
|
|
90
99
|
header: "Customer",
|
|
91
|
-
cell: (e) => /* @__PURE__ */
|
|
100
|
+
cell: (e) => /* @__PURE__ */ T("div", {
|
|
92
101
|
className: "flex items-center gap-3",
|
|
93
|
-
children: [/* @__PURE__ */
|
|
102
|
+
children: [/* @__PURE__ */ w(f, { children: /* @__PURE__ */ w(p, { children: e.name.split(" ").map((e) => e[0]).join("") }) }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
94
103
|
className: "font-medium",
|
|
95
104
|
children: e.name
|
|
96
|
-
}), /* @__PURE__ */
|
|
105
|
+
}), /* @__PURE__ */ w("p", {
|
|
97
106
|
className: "text-sm text-text-secondary",
|
|
98
107
|
children: e.email
|
|
99
108
|
})] })]
|
|
@@ -103,7 +112,7 @@ function D() {
|
|
|
103
112
|
id: "type",
|
|
104
113
|
header: "Type",
|
|
105
114
|
accessorKey: "type",
|
|
106
|
-
cell: (e) => /* @__PURE__ */
|
|
115
|
+
cell: (e) => /* @__PURE__ */ w(v, { type: e.type })
|
|
107
116
|
},
|
|
108
117
|
{
|
|
109
118
|
id: "company",
|
|
@@ -124,12 +133,12 @@ function D() {
|
|
|
124
133
|
{
|
|
125
134
|
id: "rating",
|
|
126
135
|
header: "Rating",
|
|
127
|
-
cell: (e) => /* @__PURE__ */
|
|
136
|
+
cell: (e) => /* @__PURE__ */ T("div", {
|
|
128
137
|
className: "flex items-center gap-1",
|
|
129
|
-
children: [/* @__PURE__ */
|
|
138
|
+
children: [/* @__PURE__ */ w(i, {
|
|
130
139
|
size: 14,
|
|
131
140
|
className: "text-status-warning-text fill-current"
|
|
132
|
-
}), /* @__PURE__ */
|
|
141
|
+
}), /* @__PURE__ */ w("span", { children: e.rating === void 0 ? "Not provided" : e.rating.toFixed(1) })]
|
|
133
142
|
})
|
|
134
143
|
},
|
|
135
144
|
{
|
|
@@ -137,13 +146,13 @@ function D() {
|
|
|
137
146
|
header: "Created",
|
|
138
147
|
accessorKey: "createdAt",
|
|
139
148
|
sortable: !0,
|
|
140
|
-
cell: (e) =>
|
|
149
|
+
cell: (e) => l(e.createdAt, "short")
|
|
141
150
|
}
|
|
142
151
|
],
|
|
143
|
-
data:
|
|
144
|
-
isLoading:
|
|
145
|
-
error:
|
|
146
|
-
onRetry:
|
|
152
|
+
data: V,
|
|
153
|
+
isLoading: W,
|
|
154
|
+
error: G,
|
|
155
|
+
onRetry: K,
|
|
147
156
|
searchable: !0,
|
|
148
157
|
searchPlaceholder: "Search customers...",
|
|
149
158
|
searchFields: [
|
|
@@ -151,26 +160,26 @@ function D() {
|
|
|
151
160
|
"email",
|
|
152
161
|
"company"
|
|
153
162
|
],
|
|
154
|
-
searchQuery:
|
|
163
|
+
searchQuery: R,
|
|
155
164
|
onSearchQueryChange: (e) => {
|
|
156
|
-
|
|
165
|
+
z(e), F(0);
|
|
157
166
|
},
|
|
158
|
-
onRowClick: (e) =>
|
|
167
|
+
onRowClick: (e) => J(`customers/${e.id}`),
|
|
159
168
|
getRowId: (e) => e.id,
|
|
160
|
-
pageIndex:
|
|
161
|
-
pageSize:
|
|
162
|
-
onPageChange:
|
|
169
|
+
pageIndex: P,
|
|
170
|
+
pageSize: I,
|
|
171
|
+
onPageChange: F,
|
|
163
172
|
onPageSizeChange: (e) => {
|
|
164
|
-
|
|
173
|
+
L(e), F(0);
|
|
165
174
|
},
|
|
166
|
-
totalItems:
|
|
167
|
-
hasNextPage:
|
|
175
|
+
totalItems: H,
|
|
176
|
+
hasNextPage: U,
|
|
168
177
|
emptyIllustration: "empty-people",
|
|
169
178
|
emptyTitle: "No customers yet",
|
|
170
179
|
emptyDescription: "Add your first customer to start booking deliveries for them.",
|
|
171
|
-
emptyAction: /* @__PURE__ */
|
|
172
|
-
onClick: () =>
|
|
173
|
-
children: [/* @__PURE__ */
|
|
180
|
+
emptyAction: /* @__PURE__ */ T(m, {
|
|
181
|
+
onClick: () => J("customers/new"),
|
|
182
|
+
children: [/* @__PURE__ */ w(n, {
|
|
174
183
|
size: 16,
|
|
175
184
|
className: "mr-1.5"
|
|
176
185
|
}), "Add Customer"]
|
|
@@ -180,4 +189,4 @@ function D() {
|
|
|
180
189
|
});
|
|
181
190
|
}
|
|
182
191
|
//#endregion
|
|
183
|
-
export {
|
|
192
|
+
export { O as default };
|
|
@@ -11,20 +11,20 @@ import { Truck as l } from "../node_modules/lucide-react/dist/esm/icons/truck.js
|
|
|
11
11
|
import { Users as ee } from "../node_modules/lucide-react/dist/esm/icons/users.js";
|
|
12
12
|
import { joinPath as te } from "../utils/navigation.js";
|
|
13
13
|
import { useMoveTheWheels as u } from "../providers/MoveTheWheelsProvider.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
14
|
+
import { formatCurrency as d, formatDate as f } from "../utils/formatters.js";
|
|
15
|
+
import { useOrderStats as p, useOrders as ne } from "../hooks/useOrders.js";
|
|
16
|
+
import { useFleetStats as re } from "../hooks/useFleet.js";
|
|
17
|
+
import { useAnalytics as ie, useDashboardMetrics as m } from "../hooks/useAnalytics.js";
|
|
18
|
+
import { useLiveTracking as ae, useTrackingAlerts as oe } from "../hooks/useTracking.js";
|
|
19
|
+
import { Badge as h, Button as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b, Progress as se } from "../components/ui.js";
|
|
20
|
+
import { PageLayout as x, PageSection as S } from "../components/PageLayout.js";
|
|
20
21
|
import { MetricCard as C, MetricGrid as w } from "../components/MetricCard.js";
|
|
21
|
-
import { VolumeBar as
|
|
22
|
+
import { VolumeBar as T } from "../components/charts/VolumeBar.js";
|
|
22
23
|
import "../components/charts/index.js";
|
|
23
|
-
import { LogisticsMap as
|
|
24
|
+
import { LogisticsMap as E } from "../components/maps/LogisticsMap.js";
|
|
24
25
|
import "../components/maps/index.js";
|
|
25
|
-
import { StatusBadge as
|
|
26
|
-
import {
|
|
27
|
-
import { TrackingAlertList as se } from "../components/TrackingAlertList.js";
|
|
26
|
+
import { StatusBadge as D } from "../components/StatusBadge.js";
|
|
27
|
+
import { TrackingAlertList as O } from "../components/TrackingAlertList.js";
|
|
28
28
|
import { deliveryMarkerStatus as ce, firstRealLatLng as le } from "../utils/mapMarkers.js";
|
|
29
29
|
import { useMemo as k } from "react";
|
|
30
30
|
import { jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
@@ -46,7 +46,7 @@ function L() {
|
|
|
46
46
|
let { t: L } = M(), R = (e, t) => {
|
|
47
47
|
let n = L(e);
|
|
48
48
|
return n === e ? t : n;
|
|
49
|
-
}, { basePath: z, navigate: B } = u(), { metrics: V } =
|
|
49
|
+
}, { basePath: z, navigate: B } = u(), { metrics: V } = m(), { analytics: H } = ie(), { orders: U } = ne({ limit: 5 }), { stats: W } = p(), { stats: G } = re(), { activeDeliveries: K } = ae(), { unacknowledgedAlerts: q, acknowledgeAlert: ue, refetch: de } = oe(), J = k(() => H.trends.dailyOrders.map((e) => e.orders), [H.trends.dailyOrders]), Y = k(() => H.trends.dailyOrders.map((e) => e.deliveries), [H.trends.dailyOrders]), X = k(() => H.trends.revenue.map((e) => e.revenue), [H.trends.revenue]), fe = k(() => H.trends.dailyOrders.slice(-7), [H.trends.dailyOrders]), pe = k(() => K.flatMap((e) => {
|
|
50
50
|
if (!e.order) return [];
|
|
51
51
|
let t = le(e.vehicle?.currentLocation, e.driver?.currentLocation, e.tracking?.currentLocation);
|
|
52
52
|
return t ? [{
|
|
@@ -62,7 +62,7 @@ function L() {
|
|
|
62
62
|
}, $ = (e, t) => {
|
|
63
63
|
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), t());
|
|
64
64
|
};
|
|
65
|
-
return /* @__PURE__ */ j(
|
|
65
|
+
return /* @__PURE__ */ j(x, {
|
|
66
66
|
hero: !0,
|
|
67
67
|
titleAccent: R("movethewheels.dashboard.title", "Dashboard"),
|
|
68
68
|
title: R("movethewheels.dashboard.title", "Dashboard"),
|
|
@@ -129,7 +129,7 @@ function L() {
|
|
|
129
129
|
treatment: "glass",
|
|
130
130
|
glow: !0,
|
|
131
131
|
label: R("movethewheels.dashboard.metrics.revenue", "Revenue"),
|
|
132
|
-
value:
|
|
132
|
+
value: d(V.revenue.total),
|
|
133
133
|
icon: /* @__PURE__ */ A(r, { size: 20 }),
|
|
134
134
|
accent: "success",
|
|
135
135
|
sparklineData: X.length >= 2 ? X : void 0,
|
|
@@ -159,7 +159,7 @@ function L() {
|
|
|
159
159
|
})]
|
|
160
160
|
}), /* @__PURE__ */ A(v, {
|
|
161
161
|
className: "p-0",
|
|
162
|
-
children: /* @__PURE__ */ A(
|
|
162
|
+
children: /* @__PURE__ */ A(E, {
|
|
163
163
|
markers: pe,
|
|
164
164
|
height: 460,
|
|
165
165
|
emptyMessage: K.length === 0 ? R("movethewheels.dashboard.liveMap.noActive", "No active deliveries right now") : R("movethewheels.dashboard.liveMap.awaitingGps", "Awaiting live GPS positions for active deliveries")
|
|
@@ -181,7 +181,7 @@ function L() {
|
|
|
181
181
|
children: q.length
|
|
182
182
|
})
|
|
183
183
|
]
|
|
184
|
-
}) }), /* @__PURE__ */ A(v, { children: q.length > 0 ? /* @__PURE__ */ A(
|
|
184
|
+
}) }), /* @__PURE__ */ A(v, { children: q.length > 0 ? /* @__PURE__ */ A(O, {
|
|
185
185
|
alerts: q,
|
|
186
186
|
limit: 4,
|
|
187
187
|
t: R,
|
|
@@ -218,7 +218,7 @@ function L() {
|
|
|
218
218
|
]
|
|
219
219
|
}), /* @__PURE__ */ A("p", {
|
|
220
220
|
className: "text-xs text-text-secondary",
|
|
221
|
-
children:
|
|
221
|
+
children: f(e.updatedAt ?? e.createdAt, "relative")
|
|
222
222
|
})]
|
|
223
223
|
})]
|
|
224
224
|
}, e.id))
|
|
@@ -228,7 +228,7 @@ function L() {
|
|
|
228
228
|
}) })] })]
|
|
229
229
|
})]
|
|
230
230
|
}),
|
|
231
|
-
/* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A(y, { children: /* @__PURE__ */ A(b, { children: R("movethewheels.dashboard.weeklyVolume.title", "Weekly order volume") }) }), /* @__PURE__ */ A(v, { children: /* @__PURE__ */ A(
|
|
231
|
+
/* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A(y, { children: /* @__PURE__ */ A(b, { children: R("movethewheels.dashboard.weeklyVolume.title", "Weekly order volume") }) }), /* @__PURE__ */ A(v, { children: /* @__PURE__ */ A(T, {
|
|
232
232
|
xKey: "date",
|
|
233
233
|
height: 240,
|
|
234
234
|
data: fe,
|
|
@@ -253,7 +253,7 @@ function L() {
|
|
|
253
253
|
/* @__PURE__ */ A(C, {
|
|
254
254
|
size: "sm",
|
|
255
255
|
label: R("movethewheels.dashboard.stats.avgOrderValue", "Avg Order Value"),
|
|
256
|
-
value:
|
|
256
|
+
value: d(V.revenue.avgOrderValue)
|
|
257
257
|
}),
|
|
258
258
|
/* @__PURE__ */ A(C, {
|
|
259
259
|
size: "sm",
|
|
@@ -303,13 +303,13 @@ function L() {
|
|
|
303
303
|
children: e.customerInfo.name
|
|
304
304
|
})] }), /* @__PURE__ */ j("div", {
|
|
305
305
|
className: "text-right",
|
|
306
|
-
children: [/* @__PURE__ */ A(
|
|
306
|
+
children: [/* @__PURE__ */ A(D, {
|
|
307
307
|
status: e.status,
|
|
308
308
|
type: "order",
|
|
309
309
|
size: "sm"
|
|
310
310
|
}), /* @__PURE__ */ A("p", {
|
|
311
311
|
className: "text-sm text-text-secondary mt-1",
|
|
312
|
-
children:
|
|
312
|
+
children: d(e.pricing.total)
|
|
313
313
|
})]
|
|
314
314
|
})]
|
|
315
315
|
})
|
|
@@ -352,7 +352,7 @@ function L() {
|
|
|
352
352
|
children: e.driver?.fullName || R("movethewheels.dashboard.activeDeliveries.unassigned", "Unassigned")
|
|
353
353
|
})] }), /* @__PURE__ */ j("div", {
|
|
354
354
|
className: "text-right",
|
|
355
|
-
children: [/* @__PURE__ */ A(
|
|
355
|
+
children: [/* @__PURE__ */ A(D, {
|
|
356
356
|
status: e.order.status,
|
|
357
357
|
type: "order",
|
|
358
358
|
size: "sm"
|
|
@@ -361,7 +361,7 @@ function L() {
|
|
|
361
361
|
children: [
|
|
362
362
|
R("movethewheels.dashboard.activeDeliveries.eta", "ETA:"),
|
|
363
363
|
" ",
|
|
364
|
-
e.estimatedArrival ?
|
|
364
|
+
e.estimatedArrival ? f(e.estimatedArrival, "time") : R("movethewheels.dashboard.activeDeliveries.na", "N/A")
|
|
365
365
|
]
|
|
366
366
|
})]
|
|
367
367
|
})]
|
|
@@ -431,7 +431,7 @@ function L() {
|
|
|
431
431
|
children: [/* @__PURE__ */ j("div", {
|
|
432
432
|
className: "flex justify-between text-sm",
|
|
433
433
|
children: [/* @__PURE__ */ A("span", { children: R("movethewheels.dashboard.fleetStatus.vehicleUtilization", "Vehicle Utilization") }), /* @__PURE__ */ j("span", { children: [G.utilization.toFixed(0), "%"] })]
|
|
434
|
-
}), /* @__PURE__ */ A(
|
|
434
|
+
}), /* @__PURE__ */ A(se, { value: G.utilization })]
|
|
435
435
|
}), /* @__PURE__ */ j("div", {
|
|
436
436
|
className: "grid grid-cols-2 gap-4 text-sm",
|
|
437
437
|
children: [
|