@burdenoff/microfe-movethewheels 2026.924.2 → 2026.925.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.
Files changed (47) hide show
  1. package/dist/components/OrderItemRow.js +195 -109
  2. package/dist/components/StatusBadge.js +31 -31
  3. package/dist/constants/index.js +11 -3
  4. package/dist/generated/wspace-operations.d.ts +7 -0
  5. package/dist/hooks/useFleet.js +85 -76
  6. package/dist/hooks/useOrders.js +8 -4
  7. package/dist/hooks/useTracking.js +127 -66
  8. package/dist/movethewheels/components/OrderItemRow.d.ts +1 -2
  9. package/dist/movethewheels/components/StatusBadge.d.ts +3 -1
  10. package/dist/movethewheels/constants/index.d.ts +1 -0
  11. package/dist/movethewheels/hooks/useFleet.d.ts +41 -1
  12. package/dist/movethewheels/hooks/useOrders.d.ts +1 -0
  13. package/dist/movethewheels/hooks/useTracking.d.ts +2 -2
  14. package/dist/movethewheels/types/index.d.ts +17 -39
  15. package/dist/node_modules/lucide-react/dist/esm/icons/sticky-note.js +11 -0
  16. package/dist/node_modules/lucide-react/dist/esm/icons/user-x.js +30 -0
  17. package/dist/pages/CreateOrderPage.js +597 -420
  18. package/dist/pages/DriverDetailsPage.js +702 -421
  19. package/dist/pages/DriversPage.js +106 -117
  20. package/dist/pages/FleetPage.js +4 -10
  21. package/dist/pages/OrderDetailsPage.js +290 -262
  22. package/dist/pages/OrdersListPage.js +4 -0
  23. package/dist/pages/RouteDetailsPage.js +264 -252
  24. package/dist/pages/TrackingPage.js +205 -195
  25. package/dist/pages/VehicleDetailsPage.js +403 -243
  26. package/dist/utils/mapMarkers.js +2 -1
  27. package/package.json +1 -1
  28. package/src/generated/wspace-operations.ts +10 -3
  29. package/src/movethewheels/components/OrderItemRow.tsx +162 -99
  30. package/src/movethewheels/components/StatusBadge.tsx +11 -2
  31. package/src/movethewheels/constants/index.ts +13 -0
  32. package/src/movethewheels/hooks/useFleet.ts +163 -44
  33. package/src/movethewheels/hooks/useOrders.ts +17 -3
  34. package/src/movethewheels/hooks/useTracking.ts +208 -27
  35. package/src/movethewheels/pages/CreateOrderPage.tsx +372 -263
  36. package/src/movethewheels/pages/DriverDetailsPage.tsx +516 -156
  37. package/src/movethewheels/pages/DriversPage.tsx +28 -11
  38. package/src/movethewheels/pages/FleetPage.tsx +7 -10
  39. package/src/movethewheels/pages/OrderDetailsPage.tsx +67 -30
  40. package/src/movethewheels/pages/OrdersListPage.tsx +1 -0
  41. package/src/movethewheels/pages/RouteDetailsPage.tsx +15 -7
  42. package/src/movethewheels/pages/TrackingPage.tsx +44 -14
  43. package/src/movethewheels/pages/VehicleDetailsPage.tsx +137 -15
  44. package/src/movethewheels/types/index.ts +17 -38
  45. package/src/movethewheels/utils/mapMarkers.ts +1 -0
  46. package/src/operations/wspace/movethewheels/queries/dashboard.graphql +5 -0
  47. package/src/operations/wspace/movethewheels/queries/logistics.graphql +2 -2
@@ -2,7 +2,7 @@ import { useMoveTheWheels as e } from "../providers/MoveTheWheelsProvider.js";
2
2
  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/useFleet.ts
5
- var o = "\n query ListVehicles($filter: VehicleFilterInput, $pagination: PaginationInput) {\n vehicles(filter: $filter, pagination: $pagination) {\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 updatedAt\n }\n vehiclesCount(filter: $filter)\n }\n", s = "\n query ListDrivers($filter: DriverFilterInput, $pagination: PaginationInput) {\n drivers(filter: $filter, pagination: $pagination) {\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 driversCount(filter: $filter)\n }\n", c = "\n query GetVehicle($id: ID!) {\n vehicle(id: $id) {\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 updatedAt\n }\n }\n", l = "\n query GetDriver($id: ID!) {\n driver(id: $id) {\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", u = "\n mutation UpdateVehicleStatus($id: ID!, $status: VehicleStatus!) {\n updateVehicleStatus(id: $id, status: $status) {\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 createdAt\n updatedAt\n }\n }\n", d = "\n mutation AssignDriverVehicle($id: ID!, $vehicleId: ID) {\n assignDriverVehicle(id: $id, vehicleId: $vehicleId) {\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", f = "\n mutation UpdateDriverStatus($id: ID!, $status: DriverStatus!) {\n updateDriverStatus(id: $id, status: $status) {\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", p = "\n mutation CreateVehicle($input: CreateVehicleInput!) {\n createVehicle(input: $input) {\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 createdAt\n updatedAt\n }\n }\n", m = "\n mutation CreateDriver($input: CreateDriverInput!) {\n createDriver(input: $input) {\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", h = "\n mutation UpdateVehicle($id: ID!, $input: UpdateVehicleInput!) {\n updateVehicle(id: $id, input: $input) {\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 createdAt\n updatedAt\n }\n }\n", g = "\n mutation UpdateDriver($id: ID!, $input: UpdateDriverInput!) {\n updateDriver(id: $id, input: $input) {\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 query GetDriverStatusCounts {\n onBreak: driversCount(filter: { status: ON_BREAK })\n offDuty: driversCount(filter: { status: OFF_DUTY })\n inactive: driversCount(filter: { status: INACTIVE })\n }\n", v = "\n query GetFleetStats {\n fleetStats {\n totalVehicles\n activeVehicles\n inTransitVehicles\n maintenanceVehicles\n totalDrivers\n availableDrivers\n onDeliveryDrivers\n avgDriverRating\n }\n }\n";
5
+ var o = "\n query ListVehicles($filter: VehicleFilterInput, $pagination: PaginationInput) {\n vehicles(filter: $filter, pagination: $pagination) {\n id\n vehicleNumber\n type\n make\n model\n licensePlate\n ownershipType\n year\n capacity\n status\n currentLocation\n fuelType\n fuelEfficiencyLPer100Km\n fuelLevel\n mileage\n lastServiceDate\n nextServiceDueDate\n nextServiceDueMileage\n createdAt\n updatedAt\n }\n vehiclesCount(filter: $filter)\n }\n", s = "\n query ListDrivers($filter: DriverFilterInput, $pagination: PaginationInput) {\n drivers(filter: $filter, pagination: $pagination) {\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 notes\n hireDate\n baseSalary\n bonusYtd\n payCurrency\n onLeaveUntil\n terminatedAt\n terminationReason\n createdAt\n }\n driversCount(filter: $filter)\n }\n", c = "\n query GetVehicle($id: ID!) {\n vehicle(id: $id) {\n id\n vehicleNumber\n type\n make\n model\n licensePlate\n ownershipType\n year\n capacity\n status\n currentLocation\n fuelType\n fuelEfficiencyLPer100Km\n fuelLevel\n mileage\n lastServiceDate\n nextServiceDueDate\n nextServiceDueMileage\n createdAt\n updatedAt\n }\n }\n", l = "\n query GetDriver($id: ID!) {\n driver(id: $id) {\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 notes\n hireDate\n baseSalary\n bonusYtd\n payCurrency\n onLeaveUntil\n terminatedAt\n terminationReason\n createdAt\n }\n }\n", u = "\n mutation UpdateVehicleStatus($id: ID!, $status: VehicleStatus!) {\n updateVehicleStatus(id: $id, status: $status) {\n id\n vehicleNumber\n type\n make\n model\n licensePlate\n ownershipType\n year\n capacity\n status\n currentLocation\n fuelType\n fuelEfficiencyLPer100Km\n fuelLevel\n mileage\n createdAt\n updatedAt\n }\n }\n", d = "\n mutation AssignDriverVehicle($id: ID!, $vehicleId: ID) {\n assignDriverVehicle(id: $id, vehicleId: $vehicleId) {\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 notes\n hireDate\n baseSalary\n bonusYtd\n payCurrency\n onLeaveUntil\n terminatedAt\n terminationReason\n createdAt\n }\n }\n", f = "\n mutation UpdateDriverStatus($id: ID!, $status: DriverStatus!) {\n updateDriverStatus(id: $id, status: $status) {\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 notes\n hireDate\n baseSalary\n bonusYtd\n payCurrency\n onLeaveUntil\n terminatedAt\n terminationReason\n createdAt\n }\n }\n", p = "\n mutation CreateVehicle($input: CreateVehicleInput!) {\n createVehicle(input: $input) {\n id\n vehicleNumber\n type\n make\n model\n licensePlate\n ownershipType\n year\n capacity\n status\n currentLocation\n fuelType\n fuelEfficiencyLPer100Km\n fuelLevel\n mileage\n createdAt\n updatedAt\n }\n }\n", m = "\n mutation CreateDriver($input: CreateDriverInput!) {\n createDriver(input: $input) {\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 notes\n hireDate\n baseSalary\n bonusYtd\n payCurrency\n onLeaveUntil\n terminatedAt\n terminationReason\n createdAt\n }\n }\n", h = "\n mutation UpdateVehicle($id: ID!, $input: UpdateVehicleInput!) {\n updateVehicle(id: $id, input: $input) {\n id\n vehicleNumber\n type\n make\n model\n licensePlate\n ownershipType\n year\n capacity\n status\n currentLocation\n fuelType\n fuelEfficiencyLPer100Km\n fuelLevel\n mileage\n createdAt\n updatedAt\n }\n }\n", g = "\n mutation UpdateDriver($id: ID!, $input: UpdateDriverInput!) {\n updateDriver(id: $id, input: $input) {\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 notes\n hireDate\n baseSalary\n bonusYtd\n payCurrency\n onLeaveUntil\n terminatedAt\n terminationReason\n createdAt\n }\n }\n", _ = "\n query GetDriverStatusCounts {\n onBreak: driversCount(filter: { status: ON_BREAK })\n offDuty: driversCount(filter: { status: OFF_DUTY })\n inactive: driversCount(filter: { status: INACTIVE })\n }\n", v = "\n query GetFleetStats {\n fleetStats {\n totalVehicles\n activeVehicles\n inTransitVehicles\n maintenanceVehicles\n totalDrivers\n availableDrivers\n onDeliveryDrivers\n avgDriverRating\n }\n }\n";
6
6
  function y(e) {
7
7
  switch (e) {
8
8
  case "ACTIVE": return "available";
@@ -24,6 +24,7 @@ function x(e) {
24
24
  case "AVAILABLE": return "available";
25
25
  case "ON_DELIVERY": return "busy";
26
26
  case "ON_BREAK": return "on_break";
27
+ case "INACTIVE": return "inactive";
27
28
  default: return "offline";
28
29
  }
29
30
  }
@@ -32,6 +33,7 @@ function S(e) {
32
33
  case "available": return "AVAILABLE";
33
34
  case "busy": return "ON_DELIVERY";
34
35
  case "on_break": return "ON_BREAK";
36
+ case "inactive": return "INACTIVE";
35
37
  default: return "OFF_DUTY";
36
38
  }
37
39
  }
@@ -61,6 +63,8 @@ function C(e) {
61
63
  lastMaintenance: e.lastServiceDate ? new Date(e.lastServiceDate) : void 0,
62
64
  nextMaintenance: e.nextServiceDueDate ? new Date(e.nextServiceDueDate) : void 0,
63
65
  nextMaintenanceMileage: e.nextServiceDueMileage ?? void 0,
66
+ fuelType: e.fuelType ?? void 0,
67
+ fuelEfficiencyLPer100Km: e.fuelEfficiencyLPer100Km ?? void 0,
64
68
  fuelLevel: e.fuelLevel ?? void 0,
65
69
  mileage: e.mileage ?? void 0,
66
70
  documents: [],
@@ -87,50 +91,16 @@ function w(e) {
87
91
  address: e.currentLocation.address ?? void 0,
88
92
  timestamp: /* @__PURE__ */ new Date()
89
93
  } : void 0,
90
- joinDate: new Date(e.createdAt),
91
- baseSalary: 0,
92
- completedOrders: 0,
93
- todayOrders: 0,
94
- specializations: [],
95
- workingHours: {
96
- startTime: "09:00",
97
- endTime: "18:00",
98
- workingDays: [
99
- "Mon",
100
- "Tue",
101
- "Wed",
102
- "Thu",
103
- "Fri"
104
- ],
105
- maxHoursPerDay: 8,
106
- maxHoursPerWeek: 40,
107
- currentHoursToday: 0,
108
- currentHoursThisWeek: 0
109
- },
110
- ratings: {
111
- overall: e.rating ?? 0,
112
- punctuality: e.rating ?? 0,
113
- communication: e.rating ?? 0,
114
- carefulHandling: e.rating ?? 0,
115
- professionalism: e.rating ?? 0,
116
- onTimeDelivery: e.rating ?? 0,
117
- totalRatings: 0
118
- },
94
+ rating: e.rating ?? 0,
95
+ notes: e.notes ?? void 0,
96
+ hireDate: e.hireDate ? new Date(e.hireDate) : void 0,
97
+ baseSalary: e.baseSalary ?? void 0,
98
+ bonusYtd: e.bonusYtd ?? void 0,
99
+ payCurrency: e.payCurrency ?? void 0,
100
+ onLeaveUntil: e.onLeaveUntil ? new Date(e.onLeaveUntil) : void 0,
101
+ terminatedAt: e.terminatedAt ? new Date(e.terminatedAt) : void 0,
102
+ terminationReason: e.terminationReason ?? void 0,
119
103
  documents: [],
120
- earnings: {
121
- totalEarnings: 0,
122
- weeklyEarnings: 0,
123
- monthlyEarnings: 0,
124
- pendingPayments: 0,
125
- completedDeliveries: 0,
126
- bonuses: 0
127
- },
128
- compliance: {
129
- hoursOfService: !0,
130
- documentation: !0,
131
- vehicleInspection: !0,
132
- lastUpdate: /* @__PURE__ */ new Date()
133
- },
134
104
  createdAt: new Date(e.createdAt)
135
105
  };
136
106
  }
@@ -205,7 +175,12 @@ function E(e = {}) {
205
175
  type: e.type,
206
176
  make: e.make,
207
177
  model: e.model,
208
- licensePlate: e.licensePlate
178
+ licensePlate: e.licensePlate,
179
+ ownershipType: e.ownershipType,
180
+ year: e.year,
181
+ status: e.status,
182
+ fuelType: e.fuelType,
183
+ fuelEfficiencyLPer100Km: e.fuelEfficiencyLPer100Km
209
184
  } })).createVehicle);
210
185
  return _((e) => [n, ...e]), n;
211
186
  }, [d]), j = n(async (e) => {
@@ -215,7 +190,17 @@ function E(e = {}) {
215
190
  lastName: e.lastName,
216
191
  email: e.email,
217
192
  phone: e.phone,
218
- licenseNumber: e.licenseNumber
193
+ licenseNumber: e.licenseNumber,
194
+ licenseClass: e.licenseClass,
195
+ licenseExpiry: e.licenseExpiry,
196
+ status: e.status,
197
+ vehicleId: e.vehicleId,
198
+ rating: e.rating,
199
+ notes: e.notes,
200
+ hireDate: e.hireDate,
201
+ baseSalary: e.baseSalary,
202
+ bonusYtd: e.bonusYtd,
203
+ payCurrency: e.payCurrency
219
204
  } })).createDriver);
220
205
  return y((e) => [n, ...e]), n;
221
206
  }, [d]), M = n(async (e, n) => {
@@ -226,7 +211,12 @@ function E(e = {}) {
226
211
  type: n.type,
227
212
  make: n.make,
228
213
  model: n.model,
229
- licensePlate: n.licensePlate
214
+ licensePlate: n.licensePlate,
215
+ ownershipType: n.ownershipType,
216
+ year: n.year,
217
+ status: n.status,
218
+ fuelType: n.fuelType,
219
+ fuelEfficiencyLPer100Km: n.fuelEfficiencyLPer100Km
230
220
  }
231
221
  })).updateVehicle);
232
222
  return _((t) => t.map((t) => t.id === e ? r : t)), r;
@@ -238,7 +228,20 @@ function E(e = {}) {
238
228
  lastName: n.lastName,
239
229
  email: n.email,
240
230
  phone: n.phone,
241
- licenseNumber: n.licenseNumber
231
+ licenseNumber: n.licenseNumber,
232
+ licenseClass: n.licenseClass,
233
+ licenseExpiry: n.licenseExpiry,
234
+ status: n.status,
235
+ vehicleId: n.vehicleId,
236
+ rating: n.rating,
237
+ notes: n.notes,
238
+ hireDate: n.hireDate,
239
+ baseSalary: n.baseSalary,
240
+ bonusYtd: n.bonusYtd,
241
+ payCurrency: n.payCurrency,
242
+ onLeaveUntil: n.onLeaveUntil,
243
+ terminatedAt: n.terminatedAt,
244
+ terminationReason: n.terminationReason
242
245
  }
243
246
  })).updateDriver);
244
247
  return y((t) => t.map((t) => t.id === e ? r : t)), r;
@@ -258,68 +261,74 @@ function E(e = {}) {
258
261
  };
259
262
  }
260
263
  function D(e = {}) {
261
- let { limit: i = 20, offset: s = 0, search: c, status: l, vehicleType: f, driverId: p } = e, m = T(), [h, g] = a([]), [_, v] = a(0), [y, x] = a(!1), [S, w] = a(!1), [E, D] = a(null), O = n(async () => {
262
- w(!0), D(null);
264
+ let { limit: i = 20, offset: s = 0, search: c, status: l, vehicleType: f, driverId: p, ids: m } = e, h = T(), [g, _] = a([]), [v, y] = a(0), [x, S] = a(!1), [w, E] = a(!1), [D, O] = a(null), k = n(async () => {
265
+ if (m && m.length === 0) {
266
+ _([]), y(0), S(!1);
267
+ return;
268
+ }
269
+ E(!0), O(null);
263
270
  try {
264
- let e = await t(m, o, {
271
+ let e = await t(h, o, {
265
272
  filter: {
266
273
  search: c || void 0,
267
274
  status: l ? b(l) : void 0,
268
275
  type: f?.toUpperCase(),
269
- driverId: p || void 0
276
+ driverId: p || void 0,
277
+ ids: m && m.length > 0 ? [...m] : void 0
270
278
  },
271
279
  pagination: {
272
- limit: i,
273
- offset: s
280
+ limit: m && m.length > 0 ? m.length : i,
281
+ offset: m ? 0 : s
274
282
  }
275
283
  });
276
- x(s + e.vehicles.length < e.vehiclesCount), v(e.vehiclesCount), g(e.vehicles.map(C));
284
+ S(s + e.vehicles.length < e.vehiclesCount), y(e.vehiclesCount), _(e.vehicles.map(C));
277
285
  } catch (e) {
278
- D(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load vehicles"));
286
+ O(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load vehicles"));
279
287
  } finally {
280
- w(!1);
288
+ E(!1);
281
289
  }
282
290
  }, [
283
- m,
291
+ h,
284
292
  i,
285
293
  s,
286
294
  c,
287
295
  l,
288
296
  f,
289
- p
297
+ p,
298
+ m ? [...m].sort().join(",") : ""
290
299
  ]);
291
300
  return r(() => {
292
- O();
293
- }, [O]), {
294
- vehicles: h,
295
- totalVehicles: _,
296
- hasMore: y,
297
- isLoading: S,
298
- error: E,
301
+ k();
302
+ }, [k]), {
303
+ vehicles: g,
304
+ totalVehicles: v,
305
+ hasMore: x,
306
+ isLoading: w,
307
+ error: D,
299
308
  refetch: n(() => {
300
- O();
301
- }, [O]),
309
+ k();
310
+ }, [k]),
302
311
  updateVehicleStatus: n(async (e, n) => {
303
- let r = C((await t(m, u, {
312
+ let r = C((await t(h, u, {
304
313
  id: e,
305
314
  status: b(n)
306
315
  })).updateVehicleStatus);
307
- return g((t) => t.map((t) => t.id === e ? r : t)), r;
308
- }, [m]),
316
+ return _((t) => t.map((t) => t.id === e ? r : t)), r;
317
+ }, [h]),
309
318
  assignDriver: n(async (e, n) => {
310
- await t(m, d, {
319
+ await t(h, d, {
311
320
  id: n,
312
321
  vehicleId: e
313
322
  });
314
- let r = h.find((t) => t.id === e);
323
+ let r = g.find((t) => t.id === e);
315
324
  if (!r) throw Error("Vehicle not found");
316
325
  let i = {
317
326
  ...r,
318
327
  driverId: n,
319
328
  status: "assigned"
320
329
  };
321
- return g((t) => t.map((t) => t.id === e ? i : t)), i;
322
- }, [m, h])
330
+ return _((t) => t.map((t) => t.id === e ? i : t)), i;
331
+ }, [h, g])
323
332
  };
324
333
  }
325
334
  function O(e) {
@@ -557,4 +566,4 @@ function N() {
557
566
  };
558
567
  }
559
568
  //#endregion
560
- export { w as mapDriver, C as mapVehicle, A as useDriver, j as useDriverStatusCounts, k as useDrivers, E as useFleet, N as useFleetStats, O as useVehicle, M as useVehicleDrivers, D as useVehicles };
569
+ export { w as mapDriver, C as mapVehicle, S as toApiDriverStatus, b as toApiVehicleStatus, A as useDriver, j as useDriverStatusCounts, k as useDrivers, E as useFleet, N as useFleetStats, O as useVehicle, M as useVehicleDrivers, D as useVehicles };
@@ -16,7 +16,7 @@ var s = "\n id\n deliveryJobNumber\n customerId\n status\n priority\n pick
16
16
  ${s}
17
17
  }
18
18
  }
19
- `, u = "\n query GetDeliveryJobStatsBundle {\n deliveryJobStats {\n total\n pending\n inTransit\n delivered\n cancelled\n failed\n }\n financeMetrics {\n revenue {\n totalRevenue\n averageOrderValue\n }\n }\n }\n", d = `
19
+ `, u = "\n query GetDeliveryJobStatsBundle {\n deliveryJobStats {\n total\n pending\n confirmed\n assigned\n inTransit\n outForDelivery\n delivered\n cancelled\n failed\n returned\n }\n financeMetrics {\n revenue {\n totalRevenue\n averageOrderValue\n }\n }\n }\n", d = `
20
20
  mutation CreateDeliveryJob($input: CreateDeliveryJobInput!) {
21
21
  createDeliveryJob(input: $input) {
22
22
  ${s}
@@ -44,6 +44,7 @@ function h(e) {
44
44
  case "IN_TRANSIT": return "in_transit";
45
45
  case "OUT_FOR_DELIVERY": return "out_for_delivery";
46
46
  case "DELIVERED": return "delivered";
47
+ case "RETURNED": return "returned";
47
48
  case "CANCELLED": return "cancelled";
48
49
  default: return "failed";
49
50
  }
@@ -66,6 +67,7 @@ function _(e) {
66
67
  case "in_transit": return "IN_TRANSIT";
67
68
  case "out_for_delivery": return "OUT_FOR_DELIVERY";
68
69
  case "delivered": return "DELIVERED";
70
+ case "returned": return "RETURNED";
69
71
  case "cancelled": return "CANCELLED";
70
72
  default: return "FAILED";
71
73
  }
@@ -301,6 +303,7 @@ function C() {
301
303
  in_transit: 0,
302
304
  out_for_delivery: 0,
303
305
  delivered: 0,
306
+ returned: 0,
304
307
  cancelled: 0,
305
308
  failed: 0
306
309
  },
@@ -329,12 +332,13 @@ function C() {
329
332
  total: e.deliveryJobStats.total,
330
333
  byStatus: {
331
334
  pending: e.deliveryJobStats.pending,
332
- confirmed: 0,
333
- assigned: 0,
335
+ confirmed: e.deliveryJobStats.confirmed,
336
+ assigned: e.deliveryJobStats.assigned,
334
337
  picked_up: 0,
335
338
  in_transit: e.deliveryJobStats.inTransit,
336
- out_for_delivery: 0,
339
+ out_for_delivery: e.deliveryJobStats.outForDelivery,
337
340
  delivered: e.deliveryJobStats.delivered,
341
+ returned: e.deliveryJobStats.returned,
338
342
  cancelled: e.deliveryJobStats.cancelled,
339
343
  failed: e.deliveryJobStats.failed
340
344
  },
@@ -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", g = "\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", _ = "\n query GetTrackingAlerts {\n trackingAlerts {\n shipmentId\n shipmentNumber\n alertType\n message\n }\n }\n";
8
- function v(e, t) {
9
- let n = {
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
- return {
16
- id: e.id,
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: n,
20
- locationHistory: [n],
21
- status: e.eventType.toLowerCase(),
24
+ currentLocation: i,
25
+ locationHistory: r,
26
+ status: n.eventType.toLowerCase(),
22
27
  estimatedArrival: void 0,
23
- nextCheckpoint: e.details ?? void 0,
28
+ nextCheckpoint: n.details ?? void 0,
24
29
  alerts: [],
25
- lastUpdated: new Date(e.timestamp)
26
- };
30
+ lastUpdated: new Date(n.timestamp)
31
+ } : null;
27
32
  }
28
- function y() {
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
- function b(e = {}) {
47
- let { entityId: n, entityType: r } = e, i = y(), [a, o] = p([]), [s, c] = p(!1), [l, f] = p(null), h = u(async () => {
48
- c(!0), f(null);
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
- o((await t(i, m, {
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
- f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load tracking data"));
94
+ h(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load tracking data"));
78
95
  } finally {
79
- c(!1);
96
+ l(!1);
80
97
  }
81
98
  }, [
82
99
  n,
83
100
  r,
84
- i
101
+ a
85
102
  ]);
86
103
  return d(() => {
87
- h();
88
- }, [h]), {
89
- tracking: a,
90
- isLoading: s,
91
- error: l,
92
- refetch: () => void h()
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 x(e) {
96
- let n = y(), { order: i } = r(e), [a, o] = p(null), [s, c] = p(!1), [l, f] = p(null), m = u(async () => {
97
- if (!e) {
98
- o(null);
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
- c(!0), f(null);
163
+ D(!0), k(null);
102
164
  try {
103
- let r = (await t(n, h, {
104
- deliveryJobId: e,
165
+ C(x([...(await t(n, _, {
166
+ deliveryJobId: i,
105
167
  pagination: {
106
- limit: 1,
168
+ limit: 50,
107
169
  offset: 0
108
170
  }
109
- })).deliveryJobTracking[0];
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
- f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load order tracking"));
173
+ k(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load order tracking"));
113
174
  } finally {
114
- c(!1);
175
+ D(!1);
115
176
  }
116
- }, [n, e]);
177
+ }, [n, i]);
117
178
  return d(() => {
118
- m();
119
- }, [m]), {
120
- tracking: a,
121
- order: i,
122
- isLoading: s,
123
- error: l,
124
- refetch: () => void m()
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 S(e) {
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 C(e) {
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 w() {
166
- let e = y(), [r, o] = p([]), [s, c] = p(!1), [l, f] = p(null), m = u(async () => {
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, g, { pagination: {
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
- if (!t) return null;
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: r ? v(r, t.id) : null,
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 T() {
200
- let e = y(), [n, r] = p([]), [i, a] = p(!1), [o, s] = p(null), c = u(async () => {
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, _)).trackingAlerts.map((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 E(e, t) {
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 = D(e.latitude, e.longitude, n.currentLocation.latitude, n.currentLocation.longitude);
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 = D(e.latitude, e.longitude, n.currentLocation.latitude, n.currentLocation.longitude);
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 D(e, t, n, r) {
267
- let i = O(n - e), a = O(r - t), o = Math.sin(i / 2) * Math.sin(i / 2) + Math.cos(O(e)) * Math.cos(O(n)) * Math.sin(a / 2) * Math.sin(a / 2);
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 O(e) {
331
+ function P(e) {
271
332
  return Math.PI / 180 * e;
272
333
  }
273
334
  //#endregion
274
- export { C as useDriverTracking, E as useGeofence, w as useLiveTracking, x as useOrderTracking, b as useTracking, T as useTrackingAlerts, S as useVehicleTracking };
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, isFirst, products, productsLoading, onUpdate, onRemove, }: OrderItemRowProps): import("react").JSX.Element;
11
+ export declare function OrderItemRow({ item, index, products, productsLoading, onUpdate, onRemove, }: OrderItemRowProps): import("react").JSX.Element;
13
12
  export {};