@burdenoff/microfe-movethewheels 2026.924.2 → 2026.925.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/components/OrderItemRow.js +195 -109
- package/dist/constants/index.js +1 -0
- package/dist/generated/wspace-operations.d.ts +7 -0
- package/dist/hooks/useOrders.js +8 -4
- package/dist/hooks/useTracking.js +127 -66
- package/dist/movethewheels/components/OrderItemRow.d.ts +1 -2
- package/dist/movethewheels/hooks/useOrders.d.ts +1 -0
- package/dist/movethewheels/hooks/useTracking.d.ts +2 -2
- package/dist/movethewheels/types/index.d.ts +1 -1
- package/dist/pages/CreateOrderPage.js +597 -420
- package/dist/pages/OrderDetailsPage.js +289 -266
- package/dist/pages/OrdersListPage.js +4 -0
- package/dist/pages/TrackingPage.js +205 -195
- package/dist/utils/mapMarkers.js +2 -1
- package/package.json +1 -1
- package/src/generated/wspace-operations.ts +10 -3
- package/src/movethewheels/components/OrderItemRow.tsx +162 -99
- package/src/movethewheels/constants/index.ts +1 -0
- package/src/movethewheels/hooks/useOrders.ts +17 -3
- package/src/movethewheels/hooks/useTracking.ts +208 -27
- package/src/movethewheels/pages/CreateOrderPage.tsx +372 -263
- package/src/movethewheels/pages/OrderDetailsPage.tsx +55 -23
- package/src/movethewheels/pages/OrdersListPage.tsx +1 -0
- package/src/movethewheels/pages/TrackingPage.tsx +44 -14
- package/src/movethewheels/types/index.ts +1 -0
- package/src/movethewheels/utils/mapMarkers.ts +1 -0
- package/src/operations/wspace/movethewheels/queries/dashboard.graphql +5 -0
- package/src/operations/wspace/movethewheels/queries/logistics.graphql +2 -2
|
@@ -4,28 +4,33 @@ import { mapOrder as n, useOrder as r } from "./useOrders.js";
|
|
|
4
4
|
import { mapDriver as i, mapVehicle as a, useDriver as o, useDrivers as s, useVehicle as c, useVehicles as l } from "./useFleet.js";
|
|
5
5
|
import { useCallback as u, useEffect as d, useMemo as f, useState as p } from "react";
|
|
6
6
|
//#region src/movethewheels/hooks/useTracking.ts
|
|
7
|
-
var m = "\n query ListShipments($filter: ShipmentFilterInput, $pagination: PaginationInput) {\n shipments(filter: $filter, pagination: $pagination) {\n id\n shipmentNumber\n deliveryJobId\n status\n estimatedDelivery\n }\n }\n", h = "\n query GetDeliveryJobTracking($deliveryJobId: ID!, $pagination: PaginationInput) {\n deliveryJobTracking(deliveryJobId: $deliveryJobId, pagination: $pagination) {\n id\n shipmentId\n eventType\n location\n details\n timestamp\n }\n }\n",
|
|
8
|
-
function
|
|
9
|
-
|
|
7
|
+
var m = "\n query ListShipments($filter: ShipmentFilterInput, $pagination: PaginationInput) {\n shipments(filter: $filter, pagination: $pagination) {\n id\n shipmentNumber\n deliveryJobId\n status\n trackingNumber\n estimatedDelivery\n }\n }\n", h = "\n query LookupDeliveryJob($id: ID!) {\n deliveryJob(id: $id) {\n id\n }\n }\n", g = "\n query LookupDeliveryJobs($filter: DeliveryJobFilterInput, $pagination: PaginationInput) {\n deliveryJobs(filter: $filter, pagination: $pagination) {\n id\n deliveryJobNumber\n trackingNumber\n }\n }\n", _ = "\n query GetDeliveryJobTracking($deliveryJobId: ID!, $pagination: PaginationInput) {\n deliveryJobTracking(deliveryJobId: $deliveryJobId, pagination: $pagination) {\n id\n shipmentId\n eventType\n location\n details\n timestamp\n }\n }\n", v = "\n query GetActiveDeliveries($pagination: PaginationInput) {\n activeDeliveries(pagination: $pagination) {\n id\n shipmentNumber\n deliveryJobId\n status\n estimatedDelivery\n trackingEvents(pagination: { limit: 1, offset: 0 }) {\n id\n shipmentId\n eventType\n location\n details\n timestamp\n }\n deliveryJob {\n id\n deliveryJobNumber\n customerId\n status\n priority\n pickupAddress\n deliveryAddress\n cargoItems\n pricing\n trackingNumber\n specialInstructions\n scheduledDelivery\n vehicleId\n driverId\n createdAt\n updatedAt\n customer {\n name\n email\n phone\n company\n }\n vehicle {\n id\n vehicleNumber\n type\n make\n model\n licensePlate\n ownershipType\n year\n capacity\n status\n currentLocation\n fuelLevel\n mileage\n lastServiceDate\n nextServiceDueDate\n nextServiceDueMileage\n createdAt\n }\n driver {\n id\n userId\n firstName\n lastName\n email\n phone\n employeeId\n licenseNumber\n licenseClass\n licenseExpiry\n status\n currentLocation\n rating\n vehicleId\n createdAt\n }\n }\n }\n }\n", y = "\n query GetTrackingAlerts {\n trackingAlerts {\n shipmentId\n shipmentNumber\n alertType\n message\n }\n }\n";
|
|
8
|
+
function b(e) {
|
|
9
|
+
return {
|
|
10
10
|
latitude: Number(e.location?.latitude ?? 0),
|
|
11
11
|
longitude: Number(e.location?.longitude ?? 0),
|
|
12
12
|
address: e.location?.address ?? void 0,
|
|
13
13
|
timestamp: new Date(e.timestamp)
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
}
|
|
16
|
+
function x(e, t) {
|
|
17
|
+
let n = e[0];
|
|
18
|
+
if (!n) return null;
|
|
19
|
+
let r = e.map(b), i = r[0];
|
|
20
|
+
return i ? {
|
|
21
|
+
id: n.id,
|
|
17
22
|
entityId: t,
|
|
18
23
|
entityType: "order",
|
|
19
|
-
currentLocation:
|
|
20
|
-
locationHistory:
|
|
21
|
-
status:
|
|
24
|
+
currentLocation: i,
|
|
25
|
+
locationHistory: r,
|
|
26
|
+
status: n.eventType.toLowerCase(),
|
|
22
27
|
estimatedArrival: void 0,
|
|
23
|
-
nextCheckpoint:
|
|
28
|
+
nextCheckpoint: n.details ?? void 0,
|
|
24
29
|
alerts: [],
|
|
25
|
-
lastUpdated: new Date(
|
|
26
|
-
};
|
|
30
|
+
lastUpdated: new Date(n.timestamp)
|
|
31
|
+
} : null;
|
|
27
32
|
}
|
|
28
|
-
function
|
|
33
|
+
function S() {
|
|
29
34
|
let { apiGatewayUrl: t, authToken: n, workspaceToken: r, workspaceId: i, tenantId: a, currentUser: o } = e();
|
|
30
35
|
return f(() => ({
|
|
31
36
|
apiGatewayUrl: t,
|
|
@@ -43,11 +48,23 @@ function y() {
|
|
|
43
48
|
o?.id
|
|
44
49
|
]);
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
var C = 3e4;
|
|
52
|
+
function w(e, t) {
|
|
53
|
+
d(() => {
|
|
54
|
+
if (!t || typeof document > "u") return;
|
|
55
|
+
let n = () => {
|
|
56
|
+
document.visibilityState === "visible" && e();
|
|
57
|
+
}, r = window.setInterval(n, C);
|
|
58
|
+
return document.addEventListener("visibilitychange", n), () => {
|
|
59
|
+
window.clearInterval(r), document.removeEventListener("visibilitychange", n);
|
|
60
|
+
};
|
|
61
|
+
}, [t, e]);
|
|
62
|
+
}
|
|
63
|
+
function T(e = {}) {
|
|
64
|
+
let { entityId: n, entityType: r, realtime: i = !1 } = e, a = S(), [o, s] = p([]), [c, l] = p(!1), [f, h] = p(null), g = u(async () => {
|
|
65
|
+
l(!0), h(null);
|
|
49
66
|
try {
|
|
50
|
-
|
|
67
|
+
s((await t(a, m, {
|
|
51
68
|
filter: n ? {
|
|
52
69
|
...r === "order" ? { deliveryJobId: n } : {},
|
|
53
70
|
...r === "vehicle" ? { vehicleId: n } : {},
|
|
@@ -74,57 +91,103 @@ function b(e = {}) {
|
|
|
74
91
|
lastUpdated: /* @__PURE__ */ new Date()
|
|
75
92
|
})));
|
|
76
93
|
} catch (e) {
|
|
77
|
-
|
|
94
|
+
h(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load tracking data"));
|
|
78
95
|
} finally {
|
|
79
|
-
|
|
96
|
+
l(!1);
|
|
80
97
|
}
|
|
81
98
|
}, [
|
|
82
99
|
n,
|
|
83
100
|
r,
|
|
84
|
-
|
|
101
|
+
a
|
|
85
102
|
]);
|
|
86
103
|
return d(() => {
|
|
87
|
-
|
|
88
|
-
}, [
|
|
89
|
-
tracking:
|
|
90
|
-
isLoading:
|
|
91
|
-
error:
|
|
92
|
-
refetch: () => void
|
|
104
|
+
g();
|
|
105
|
+
}, [g]), w(g, i), {
|
|
106
|
+
tracking: o,
|
|
107
|
+
isLoading: c,
|
|
108
|
+
error: f,
|
|
109
|
+
refetch: () => void g()
|
|
93
110
|
};
|
|
94
111
|
}
|
|
95
|
-
function
|
|
96
|
-
let
|
|
97
|
-
|
|
98
|
-
|
|
112
|
+
async function E(e, n) {
|
|
113
|
+
let r = n.trim(), i = await t(e, h, { id: r });
|
|
114
|
+
if (i.deliveryJob?.id) return i.deliveryJob.id;
|
|
115
|
+
let a = await t(e, g, {
|
|
116
|
+
filter: { search: r },
|
|
117
|
+
pagination: {
|
|
118
|
+
limit: 50,
|
|
119
|
+
offset: 0
|
|
120
|
+
}
|
|
121
|
+
}), o = r.toLocaleLowerCase(), s = a.deliveryJobs.filter((e) => [
|
|
122
|
+
e.id,
|
|
123
|
+
e.deliveryJobNumber,
|
|
124
|
+
e.trackingNumber
|
|
125
|
+
].filter((e) => !!e).some((e) => e.toLocaleLowerCase() === o));
|
|
126
|
+
if (s.length > 1) throw Error("Multiple deliveries match that reference. Enter the full tracking number.");
|
|
127
|
+
if (s[0]) return s[0].id;
|
|
128
|
+
let c = (await t(e, m, {
|
|
129
|
+
filter: { search: r },
|
|
130
|
+
pagination: {
|
|
131
|
+
limit: 50,
|
|
132
|
+
offset: 0
|
|
133
|
+
}
|
|
134
|
+
})).shipments.filter((e) => [e.trackingNumber, e.shipmentNumber].filter((e) => !!e).some((e) => e.toLocaleLowerCase() === o)), l = [...new Set(c.map((e) => e.deliveryJobId).filter((e) => !!e))];
|
|
135
|
+
if (l.length > 1) throw Error("Multiple shipments match that reference. Enter the full tracking number.");
|
|
136
|
+
return l[0] ?? null;
|
|
137
|
+
}
|
|
138
|
+
function D(e) {
|
|
139
|
+
let n = S(), [i, a] = p(), [o, s] = p(!1), [c, l] = p(null), [f, m] = p(0), { order: h, isLoading: g, error: v, refetch: y } = r(i), [b, C] = p(null), [T, D] = p(!1), [O, k] = p(null);
|
|
140
|
+
d(() => {
|
|
141
|
+
let t = !1, r = e?.trim() ?? "";
|
|
142
|
+
return a(void 0), C(null), l(null), r ? (s(!0), E(n, r).then((e) => {
|
|
143
|
+
t || a(e ?? void 0);
|
|
144
|
+
}).catch((e) => {
|
|
145
|
+
t || l(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to find the delivery"));
|
|
146
|
+
}).finally(() => {
|
|
147
|
+
t || s(!1);
|
|
148
|
+
}), () => {
|
|
149
|
+
t = !0;
|
|
150
|
+
}) : (s(!1), () => {
|
|
151
|
+
t = !0;
|
|
152
|
+
});
|
|
153
|
+
}, [
|
|
154
|
+
n,
|
|
155
|
+
f,
|
|
156
|
+
e
|
|
157
|
+
]);
|
|
158
|
+
let A = u(async () => {
|
|
159
|
+
if (!i) {
|
|
160
|
+
C(null), D(!1);
|
|
99
161
|
return;
|
|
100
162
|
}
|
|
101
|
-
|
|
163
|
+
D(!0), k(null);
|
|
102
164
|
try {
|
|
103
|
-
|
|
104
|
-
deliveryJobId:
|
|
165
|
+
C(x([...(await t(n, _, {
|
|
166
|
+
deliveryJobId: i,
|
|
105
167
|
pagination: {
|
|
106
|
-
limit:
|
|
168
|
+
limit: 50,
|
|
107
169
|
offset: 0
|
|
108
170
|
}
|
|
109
|
-
})).deliveryJobTracking
|
|
110
|
-
o(r ? v(r, e) : null);
|
|
171
|
+
})).deliveryJobTracking].sort((e, t) => Date.parse(t.timestamp) - Date.parse(e.timestamp)), i));
|
|
111
172
|
} catch (e) {
|
|
112
|
-
|
|
173
|
+
k(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load order tracking"));
|
|
113
174
|
} finally {
|
|
114
|
-
|
|
175
|
+
D(!1);
|
|
115
176
|
}
|
|
116
|
-
}, [n,
|
|
177
|
+
}, [n, i]);
|
|
117
178
|
return d(() => {
|
|
118
|
-
|
|
119
|
-
}, [
|
|
120
|
-
tracking:
|
|
121
|
-
order: i,
|
|
122
|
-
isLoading:
|
|
123
|
-
error:
|
|
124
|
-
refetch: () =>
|
|
179
|
+
A();
|
|
180
|
+
}, [A]), w(A, !!i), {
|
|
181
|
+
tracking: b,
|
|
182
|
+
order: i ? h : null,
|
|
183
|
+
isLoading: o || g || T,
|
|
184
|
+
error: c ?? (i ? v ?? O : null),
|
|
185
|
+
refetch: () => {
|
|
186
|
+
m((e) => e + 1), i && (y(), A());
|
|
187
|
+
}
|
|
125
188
|
};
|
|
126
189
|
}
|
|
127
|
-
function
|
|
190
|
+
function O(e) {
|
|
128
191
|
let { vehicle: t, isLoading: n, error: r, refetch: i } = c(e);
|
|
129
192
|
return {
|
|
130
193
|
tracking: f(() => !t || !t.currentLocation ? null : {
|
|
@@ -143,7 +206,7 @@ function S(e) {
|
|
|
143
206
|
refetch: i
|
|
144
207
|
};
|
|
145
208
|
}
|
|
146
|
-
function
|
|
209
|
+
function k(e) {
|
|
147
210
|
let { driver: t, isLoading: n, error: r, refetch: i } = o(e);
|
|
148
211
|
return {
|
|
149
212
|
tracking: f(() => !t || !t.currentLocation ? null : {
|
|
@@ -162,24 +225,22 @@ function C(e) {
|
|
|
162
225
|
refetch: i
|
|
163
226
|
};
|
|
164
227
|
}
|
|
165
|
-
function
|
|
166
|
-
let e =
|
|
228
|
+
function A() {
|
|
229
|
+
let e = S(), [r, o] = p([]), [s, c] = p(!1), [l, f] = p(null), m = u(async () => {
|
|
167
230
|
c(!0), f(null);
|
|
168
231
|
try {
|
|
169
|
-
o(((await t(e,
|
|
232
|
+
o(((await t(e, v, { pagination: {
|
|
170
233
|
limit: 100,
|
|
171
234
|
offset: 0
|
|
172
235
|
} })).activeDeliveries ?? []).map((e) => {
|
|
173
236
|
let t = e.deliveryJob;
|
|
174
|
-
|
|
175
|
-
let r = e.trackingEvents?.[0];
|
|
176
|
-
return {
|
|
237
|
+
return t ? {
|
|
177
238
|
order: n(t),
|
|
178
239
|
driver: t.driver ? i(t.driver) : null,
|
|
179
240
|
vehicle: t.vehicle ? a(t.vehicle) : null,
|
|
180
|
-
tracking:
|
|
241
|
+
tracking: x(e.trackingEvents ?? [], t.id),
|
|
181
242
|
estimatedArrival: e.estimatedDelivery ? new Date(e.estimatedDelivery) : void 0
|
|
182
|
-
};
|
|
243
|
+
} : null;
|
|
183
244
|
}).filter((e) => e !== null));
|
|
184
245
|
} catch (e) {
|
|
185
246
|
f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load live tracking"));
|
|
@@ -189,18 +250,18 @@ function w() {
|
|
|
189
250
|
}, [e]);
|
|
190
251
|
return d(() => {
|
|
191
252
|
m();
|
|
192
|
-
}, [m]), {
|
|
253
|
+
}, [m]), w(m, !0), {
|
|
193
254
|
activeDeliveries: r,
|
|
194
255
|
isLoading: s,
|
|
195
256
|
error: l,
|
|
196
257
|
refetch: () => void m()
|
|
197
258
|
};
|
|
198
259
|
}
|
|
199
|
-
function
|
|
200
|
-
let e =
|
|
260
|
+
function j() {
|
|
261
|
+
let e = S(), [n, r] = p([]), [i, a] = p(!1), [o, s] = p(null), c = u(async () => {
|
|
201
262
|
a(!0), s(null);
|
|
202
263
|
try {
|
|
203
|
-
r((await t(e,
|
|
264
|
+
r((await t(e, y)).trackingAlerts.map((e) => ({
|
|
204
265
|
id: `${e.shipmentId}-${e.alertType}`,
|
|
205
266
|
type: "delay",
|
|
206
267
|
severity: "medium",
|
|
@@ -230,14 +291,14 @@ function T() {
|
|
|
230
291
|
refetch: () => void c()
|
|
231
292
|
};
|
|
232
293
|
}
|
|
233
|
-
function
|
|
294
|
+
function M(e, t) {
|
|
234
295
|
let { vehicles: n } = l(), { drivers: r } = s();
|
|
235
296
|
return {
|
|
236
297
|
entitiesInRange: f(() => {
|
|
237
298
|
let i = [];
|
|
238
299
|
return n.forEach((n) => {
|
|
239
300
|
if (!n.currentLocation) return;
|
|
240
|
-
let r =
|
|
301
|
+
let r = N(e.latitude, e.longitude, n.currentLocation.latitude, n.currentLocation.longitude);
|
|
241
302
|
r <= t && i.push({
|
|
242
303
|
type: "vehicle",
|
|
243
304
|
entity: n,
|
|
@@ -245,7 +306,7 @@ function E(e, t) {
|
|
|
245
306
|
});
|
|
246
307
|
}), r.forEach((n) => {
|
|
247
308
|
if (!n.currentLocation) return;
|
|
248
|
-
let r =
|
|
309
|
+
let r = N(e.latitude, e.longitude, n.currentLocation.latitude, n.currentLocation.longitude);
|
|
249
310
|
r <= t && i.push({
|
|
250
311
|
type: "driver",
|
|
251
312
|
entity: n,
|
|
@@ -263,12 +324,12 @@ function E(e, t) {
|
|
|
263
324
|
error: null
|
|
264
325
|
};
|
|
265
326
|
}
|
|
266
|
-
function
|
|
267
|
-
let i =
|
|
327
|
+
function N(e, t, n, r) {
|
|
328
|
+
let i = P(n - e), a = P(r - t), o = Math.sin(i / 2) * Math.sin(i / 2) + Math.cos(P(e)) * Math.cos(P(n)) * Math.sin(a / 2) * Math.sin(a / 2);
|
|
268
329
|
return 6371 * (2 * Math.atan2(Math.sqrt(o), Math.sqrt(1 - o)));
|
|
269
330
|
}
|
|
270
|
-
function
|
|
331
|
+
function P(e) {
|
|
271
332
|
return Math.PI / 180 * e;
|
|
272
333
|
}
|
|
273
334
|
//#endregion
|
|
274
|
-
export {
|
|
335
|
+
export { k as useDriverTracking, M as useGeofence, A as useLiveTracking, D as useOrderTracking, T as useTracking, j as useTrackingAlerts, O as useVehicleTracking };
|
|
@@ -3,11 +3,10 @@ import { OrderItem, Product } from '../types';
|
|
|
3
3
|
interface OrderItemRowProps {
|
|
4
4
|
item: OrderItem;
|
|
5
5
|
index: number;
|
|
6
|
-
isFirst: boolean;
|
|
7
6
|
products: Product[];
|
|
8
7
|
productsLoading: boolean;
|
|
9
8
|
onUpdate: (index: number, field: string, value: unknown) => void;
|
|
10
9
|
onRemove: (index: number) => void;
|
|
11
10
|
}
|
|
12
|
-
export declare function OrderItemRow({ item, index,
|
|
11
|
+
export declare function OrderItemRow({ item, index, products, productsLoading, onUpdate, onRemove, }: OrderItemRowProps): import("react").JSX.Element;
|
|
13
12
|
export {};
|
|
@@ -19,12 +19,12 @@ interface LiveDelivery {
|
|
|
19
19
|
estimatedArrival: Date | undefined;
|
|
20
20
|
}
|
|
21
21
|
export declare function useTracking(options?: UseTrackingOptions): UseTrackingResult;
|
|
22
|
-
export declare function useOrderTracking(
|
|
22
|
+
export declare function useOrderTracking(orderLookup: string | undefined): {
|
|
23
23
|
tracking: Tracking | null;
|
|
24
24
|
order: Order | null;
|
|
25
25
|
isLoading: boolean;
|
|
26
26
|
error: Error | null;
|
|
27
|
-
refetch: () =>
|
|
27
|
+
refetch: () => void;
|
|
28
28
|
};
|
|
29
29
|
export declare function useVehicleTracking(vehicleId: string | undefined): {
|
|
30
30
|
tracking: Tracking | null;
|
|
@@ -199,7 +199,7 @@ export interface OrderPricing {
|
|
|
199
199
|
paymentMethod: string;
|
|
200
200
|
paymentStatus: 'pending' | 'paid' | 'failed' | 'refunded';
|
|
201
201
|
}
|
|
202
|
-
export type OrderStatus = 'pending' | 'confirmed' | 'assigned' | 'picked_up' | 'in_transit' | 'out_for_delivery' | 'delivered' | 'cancelled' | 'failed';
|
|
202
|
+
export type OrderStatus = 'pending' | 'confirmed' | 'assigned' | 'picked_up' | 'in_transit' | 'out_for_delivery' | 'delivered' | 'returned' | 'cancelled' | 'failed';
|
|
203
203
|
export interface Order {
|
|
204
204
|
id: string;
|
|
205
205
|
orderNumber: string;
|