@burdenoff/microfe-movethewheels 2026.929.4 → 2026.930.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/components/CustomerPicker.js +52 -48
- package/dist/components/EntityCombobox.js +25 -23
- package/dist/components/OrderItemRow.js +123 -78
- package/dist/hooks/useCustomers.js +52 -17
- package/dist/hooks/useFleet.js +126 -44
- package/dist/hooks/useInventory.js +43 -7
- package/dist/hooks/useMultiModalShipments.js +30 -26
- package/dist/hooks/useRefetchOnLeaveEdit.js +10 -0
- package/dist/hooks/useRoutes.js +55 -15
- package/dist/movethewheels/components/CustomerPicker.d.ts +5 -1
- package/dist/movethewheels/components/EntityCombobox.d.ts +6 -3
- package/dist/movethewheels/components/OrderItemRow.d.ts +7 -1
- package/dist/movethewheels/hooks/useCustomers.d.ts +3 -0
- package/dist/movethewheels/hooks/useFleet.d.ts +6 -0
- package/dist/movethewheels/hooks/useInventory.d.ts +2 -0
- package/dist/movethewheels/hooks/useMultiModalShipments.d.ts +1 -0
- package/dist/movethewheels/hooks/useRefetchOnLeaveEdit.d.ts +7 -0
- package/dist/movethewheels/hooks/useRoutes.d.ts +3 -0
- package/dist/movethewheels/utils/orderValidation.d.ts +11 -0
- package/dist/pages/CreateOrderPage.js +349 -297
- package/dist/pages/DriverDetailsPage.js +258 -251
- package/dist/pages/DriversPage.js +3 -1
- package/dist/pages/MultiModalShipmentPage.js +139 -125
- package/dist/pages/OrderDetailsPage.js +132 -140
- package/dist/pages/ProductDetailsPage.js +22 -19
- package/dist/pages/RouteDetailsPage.js +284 -281
- package/dist/pages/TrackingPage.js +2 -1
- package/dist/pages/VehicleDetailsPage.js +28 -25
- package/dist/utils/orderValidation.js +18 -0
- package/package.json +1 -1
- package/src/movethewheels/components/CustomerPicker.tsx +12 -0
- package/src/movethewheels/components/EntityCombobox.tsx +30 -11
- package/src/movethewheels/components/OrderItemRow.tsx +44 -0
- package/src/movethewheels/hooks/useCustomers.ts +38 -0
- package/src/movethewheels/hooks/useFleet.ts +125 -5
- package/src/movethewheels/hooks/useInventory.ts +42 -0
- package/src/movethewheels/hooks/useMultiModalShipments.ts +9 -7
- package/src/movethewheels/hooks/useRefetchOnLeaveEdit.ts +18 -0
- package/src/movethewheels/hooks/useRoutes.ts +51 -0
- package/src/movethewheels/pages/CreateOrderPage.tsx +66 -2
- package/src/movethewheels/pages/DriverDetailsPage.tsx +14 -1
- package/src/movethewheels/pages/DriversPage.tsx +7 -1
- package/src/movethewheels/pages/MultiModalShipmentPage.tsx +15 -1
- package/src/movethewheels/pages/OrderDetailsPage.tsx +25 -25
- package/src/movethewheels/pages/ProductDetailsPage.tsx +2 -0
- package/src/movethewheels/pages/RouteDetailsPage.tsx +10 -4
- package/src/movethewheels/pages/TrackingPage.tsx +7 -2
- package/src/movethewheels/pages/VehicleDetailsPage.tsx +2 -0
- package/src/movethewheels/utils/orderValidation.ts +53 -0
|
@@ -25,7 +25,7 @@ function f(s = {}) {
|
|
|
25
25
|
f?.isActive,
|
|
26
26
|
f?.search,
|
|
27
27
|
f?.type
|
|
28
|
-
]), { apiGatewayUrl: g, authToken: _, workspaceToken: v, workspaceId: y, tenantId: b, currentUser: x } = e(), [S, C] = a([]), [w, T] = a(0), [E, D] = a(!1), [O, k] = a(!1), [A, j] = a(
|
|
28
|
+
]), { apiGatewayUrl: g, authToken: _, workspaceToken: v, workspaceId: y, tenantId: b, currentUser: x } = e(), [S, C] = a([]), [w, T] = a(0), [E, D] = a(!1), [O, k] = a(!1), [A, j] = a(!1), [M, N] = a(null), P = i(() => ({
|
|
29
29
|
apiGatewayUrl: g,
|
|
30
30
|
authToken: _,
|
|
31
31
|
workspaceToken: v,
|
|
@@ -39,10 +39,10 @@ function f(s = {}) {
|
|
|
39
39
|
y,
|
|
40
40
|
b,
|
|
41
41
|
x?.id
|
|
42
|
-
]),
|
|
43
|
-
k(!0),
|
|
42
|
+
]), F = n(async () => {
|
|
43
|
+
k(!0), N(null);
|
|
44
44
|
try {
|
|
45
|
-
let e = await t(
|
|
45
|
+
let e = await t(P, o, {
|
|
46
46
|
filter: {
|
|
47
47
|
type: h?.type,
|
|
48
48
|
search: h?.search
|
|
@@ -54,29 +54,64 @@ function f(s = {}) {
|
|
|
54
54
|
}), n = e.customers;
|
|
55
55
|
T(e.customersCount), D(m + n.length < e.customersCount), C(n.map(d));
|
|
56
56
|
} catch (e) {
|
|
57
|
-
|
|
57
|
+
N(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load customers"));
|
|
58
58
|
} finally {
|
|
59
59
|
k(!1);
|
|
60
60
|
}
|
|
61
61
|
}, [
|
|
62
62
|
h,
|
|
63
|
-
|
|
63
|
+
P,
|
|
64
|
+
p,
|
|
65
|
+
m
|
|
66
|
+
]), I = n(async () => {
|
|
67
|
+
if (!E || O || A) return;
|
|
68
|
+
let e = m + S.length;
|
|
69
|
+
j(!0), N(null);
|
|
70
|
+
try {
|
|
71
|
+
let n = await t(P, o, {
|
|
72
|
+
filter: {
|
|
73
|
+
type: h?.type,
|
|
74
|
+
search: h?.search
|
|
75
|
+
},
|
|
76
|
+
pagination: {
|
|
77
|
+
limit: p,
|
|
78
|
+
offset: e
|
|
79
|
+
}
|
|
80
|
+
}), r = n.customers.map(d);
|
|
81
|
+
T(n.customersCount), D(e + r.length < n.customersCount), C((e) => {
|
|
82
|
+
let t = new Set(e.map((e) => e.id));
|
|
83
|
+
return [...e, ...r.filter((e) => !t.has(e.id))];
|
|
84
|
+
});
|
|
85
|
+
} catch (e) {
|
|
86
|
+
N(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more customers"));
|
|
87
|
+
} finally {
|
|
88
|
+
j(!1);
|
|
89
|
+
}
|
|
90
|
+
}, [
|
|
91
|
+
S.length,
|
|
92
|
+
h,
|
|
93
|
+
P,
|
|
94
|
+
E,
|
|
95
|
+
O,
|
|
96
|
+
A,
|
|
64
97
|
p,
|
|
65
98
|
m
|
|
66
99
|
]);
|
|
67
100
|
return r(() => {
|
|
68
|
-
|
|
69
|
-
}, [
|
|
101
|
+
F();
|
|
102
|
+
}, [F]), {
|
|
70
103
|
customers: S,
|
|
71
104
|
totalCustomers: w,
|
|
72
105
|
hasMore: E,
|
|
73
106
|
isLoading: O,
|
|
74
|
-
|
|
107
|
+
isLoadingMore: A,
|
|
108
|
+
error: M,
|
|
75
109
|
refetch: n(() => {
|
|
76
|
-
|
|
77
|
-
}, [
|
|
110
|
+
F();
|
|
111
|
+
}, [F]),
|
|
112
|
+
loadMore: I,
|
|
78
113
|
createCustomer: n(async (e) => {
|
|
79
|
-
let n = d((await t(
|
|
114
|
+
let n = d((await t(P, c, { input: {
|
|
80
115
|
name: e.name,
|
|
81
116
|
email: e.email,
|
|
82
117
|
phone: e.phone,
|
|
@@ -88,9 +123,9 @@ function f(s = {}) {
|
|
|
88
123
|
rating: e.rating
|
|
89
124
|
} })).createCustomer);
|
|
90
125
|
return C((e) => [n, ...e]), n;
|
|
91
|
-
}, [
|
|
126
|
+
}, [P]),
|
|
92
127
|
updateCustomer: n(async (e, n) => {
|
|
93
|
-
let r = d((await t(
|
|
128
|
+
let r = d((await t(P, l, {
|
|
94
129
|
id: e,
|
|
95
130
|
input: {
|
|
96
131
|
name: n.name,
|
|
@@ -105,10 +140,10 @@ function f(s = {}) {
|
|
|
105
140
|
}
|
|
106
141
|
})).updateCustomer);
|
|
107
142
|
return C((t) => t.map((t) => t.id === e ? r : t)), r;
|
|
108
|
-
}, [
|
|
143
|
+
}, [P]),
|
|
109
144
|
deleteCustomer: n(async (e) => {
|
|
110
|
-
await t(
|
|
111
|
-
}, [
|
|
145
|
+
await t(P, u, { id: e }), C((t) => t.filter((t) => t.id !== e));
|
|
146
|
+
}, [P])
|
|
112
147
|
};
|
|
113
148
|
}
|
|
114
149
|
function p(o) {
|
package/dist/hooks/useFleet.js
CHANGED
|
@@ -272,73 +272,115 @@ function O(e = {}) {
|
|
|
272
272
|
};
|
|
273
273
|
}
|
|
274
274
|
function k(e = {}) {
|
|
275
|
-
let { limit:
|
|
276
|
-
if (
|
|
277
|
-
|
|
275
|
+
let { limit: s = 20, offset: l = 0, search: p, status: m, vehicleType: h, driverId: g, ids: _ } = e, v = D(), [y, b] = a([]), [S, C] = a(0), [w, E] = a(!1), [O, k] = a(!1), [A, j] = a(!1), [M, N] = a(null), P = _ ? [..._].sort().join(",") : "", F = _ === void 0 ? "none" : "exact", I = i(() => P ? P.split(",") : [], [P]), L = n(async () => {
|
|
276
|
+
if (F === "exact" && I.length === 0) {
|
|
277
|
+
b([]), C(0), E(!1);
|
|
278
278
|
return;
|
|
279
279
|
}
|
|
280
|
-
|
|
280
|
+
k(!0), N(null);
|
|
281
281
|
try {
|
|
282
|
-
let e = await t(
|
|
282
|
+
let e = await t(v, o, {
|
|
283
283
|
filter: {
|
|
284
|
-
search:
|
|
285
|
-
status:
|
|
286
|
-
type:
|
|
287
|
-
driverId:
|
|
288
|
-
ids:
|
|
284
|
+
search: p || void 0,
|
|
285
|
+
status: m ? x(m) : void 0,
|
|
286
|
+
type: h?.toUpperCase(),
|
|
287
|
+
driverId: g || void 0,
|
|
288
|
+
ids: I.length > 0 ? I : void 0
|
|
289
289
|
},
|
|
290
290
|
pagination: {
|
|
291
|
-
limit:
|
|
292
|
-
offset:
|
|
291
|
+
limit: F === "exact" ? I.length : s,
|
|
292
|
+
offset: F === "exact" ? 0 : l
|
|
293
293
|
}
|
|
294
294
|
});
|
|
295
|
-
|
|
295
|
+
E(F === "none" && l + e.vehicles.length < e.vehiclesCount), C(e.vehiclesCount), b(e.vehicles.map(T));
|
|
296
296
|
} catch (e) {
|
|
297
|
-
|
|
297
|
+
N(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load vehicles"));
|
|
298
298
|
} finally {
|
|
299
|
-
|
|
299
|
+
k(!1);
|
|
300
300
|
}
|
|
301
301
|
}, [
|
|
302
|
-
|
|
303
|
-
i,
|
|
302
|
+
v,
|
|
304
303
|
s,
|
|
305
304
|
l,
|
|
306
305
|
p,
|
|
307
306
|
m,
|
|
308
307
|
h,
|
|
309
|
-
g
|
|
308
|
+
g,
|
|
309
|
+
F,
|
|
310
|
+
I
|
|
311
|
+
]), R = n(async () => {
|
|
312
|
+
if (F === "exact" || !w || O || A) return;
|
|
313
|
+
let e = l + y.length;
|
|
314
|
+
j(!0), N(null);
|
|
315
|
+
try {
|
|
316
|
+
let n = await t(v, o, {
|
|
317
|
+
filter: {
|
|
318
|
+
search: p || void 0,
|
|
319
|
+
status: m ? x(m) : void 0,
|
|
320
|
+
type: h?.toUpperCase(),
|
|
321
|
+
driverId: g || void 0
|
|
322
|
+
},
|
|
323
|
+
pagination: {
|
|
324
|
+
limit: s,
|
|
325
|
+
offset: e
|
|
326
|
+
}
|
|
327
|
+
}), r = n.vehicles.map(T);
|
|
328
|
+
C(n.vehiclesCount), E(e + r.length < n.vehiclesCount), b((e) => {
|
|
329
|
+
let t = new Set(e.map((e) => e.id));
|
|
330
|
+
return [...e, ...r.filter((e) => !t.has(e.id))];
|
|
331
|
+
});
|
|
332
|
+
} catch (e) {
|
|
333
|
+
N(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more vehicles"));
|
|
334
|
+
} finally {
|
|
335
|
+
j(!1);
|
|
336
|
+
}
|
|
337
|
+
}, [
|
|
338
|
+
g,
|
|
339
|
+
v,
|
|
340
|
+
w,
|
|
341
|
+
F,
|
|
342
|
+
O,
|
|
343
|
+
A,
|
|
344
|
+
s,
|
|
345
|
+
l,
|
|
346
|
+
p,
|
|
347
|
+
m,
|
|
348
|
+
h,
|
|
349
|
+
y.length
|
|
310
350
|
]);
|
|
311
351
|
return r(() => {
|
|
312
|
-
|
|
313
|
-
}, [
|
|
314
|
-
vehicles:
|
|
315
|
-
totalVehicles:
|
|
316
|
-
hasMore:
|
|
317
|
-
isLoading:
|
|
318
|
-
|
|
352
|
+
L();
|
|
353
|
+
}, [L]), {
|
|
354
|
+
vehicles: y,
|
|
355
|
+
totalVehicles: S,
|
|
356
|
+
hasMore: w,
|
|
357
|
+
isLoading: O,
|
|
358
|
+
isLoadingMore: A,
|
|
359
|
+
error: M,
|
|
319
360
|
refetch: n(() => {
|
|
320
|
-
|
|
321
|
-
}, [
|
|
361
|
+
L();
|
|
362
|
+
}, [L]),
|
|
363
|
+
loadMore: R,
|
|
322
364
|
updateVehicleStatus: n(async (e, n) => {
|
|
323
|
-
let r = T((await t(
|
|
365
|
+
let r = T((await t(v, d, {
|
|
324
366
|
id: e,
|
|
325
367
|
status: x(n)
|
|
326
368
|
})).updateVehicleStatus);
|
|
327
|
-
return
|
|
328
|
-
}, [
|
|
369
|
+
return b((t) => t.map((t) => t.id === e ? r : t)), r;
|
|
370
|
+
}, [v]),
|
|
329
371
|
assignDriver: n(async (e, n) => {
|
|
330
|
-
await t(
|
|
372
|
+
await t(v, f, {
|
|
331
373
|
id: n,
|
|
332
374
|
vehicleId: e
|
|
333
375
|
});
|
|
334
|
-
let r = await t(
|
|
376
|
+
let r = await t(v, c, { id: e });
|
|
335
377
|
if (!r.vehicle) throw Error("Vehicle not found");
|
|
336
378
|
let i = T(r.vehicle);
|
|
337
|
-
return
|
|
338
|
-
}, [
|
|
379
|
+
return b((t) => t.map((t) => t.id === e ? i : t)), i;
|
|
380
|
+
}, [v]),
|
|
339
381
|
deleteVehicle: n(async (e) => {
|
|
340
|
-
await t(
|
|
341
|
-
}, [
|
|
382
|
+
await t(v, u, { id: e }), b((t) => t.filter((t) => t.id !== e));
|
|
383
|
+
}, [v])
|
|
342
384
|
};
|
|
343
385
|
}
|
|
344
386
|
function A(e) {
|
|
@@ -369,8 +411,8 @@ function A(e) {
|
|
|
369
411
|
};
|
|
370
412
|
}
|
|
371
413
|
function j(e = {}) {
|
|
372
|
-
let { limit: i = 20, offset: o = 0, status: c, search: l, licenseClass: u, vehicleId: d } = e, m = D(), [h, g] = a([]), [_, v] = a(0), [y, b] = a(!1), [x, S] = a(!1), [w, T] = a(
|
|
373
|
-
S(!0),
|
|
414
|
+
let { limit: i = 20, offset: o = 0, status: c, search: l, licenseClass: u, vehicleId: d } = e, m = D(), [h, g] = a([]), [_, v] = a(0), [y, b] = a(!1), [x, S] = a(!1), [w, T] = a(!1), [O, k] = a(null), A = n(async () => {
|
|
415
|
+
S(!0), k(null);
|
|
374
416
|
try {
|
|
375
417
|
let e = await t(m, s, {
|
|
376
418
|
filter: {
|
|
@@ -386,7 +428,7 @@ function j(e = {}) {
|
|
|
386
428
|
});
|
|
387
429
|
b(o + e.drivers.length < e.driversCount), v(e.driversCount), g(e.drivers.map(E));
|
|
388
430
|
} catch (e) {
|
|
389
|
-
|
|
431
|
+
k(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load drivers"));
|
|
390
432
|
} finally {
|
|
391
433
|
S(!1);
|
|
392
434
|
}
|
|
@@ -398,18 +440,58 @@ function j(e = {}) {
|
|
|
398
440
|
l,
|
|
399
441
|
u,
|
|
400
442
|
d
|
|
443
|
+
]), j = n(async () => {
|
|
444
|
+
if (!y || x || w) return;
|
|
445
|
+
let e = o + h.length;
|
|
446
|
+
T(!0), k(null);
|
|
447
|
+
try {
|
|
448
|
+
let n = await t(m, s, {
|
|
449
|
+
filter: {
|
|
450
|
+
status: c ? C(c) : void 0,
|
|
451
|
+
search: l || void 0,
|
|
452
|
+
licenseClass: u || void 0,
|
|
453
|
+
vehicleId: d || void 0
|
|
454
|
+
},
|
|
455
|
+
pagination: {
|
|
456
|
+
limit: i,
|
|
457
|
+
offset: e
|
|
458
|
+
}
|
|
459
|
+
}), r = n.drivers.map(E);
|
|
460
|
+
v(n.driversCount), b(e + r.length < n.driversCount), g((e) => {
|
|
461
|
+
let t = new Set(e.map((e) => e.id));
|
|
462
|
+
return [...e, ...r.filter((e) => !t.has(e.id))];
|
|
463
|
+
});
|
|
464
|
+
} catch (e) {
|
|
465
|
+
k(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more drivers"));
|
|
466
|
+
} finally {
|
|
467
|
+
T(!1);
|
|
468
|
+
}
|
|
469
|
+
}, [
|
|
470
|
+
h.length,
|
|
471
|
+
m,
|
|
472
|
+
y,
|
|
473
|
+
x,
|
|
474
|
+
w,
|
|
475
|
+
i,
|
|
476
|
+
u,
|
|
477
|
+
o,
|
|
478
|
+
l,
|
|
479
|
+
c,
|
|
480
|
+
d
|
|
401
481
|
]);
|
|
402
482
|
return r(() => {
|
|
403
|
-
|
|
404
|
-
}, [
|
|
483
|
+
A();
|
|
484
|
+
}, [A]), {
|
|
405
485
|
drivers: h,
|
|
406
486
|
totalDrivers: _,
|
|
407
487
|
hasMore: y,
|
|
408
488
|
isLoading: x,
|
|
409
|
-
|
|
489
|
+
isLoadingMore: w,
|
|
490
|
+
error: O,
|
|
410
491
|
refetch: n(() => {
|
|
411
|
-
|
|
412
|
-
}, [
|
|
492
|
+
A();
|
|
493
|
+
}, [A]),
|
|
494
|
+
loadMore: j,
|
|
413
495
|
updateDriverStatus: n(async (e, n) => {
|
|
414
496
|
let r = E((await t(m, p, {
|
|
415
497
|
id: e,
|
|
@@ -273,8 +273,8 @@ function D(e = {}) {
|
|
|
273
273
|
};
|
|
274
274
|
}
|
|
275
275
|
function O(e = {}) {
|
|
276
|
-
let { limit: i = 20, offset: o = 0, search: c, category: l } = e, u = E(), [d, f] = a([]), [p, m] = a(0), [h, g] = a(!1), [_, v] = a(!1), [y, b] = a(
|
|
277
|
-
v(!0),
|
|
276
|
+
let { limit: i = 20, offset: o = 0, search: c, category: l } = e, u = E(), [d, f] = a([]), [p, m] = a(0), [h, g] = a(!1), [_, v] = a(!1), [y, b] = a(!1), [x, C] = a(null), w = n(async () => {
|
|
277
|
+
v(!0), C(null);
|
|
278
278
|
try {
|
|
279
279
|
let e = await t(u, s, {
|
|
280
280
|
filter: {
|
|
@@ -288,7 +288,7 @@ function O(e = {}) {
|
|
|
288
288
|
});
|
|
289
289
|
g(o + e.cargoItems.length < e.cargoItemsCount), m(e.cargoItemsCount), f(e.cargoItems.map(S));
|
|
290
290
|
} catch (e) {
|
|
291
|
-
|
|
291
|
+
C(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load products"));
|
|
292
292
|
} finally {
|
|
293
293
|
v(!1);
|
|
294
294
|
}
|
|
@@ -298,16 +298,52 @@ function O(e = {}) {
|
|
|
298
298
|
o,
|
|
299
299
|
c,
|
|
300
300
|
l
|
|
301
|
+
]), T = n(async () => {
|
|
302
|
+
if (!h || _ || y) return;
|
|
303
|
+
let e = o + d.length;
|
|
304
|
+
b(!0), C(null);
|
|
305
|
+
try {
|
|
306
|
+
let n = await t(u, s, {
|
|
307
|
+
filter: {
|
|
308
|
+
search: c || void 0,
|
|
309
|
+
category: l || void 0
|
|
310
|
+
},
|
|
311
|
+
pagination: {
|
|
312
|
+
limit: i,
|
|
313
|
+
offset: e
|
|
314
|
+
}
|
|
315
|
+
}), r = n.cargoItems.map(S);
|
|
316
|
+
m(n.cargoItemsCount), g(e + r.length < n.cargoItemsCount), f((e) => {
|
|
317
|
+
let t = new Set(e.map((e) => e.id));
|
|
318
|
+
return [...e, ...r.filter((e) => !t.has(e.id))];
|
|
319
|
+
});
|
|
320
|
+
} catch (e) {
|
|
321
|
+
C(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more products"));
|
|
322
|
+
} finally {
|
|
323
|
+
b(!1);
|
|
324
|
+
}
|
|
325
|
+
}, [
|
|
326
|
+
l,
|
|
327
|
+
u,
|
|
328
|
+
h,
|
|
329
|
+
_,
|
|
330
|
+
y,
|
|
331
|
+
i,
|
|
332
|
+
o,
|
|
333
|
+
d.length,
|
|
334
|
+
c
|
|
301
335
|
]);
|
|
302
336
|
return r(() => {
|
|
303
|
-
|
|
304
|
-
}, [
|
|
337
|
+
w();
|
|
338
|
+
}, [w]), {
|
|
305
339
|
products: d,
|
|
306
340
|
totalProducts: p,
|
|
307
341
|
hasMore: h,
|
|
308
342
|
isLoading: _,
|
|
309
|
-
|
|
310
|
-
|
|
343
|
+
isLoadingMore: y,
|
|
344
|
+
error: x,
|
|
345
|
+
refetch: () => void w(),
|
|
346
|
+
loadMore: T
|
|
311
347
|
};
|
|
312
348
|
}
|
|
313
349
|
var k = "\n query CargoItemStats {\n cargoItemStats {\n total\n specialHandling\n temperatureControlled\n }\n }\n";
|
|
@@ -3,11 +3,11 @@ import { executeGraphQL as t } from "../utils/graphqlClient.js";
|
|
|
3
3
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
4
4
|
//#region src/movethewheels/hooks/useMultiModalShipments.ts
|
|
5
5
|
var o = "\n id\n shipmentNumber\n status\n primaryMode\n isMultiModal\n totalFreightCost\n freightCurrency\n origin\n destination\n createdAt\n legs(pagination: { limit: 20, offset: 0 }) {\n \n id\n legNumber\n mode\n status\n origin\n destination\n distanceKm\n weightKg\n lengthCm\n widthCm\n heightCm\n volumeCbm\n containerType\n containerCount\n carrierName\n chargeableWeightKg\n calculatedCost\n currency\n\n }\n", s = `
|
|
6
|
-
query ListMultiModalShipments($pagination: PaginationInput) {
|
|
7
|
-
shipments(filter: { isMultiModal: true }, pagination: $pagination) {
|
|
6
|
+
query ListMultiModalShipments($search: String, $pagination: PaginationInput) {
|
|
7
|
+
shipments(filter: { isMultiModal: true, search: $search }, pagination: $pagination) {
|
|
8
8
|
${o}
|
|
9
9
|
}
|
|
10
|
-
shipmentsCount(filter: { isMultiModal: true })
|
|
10
|
+
shipmentsCount(filter: { isMultiModal: true, search: $search })
|
|
11
11
|
}
|
|
12
12
|
`, c = "\n query CalculateFreightRate($input: FreightRateInput!) {\n calculateFreightRate(input: $input) {\n mode\n chargeableWeightKg\n ratePerUnit\n calculatedCost\n currency\n breakdown {\n label\n amount\n }\n }\n }\n", l = `
|
|
13
13
|
mutation PlanMultiModalShipment($input: PlanMultiModalShipmentInput!) {
|
|
@@ -101,44 +101,48 @@ function m() {
|
|
|
101
101
|
]);
|
|
102
102
|
}
|
|
103
103
|
function h(e = {}) {
|
|
104
|
-
let { limit: i = 10, offset: o = 0 } = e,
|
|
105
|
-
|
|
104
|
+
let { limit: i = 10, offset: o = 0, search: f = "" } = e, h = m(), [g, _] = a([]), [v, y] = a(0), [b, x] = a(!1), [S, C] = a(!1), [w, T] = a(null), E = n(async () => {
|
|
105
|
+
C(!0), T(null);
|
|
106
106
|
try {
|
|
107
|
-
let e = await t(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
let e = await t(h, s, {
|
|
108
|
+
search: f.trim() || void 0,
|
|
109
|
+
pagination: {
|
|
110
|
+
limit: i,
|
|
111
|
+
offset: o
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
_(e.shipments.map(p)), y(e.shipmentsCount), x(o + e.shipments.length < e.shipmentsCount);
|
|
112
115
|
} catch (e) {
|
|
113
|
-
|
|
116
|
+
T(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load multi-modal shipments"));
|
|
114
117
|
} finally {
|
|
115
|
-
|
|
118
|
+
C(!1);
|
|
116
119
|
}
|
|
117
120
|
}, [
|
|
118
|
-
|
|
121
|
+
h,
|
|
119
122
|
i,
|
|
120
|
-
o
|
|
123
|
+
o,
|
|
124
|
+
f
|
|
121
125
|
]);
|
|
122
126
|
return r(() => {
|
|
123
|
-
|
|
124
|
-
}, [
|
|
125
|
-
shipments:
|
|
126
|
-
totalShipments:
|
|
127
|
-
hasMore:
|
|
128
|
-
isLoading:
|
|
129
|
-
error:
|
|
130
|
-
refetch: () => void
|
|
131
|
-
calculateFreightRate: n(async (e) => (await t(
|
|
127
|
+
E();
|
|
128
|
+
}, [E]), {
|
|
129
|
+
shipments: g,
|
|
130
|
+
totalShipments: v,
|
|
131
|
+
hasMore: b,
|
|
132
|
+
isLoading: S,
|
|
133
|
+
error: w,
|
|
134
|
+
refetch: () => void E(),
|
|
135
|
+
calculateFreightRate: n(async (e) => (await t(h, c, { input: d(e) })).calculateFreightRate, [h]),
|
|
132
136
|
planMultiModalShipment: n(async (e) => {
|
|
133
|
-
let n = p((await t(
|
|
137
|
+
let n = p((await t(h, l, { input: {
|
|
134
138
|
shipmentNumber: e.shipmentNumber,
|
|
135
139
|
customerId: e.customerId,
|
|
136
140
|
origin: e.origin,
|
|
137
141
|
destination: e.destination,
|
|
138
142
|
legs: e.legs.map(u)
|
|
139
143
|
} })).planMultiModalShipment);
|
|
140
|
-
return
|
|
141
|
-
}, [
|
|
144
|
+
return _((e) => [n, ...e]), y((e) => e + 1), n;
|
|
145
|
+
}, [h])
|
|
142
146
|
};
|
|
143
147
|
}
|
|
144
148
|
//#endregion
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useEffect as e, useRef as t } from "react";
|
|
2
|
+
//#region src/movethewheels/hooks/useRefetchOnLeaveEdit.ts
|
|
3
|
+
function n(n, r) {
|
|
4
|
+
let i = t(n);
|
|
5
|
+
e(() => {
|
|
6
|
+
i.current && !n && r(), i.current = n;
|
|
7
|
+
}, [n, r]);
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { n as useRefetchOnLeaveEdit };
|
package/dist/hooks/useRoutes.js
CHANGED
|
@@ -79,8 +79,8 @@ function g() {
|
|
|
79
79
|
]);
|
|
80
80
|
}
|
|
81
81
|
function _(e = {}) {
|
|
82
|
-
let { driverId: i, vehicleId: s, status: f, search: m, limit: _ = 20, offset: v = 0 } = e, y = g(), [b, x] = a([]), [S, C] = a(0), [w, T] = a(!1), [E, D] = a(!1), [O, k] = a(
|
|
83
|
-
D(!0),
|
|
82
|
+
let { driverId: i, vehicleId: s, status: f, search: m, limit: _ = 20, offset: v = 0 } = e, y = g(), [b, x] = a([]), [S, C] = a(0), [w, T] = a(!1), [E, D] = a(!1), [O, k] = a(!1), [A, j] = a(null), M = n(async () => {
|
|
83
|
+
D(!0), j(null);
|
|
84
84
|
try {
|
|
85
85
|
let e = await t(y, o, {
|
|
86
86
|
filter: {
|
|
@@ -96,7 +96,7 @@ function _(e = {}) {
|
|
|
96
96
|
});
|
|
97
97
|
C(e.routesCount), T(v + e.routes.length < e.routesCount), x(e.routes.map(h));
|
|
98
98
|
} catch (e) {
|
|
99
|
-
|
|
99
|
+
j(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load routes"));
|
|
100
100
|
} finally {
|
|
101
101
|
D(!1);
|
|
102
102
|
}
|
|
@@ -108,13 +108,51 @@ function _(e = {}) {
|
|
|
108
108
|
s,
|
|
109
109
|
_,
|
|
110
110
|
v
|
|
111
|
+
]), N = n(async () => {
|
|
112
|
+
if (!w || E || O) return;
|
|
113
|
+
let e = v + b.length;
|
|
114
|
+
k(!0), j(null);
|
|
115
|
+
try {
|
|
116
|
+
let n = await t(y, o, {
|
|
117
|
+
filter: {
|
|
118
|
+
driverId: i,
|
|
119
|
+
vehicleId: s,
|
|
120
|
+
status: f ? p(f) : void 0,
|
|
121
|
+
search: m || void 0
|
|
122
|
+
},
|
|
123
|
+
pagination: {
|
|
124
|
+
limit: _,
|
|
125
|
+
offset: e
|
|
126
|
+
}
|
|
127
|
+
}), r = n.routes.map(h);
|
|
128
|
+
C(n.routesCount), T(e + r.length < n.routesCount), x((e) => {
|
|
129
|
+
let t = new Set(e.map((e) => e.id));
|
|
130
|
+
return [...e, ...r.filter((e) => !t.has(e.id))];
|
|
131
|
+
});
|
|
132
|
+
} catch (e) {
|
|
133
|
+
j(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load more routes"));
|
|
134
|
+
} finally {
|
|
135
|
+
k(!1);
|
|
136
|
+
}
|
|
137
|
+
}, [
|
|
138
|
+
i,
|
|
139
|
+
y,
|
|
140
|
+
w,
|
|
141
|
+
E,
|
|
142
|
+
O,
|
|
143
|
+
_,
|
|
144
|
+
v,
|
|
145
|
+
b.length,
|
|
146
|
+
m,
|
|
147
|
+
f,
|
|
148
|
+
s
|
|
111
149
|
]);
|
|
112
150
|
r(() => {
|
|
113
|
-
|
|
114
|
-
}, [
|
|
115
|
-
let
|
|
116
|
-
|
|
117
|
-
}, [
|
|
151
|
+
M();
|
|
152
|
+
}, [M]);
|
|
153
|
+
let P = n(() => {
|
|
154
|
+
M();
|
|
155
|
+
}, [M]), F = n(async (e) => {
|
|
118
156
|
let n = h((await t(y, c, { input: {
|
|
119
157
|
name: e.name ?? `Route ${(/* @__PURE__ */ new Date()).toLocaleDateString()}`,
|
|
120
158
|
status: p(e.status),
|
|
@@ -126,7 +164,7 @@ function _(e = {}) {
|
|
|
126
164
|
fuelCost: e.fuelCost
|
|
127
165
|
} })).createRoute);
|
|
128
166
|
return x((e) => [n, ...e]), n;
|
|
129
|
-
}, [y]),
|
|
167
|
+
}, [y]), I = n(async (e, n) => {
|
|
130
168
|
let r = h((await t(y, l, {
|
|
131
169
|
id: e,
|
|
132
170
|
input: {
|
|
@@ -147,10 +185,12 @@ function _(e = {}) {
|
|
|
147
185
|
totalRoutes: S,
|
|
148
186
|
hasMore: w,
|
|
149
187
|
isLoading: E,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
188
|
+
isLoadingMore: O,
|
|
189
|
+
error: A,
|
|
190
|
+
refetch: P,
|
|
191
|
+
loadMore: N,
|
|
192
|
+
createRoute: F,
|
|
193
|
+
updateRoute: I,
|
|
154
194
|
deleteRoute: n(async (e) => {
|
|
155
195
|
await t(y, u, { id: e }), x((t) => t.filter((t) => t.id !== e));
|
|
156
196
|
}, [y]),
|
|
@@ -169,11 +209,11 @@ function _(e = {}) {
|
|
|
169
209
|
status: n,
|
|
170
210
|
actualTime: n === "completed" ? /* @__PURE__ */ new Date() : e.actualTime
|
|
171
211
|
} : e);
|
|
172
|
-
return
|
|
212
|
+
return I(e, {
|
|
173
213
|
stops: i,
|
|
174
214
|
status: i.every((e) => e.status === "completed") ? "completed" : r.status
|
|
175
215
|
});
|
|
176
|
-
}, [b,
|
|
216
|
+
}, [b, I])
|
|
177
217
|
};
|
|
178
218
|
}
|
|
179
219
|
function v(e) {
|
|
@@ -7,8 +7,12 @@ interface CustomerPickerProps {
|
|
|
7
7
|
onCreated: (customer: Customer) => void;
|
|
8
8
|
createCustomer: (customer: Partial<Customer>) => Promise<Customer>;
|
|
9
9
|
isLoading: boolean;
|
|
10
|
+
isLoadingMore?: boolean;
|
|
10
11
|
error: Error | null;
|
|
11
12
|
onRetry: () => void;
|
|
13
|
+
onLoadMore?: () => void | Promise<void>;
|
|
14
|
+
hasMore?: boolean;
|
|
15
|
+
totalCount?: number;
|
|
12
16
|
onOpenCustomers?: () => void;
|
|
13
17
|
selectedCustomer?: Customer | null;
|
|
14
18
|
/** Called with the (already debounced) query text as the user types in the
|
|
@@ -16,5 +20,5 @@ interface CustomerPickerProps {
|
|
|
16
20
|
onSearchQueryChange?: (query: string) => void;
|
|
17
21
|
disabled?: boolean;
|
|
18
22
|
}
|
|
19
|
-
export declare function CustomerPicker({ customers, value, onValueChange, onCreated, createCustomer, isLoading, error, onRetry, onOpenCustomers, selectedCustomer, onSearchQueryChange, disabled, }: CustomerPickerProps): import("react").JSX.Element;
|
|
23
|
+
export declare function CustomerPicker({ customers, value, onValueChange, onCreated, createCustomer, isLoading, isLoadingMore, error, onRetry, onLoadMore, hasMore, totalCount, onOpenCustomers, selectedCustomer, onSearchQueryChange, disabled, }: CustomerPickerProps): import("react").JSX.Element;
|
|
20
24
|
export {};
|
|
@@ -31,10 +31,13 @@ interface EntityComboboxProps<T> {
|
|
|
31
31
|
/** Server-side search callback (debounced). Omit to hide the built-in search
|
|
32
32
|
* input when a caller already provides one elsewhere for the same list. */
|
|
33
33
|
onSearchChange?: (value: string) => void;
|
|
34
|
-
/** True when the source hook
|
|
35
|
-
* paired with `totalCount` to render a "keep typing to narrow" hint. */
|
|
34
|
+
/** True when the source hook has another server page available. */
|
|
36
35
|
hasMore?: boolean;
|
|
37
36
|
totalCount?: number;
|
|
37
|
+
/** Fetches and appends the next server page without replacing the current options. */
|
|
38
|
+
onLoadMore?: () => void | Promise<void>;
|
|
39
|
+
/** True while the next server page is being fetched. */
|
|
40
|
+
loadingMore?: boolean;
|
|
38
41
|
}
|
|
39
|
-
export declare function EntityCombobox<T>({ value, onChange, options, loading, getId, renderOption, getLabel, selectedOption, selectedLoading, required, placeholder, searchPlaceholder, emptyText, noneLabel, disabled, id, error, className, onSearchChange, hasMore, totalCount, }: EntityComboboxProps<T>): import("react").JSX.Element;
|
|
42
|
+
export declare function EntityCombobox<T>({ value, onChange, options, loading, getId, renderOption, getLabel, selectedOption, selectedLoading, required, placeholder, searchPlaceholder, emptyText, noneLabel, disabled, id, error, className, onSearchChange, hasMore, totalCount, onLoadMore, loadingMore, }: EntityComboboxProps<T>): import("react").JSX.Element;
|
|
40
43
|
export {};
|