@burdenoff/microfe-movethewheels 2026.703.1 → 2026.703.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AIAssistantPage-C3ovZ0Fh.js → AIAssistantPage-C3cPsWt-.js} +1 -1
- package/dist/{AnalyticsPage-O8SpY-V4.js → AnalyticsPage-Dz6g2MvK.js} +6 -6
- package/dist/{CreateOrderPage-CB1_-_mN.js → CreateOrderPage-C5iwnjp4.js} +29 -58
- package/dist/CustomerDetailsPage-B6nwFyLO.js +406 -0
- package/dist/{CustomersPage-DRaLuHMC.js → CustomersPage-BKxMS1AV.js} +5 -5
- package/dist/{DashboardPage-DPjhNfKB.js → DashboardPage-BVjQi0EB.js} +11 -11
- package/dist/DriverDetailsPage-CN3WQ0B9.js +507 -0
- package/dist/{DriversPage-C2Bk0w4Q.js → DriversPage-CH9rjQC-.js} +6 -6
- package/dist/{FinancePage-lmp0Sdsw.js → FinancePage-DEDykSOP.js} +5 -5
- package/dist/{FleetPage-DZn5pIqd.js → FleetPage-DqkFi3s3.js} +5 -5
- package/dist/FormError-BlOjnXOq.js +15 -0
- package/dist/{ImportExportPage-BIUJZc7O.js → ImportExportPage-DKJRCezl.js} +1 -1
- package/dist/{InventoryPage-Cxh1zYJd.js → InventoryPage-e0ze63iX.js} +6 -6
- package/dist/{LiveTrackingPage-BY1yAkIt.js → LiveTrackingPage-DCX-K-LR.js} +5 -5
- package/dist/{MarketplacePage-RMuL17EA.js → MarketplacePage-CIQ97_zp.js} +1 -1
- package/dist/{OrderDetailsPage-C2Mf4KSy.js → OrderDetailsPage-DYiZ-9UK.js} +5 -5
- package/dist/{OrdersListPage-BrPBtnhp.js → OrdersListPage-Cn90P1Xx.js} +4 -4
- package/dist/ProductDetailsPage-C9uOiYLp.js +350 -0
- package/dist/{ProductsPage-I5DilIoY.js → ProductsPage-QJfHHpqB.js} +4 -4
- package/dist/{ReportsPage-BDXNmUng.js → ReportsPage-Zp53q3_8.js} +2 -2
- package/dist/RouteDetailsPage-DUStXSf9.js +531 -0
- package/dist/{RoutesPage-lqX9ylHP.js → RoutesPage-DMfoicM1.js} +3 -3
- package/dist/{SettingsPage-CQVIOaNs.js → SettingsPage-Bn-v0mbQ.js} +1 -1
- package/dist/{TrackingPage-BXrjz7V8.js → TrackingPage-W-jtdM3Y.js} +4 -4
- package/dist/VehicleDetailsPage-Bceo5oz3.js +410 -0
- package/dist/{VehiclesPage-6W39XT5W.js → VehiclesPage-ApKThYeG.js} +5 -5
- package/dist/WarehouseDetailsPage-L_6sWigM.js +493 -0
- package/dist/{WarehousesPage-CHvBqNaQ.js → WarehousesPage-DCbXXXWE.js} +3 -3
- package/dist/index.js +154 -138
- package/dist/trash-2-BKhar6Hs.js +32 -0
- package/dist/{useFleet-DiAC-IiH.js → useFleet-DKqXZ16m.js} +77 -56
- package/dist/{useInventory-DKoks37x.js → useInventory-DkyiVY_A.js} +73 -53
- package/dist/{useTracking-GJify4HN.js → useTracking-B-va1kO3.js} +2 -2
- package/package.json +1 -1
- package/src/movethewheels/MoveTheWheelsRoutes.tsx +4 -0
- package/src/movethewheels/components/FormError.tsx +25 -0
- package/src/movethewheels/hooks/useFleet.ts +107 -0
- package/src/movethewheels/hooks/useInventory.ts +107 -0
- package/src/movethewheels/pages/CustomerDetailsPage.tsx +153 -20
- package/src/movethewheels/pages/CustomersPage.tsx +1 -1
- package/src/movethewheels/pages/DriverDetailsPage.tsx +159 -2
- package/src/movethewheels/pages/DriversPage.tsx +6 -2
- package/src/movethewheels/pages/InventoryPage.tsx +1 -1
- package/src/movethewheels/pages/OrdersListPage.tsx +1 -1
- package/src/movethewheels/pages/ProductDetailsPage.tsx +146 -3
- package/src/movethewheels/pages/ProductsPage.tsx +6 -2
- package/src/movethewheels/pages/RouteDetailsPage.tsx +285 -25
- package/src/movethewheels/pages/VehicleDetailsPage.tsx +158 -2
- package/src/movethewheels/pages/VehiclesPage.tsx +6 -2
- package/src/movethewheels/pages/WarehouseDetailsPage.tsx +224 -2
- package/src/movethewheels/pages/WarehousesPage.tsx +5 -1
- package/dist/CustomerDetailsPage-BaeKEI1D.js +0 -263
- package/dist/DriverDetailsPage-CSSQTOzn.js +0 -328
- package/dist/ProductDetailsPage-CezzzZcj.js +0 -193
- package/dist/RouteDetailsPage-BcomL20M.js +0 -263
- package/dist/VehicleDetailsPage-DZjLcJgr.js +0 -218
- package/dist/WarehouseDetailsPage-C10pgRGW.js +0 -236
- /package/dist/{MetricCard-7aYgzZHK.js → MetricCard-BY0QrMD4.js} +0 -0
- /package/dist/{StatusBadge-NpTeHVlw.js → StatusBadge-BZurYHMy.js} +0 -0
- /package/dist/{formatters-DhKZ-eA1.js → formatters-CF2S2l1m.js} +0 -0
- /package/dist/{trending-up-B7W-GL6P.js → trending-up-Dohgd4t_.js} +0 -0
- /package/dist/{triangle-alert-BonHFFNz.js → triangle-alert-i-XQL9Rd.js} +0 -0
- /package/dist/{truck-DrlfSpRC.js → truck-C0v_hbLR.js} +0 -0
- /package/dist/{useAnalytics-CgdzUfY_.js → useAnalytics-DS8n0xgg.js} +0 -0
- /package/dist/{useCustomers-QrlozybF.js → useCustomers-BmTNGxiI.js} +0 -0
- /package/dist/{useImportExport-BLMnAKCC.js → useImportExport-DHr-SWSw.js} +0 -0
- /package/dist/{useOrders-D3UZVy8Y.js → useOrders-Cfk1GLiq.js} +0 -0
- /package/dist/{useReports-Puq4DCH9.js → useReports-CTqZr-AB.js} +0 -0
- /package/dist/{useRoutes-Do57LvRb.js → useRoutes-BQWO607N.js} +0 -0
- /package/dist/{user-CjSoudeu.js → user-jyFU3lXk.js} +0 -0
- /package/dist/{users-BAM4gHTn.js → users-DZ-ilS6B.js} +0 -0
- /package/dist/{warehouse-C7MSr47B.js → warehouse-6m5kXMLu.js} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { it as e, ot as t } from "./PageLayout-D4LDHJJq.js";
|
|
2
2
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useFleet.ts
|
|
4
|
-
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 year\n capacity\n status\n currentLocation\n fuelLevel\n mileage\n createdAt\n updatedAt\n }\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 employeeId\n licenseNumber\n licenseClass\n licenseExpiry\n status\n currentLocation\n rating\n vehicleId\n createdAt\n }\n }\n", c = "\n query GetVehicle($id: ID!) {\n vehicle(id: $id) {\n id\n vehicleNumber\n type\n make\n model\n year\n capacity\n status\n currentLocation\n fuelLevel\n mileage\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 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 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 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 employeeId\n licenseNumber\n licenseClass\n licenseExpiry\n status\n currentLocation\n rating\n vehicleId\n createdAt\n }\n }\n", p = "\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
|
-
function
|
|
4
|
+
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 year\n capacity\n status\n currentLocation\n fuelLevel\n mileage\n createdAt\n updatedAt\n }\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 employeeId\n licenseNumber\n licenseClass\n licenseExpiry\n status\n currentLocation\n rating\n vehicleId\n createdAt\n }\n }\n", c = "\n query GetVehicle($id: ID!) {\n vehicle(id: $id) {\n id\n vehicleNumber\n type\n make\n model\n year\n capacity\n status\n currentLocation\n fuelLevel\n mileage\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 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 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 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 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 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 employeeId\n licenseNumber\n licenseClass\n licenseExpiry\n status\n currentLocation\n rating\n vehicleId\n createdAt\n }\n }\n", h = "\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
|
+
function g(e) {
|
|
6
6
|
switch (e) {
|
|
7
7
|
case "ACTIVE": return "available";
|
|
8
8
|
case "IN_TRANSIT": return "assigned";
|
|
@@ -10,7 +10,7 @@ function m(e) {
|
|
|
10
10
|
default: return "out_of_service";
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
function
|
|
13
|
+
function _(e) {
|
|
14
14
|
switch (e) {
|
|
15
15
|
case "available": return "ACTIVE";
|
|
16
16
|
case "assigned": return "IN_TRANSIT";
|
|
@@ -18,7 +18,7 @@ function h(e) {
|
|
|
18
18
|
default: return "INACTIVE";
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function v(e) {
|
|
22
22
|
switch (e) {
|
|
23
23
|
case "AVAILABLE": return "available";
|
|
24
24
|
case "ON_DELIVERY": return "busy";
|
|
@@ -26,7 +26,7 @@ function g(e) {
|
|
|
26
26
|
default: return "offline";
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
function
|
|
29
|
+
function y(e) {
|
|
30
30
|
switch (e) {
|
|
31
31
|
case "available": return "AVAILABLE";
|
|
32
32
|
case "busy": return "ON_DELIVERY";
|
|
@@ -34,7 +34,7 @@ function _(e) {
|
|
|
34
34
|
default: return "OFF_DUTY";
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
function
|
|
37
|
+
function b(e) {
|
|
38
38
|
return {
|
|
39
39
|
id: e.id,
|
|
40
40
|
vehicleNumber: e.vehicleNumber,
|
|
@@ -47,7 +47,7 @@ function v(e) {
|
|
|
47
47
|
volume: 0,
|
|
48
48
|
...e.capacity ?? {}
|
|
49
49
|
},
|
|
50
|
-
status:
|
|
50
|
+
status: g(e.status),
|
|
51
51
|
driverId: void 0,
|
|
52
52
|
currentLocation: e.currentLocation ? {
|
|
53
53
|
latitude: Number(e.currentLocation.latitude ?? 0),
|
|
@@ -63,7 +63,7 @@ function v(e) {
|
|
|
63
63
|
createdAt: new Date(e.createdAt)
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
|
-
function
|
|
66
|
+
function x(e) {
|
|
67
67
|
return {
|
|
68
68
|
id: e.id,
|
|
69
69
|
userId: e.userId ?? e.id,
|
|
@@ -74,7 +74,7 @@ function y(e) {
|
|
|
74
74
|
licenseExpiry: e.licenseExpiry ? new Date(e.licenseExpiry) : /* @__PURE__ */ new Date(),
|
|
75
75
|
vehicleIds: e.vehicleId ? [e.vehicleId] : [],
|
|
76
76
|
assignedVehicle: e.vehicleId ?? void 0,
|
|
77
|
-
status:
|
|
77
|
+
status: v(e.status),
|
|
78
78
|
currentLocation: e.currentLocation ? {
|
|
79
79
|
latitude: Number(e.currentLocation.latitude ?? 0),
|
|
80
80
|
longitude: Number(e.currentLocation.longitude ?? 0),
|
|
@@ -128,7 +128,7 @@ function y(e) {
|
|
|
128
128
|
createdAt: new Date(e.createdAt)
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
-
function
|
|
131
|
+
function S() {
|
|
132
132
|
let { apiGatewayUrl: e, authToken: n, workspaceToken: r, workspaceId: a, tenantId: o, currentUser: s } = t();
|
|
133
133
|
return i(() => ({
|
|
134
134
|
apiGatewayUrl: e,
|
|
@@ -146,18 +146,18 @@ function b() {
|
|
|
146
146
|
s?.id
|
|
147
147
|
]);
|
|
148
148
|
}
|
|
149
|
-
function
|
|
149
|
+
function C(t = {}) {
|
|
150
150
|
let { filters: c } = t, l = i(() => c, [
|
|
151
151
|
c?.driverId,
|
|
152
152
|
c?.status,
|
|
153
153
|
c?.vehicleType
|
|
154
|
-
]), u =
|
|
155
|
-
|
|
154
|
+
]), u = S(), [d, f] = a([]), [h, g] = a([]), [v, y] = a(!1), [C, w] = a(null), T = n(async () => {
|
|
155
|
+
y(!0), w(null);
|
|
156
156
|
try {
|
|
157
157
|
let [t, n] = await Promise.all([e(u, o, {
|
|
158
158
|
filter: {
|
|
159
159
|
type: l?.vehicleType?.toUpperCase(),
|
|
160
|
-
status: l?.status ?
|
|
160
|
+
status: l?.status ? _(l.status) : void 0
|
|
161
161
|
},
|
|
162
162
|
pagination: {
|
|
163
163
|
limit: 200,
|
|
@@ -170,37 +170,58 @@ function x(t = {}) {
|
|
|
170
170
|
offset: 0
|
|
171
171
|
}
|
|
172
172
|
})]);
|
|
173
|
-
f(t.vehicles.map(
|
|
173
|
+
f(t.vehicles.map(b)), g(n.drivers.map(x));
|
|
174
174
|
} catch (e) {
|
|
175
|
-
|
|
175
|
+
w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load fleet data"));
|
|
176
176
|
} finally {
|
|
177
|
-
|
|
177
|
+
y(!1);
|
|
178
178
|
}
|
|
179
179
|
}, [l, u]);
|
|
180
180
|
r(() => {
|
|
181
|
-
|
|
182
|
-
}, [
|
|
183
|
-
let
|
|
184
|
-
|
|
185
|
-
}, [
|
|
181
|
+
T();
|
|
182
|
+
}, [T]);
|
|
183
|
+
let E = n(() => {
|
|
184
|
+
T();
|
|
185
|
+
}, [T]), D = n(async (t) => {
|
|
186
|
+
let n = b((await e(u, p, { input: {
|
|
187
|
+
vehicleNumber: t.vehicleNumber,
|
|
188
|
+
type: t.type,
|
|
189
|
+
make: t.make,
|
|
190
|
+
model: t.model,
|
|
191
|
+
licensePlate: t.licensePlate
|
|
192
|
+
} })).createVehicle);
|
|
193
|
+
return f((e) => [n, ...e]), n;
|
|
194
|
+
}, [u]), O = n(async (t) => {
|
|
195
|
+
let n = x((await e(u, m, { input: {
|
|
196
|
+
employeeId: t.employeeId,
|
|
197
|
+
firstName: t.firstName,
|
|
198
|
+
lastName: t.lastName,
|
|
199
|
+
email: t.email,
|
|
200
|
+
phone: t.phone,
|
|
201
|
+
licenseNumber: t.licenseNumber
|
|
202
|
+
} })).createDriver);
|
|
203
|
+
return g((e) => [n, ...e]), n;
|
|
204
|
+
}, [u]);
|
|
186
205
|
return {
|
|
187
206
|
vehicles: d,
|
|
188
|
-
drivers:
|
|
207
|
+
drivers: h,
|
|
189
208
|
totalVehicles: d.length,
|
|
190
|
-
totalDrivers:
|
|
191
|
-
isLoading:
|
|
192
|
-
error:
|
|
193
|
-
refetch:
|
|
209
|
+
totalDrivers: h.length,
|
|
210
|
+
isLoading: v,
|
|
211
|
+
error: C,
|
|
212
|
+
refetch: E,
|
|
213
|
+
createVehicle: D,
|
|
214
|
+
createDriver: O
|
|
194
215
|
};
|
|
195
216
|
}
|
|
196
|
-
function
|
|
197
|
-
let t =
|
|
217
|
+
function w() {
|
|
218
|
+
let t = S(), [i, s] = a([]), [c, l] = a(!1), [f, p] = a(null), m = n(async () => {
|
|
198
219
|
l(!0), p(null);
|
|
199
220
|
try {
|
|
200
221
|
s((await e(t, o, { pagination: {
|
|
201
222
|
limit: 200,
|
|
202
223
|
offset: 0
|
|
203
|
-
} })).vehicles.map(
|
|
224
|
+
} })).vehicles.map(b));
|
|
204
225
|
} catch (e) {
|
|
205
226
|
p(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load vehicles"));
|
|
206
227
|
} finally {
|
|
@@ -210,15 +231,15 @@ function S() {
|
|
|
210
231
|
r(() => {
|
|
211
232
|
m();
|
|
212
233
|
}, [m]);
|
|
213
|
-
let
|
|
234
|
+
let h = n(() => {
|
|
214
235
|
m();
|
|
215
|
-
}, [m]),
|
|
216
|
-
let i =
|
|
236
|
+
}, [m]), g = n(async (n, r) => {
|
|
237
|
+
let i = b((await e(t, u, {
|
|
217
238
|
id: n,
|
|
218
|
-
status:
|
|
239
|
+
status: _(r)
|
|
219
240
|
})).updateVehicleStatus);
|
|
220
241
|
return s((e) => e.map((e) => e.id === n ? i : e)), i;
|
|
221
|
-
}, [t]),
|
|
242
|
+
}, [t]), v = n(async (n, r) => {
|
|
222
243
|
await e(t, d, {
|
|
223
244
|
id: r,
|
|
224
245
|
vehicleId: n
|
|
@@ -237,13 +258,13 @@ function S() {
|
|
|
237
258
|
totalVehicles: i.length,
|
|
238
259
|
isLoading: c,
|
|
239
260
|
error: f,
|
|
240
|
-
refetch:
|
|
241
|
-
updateVehicleStatus:
|
|
242
|
-
assignDriver:
|
|
261
|
+
refetch: h,
|
|
262
|
+
updateVehicleStatus: g,
|
|
263
|
+
assignDriver: v
|
|
243
264
|
};
|
|
244
265
|
}
|
|
245
|
-
function
|
|
246
|
-
let i =
|
|
266
|
+
function T(t) {
|
|
267
|
+
let i = S(), [o, s] = a(null), [l, u] = a(!1), [d, f] = a(null), p = n(async () => {
|
|
247
268
|
if (!t) {
|
|
248
269
|
s(null);
|
|
249
270
|
return;
|
|
@@ -251,7 +272,7 @@ function C(t) {
|
|
|
251
272
|
u(!0), f(null);
|
|
252
273
|
try {
|
|
253
274
|
let n = await e(i, c, { id: t });
|
|
254
|
-
s(n.vehicle ?
|
|
275
|
+
s(n.vehicle ? b(n.vehicle) : null);
|
|
255
276
|
} catch (e) {
|
|
256
277
|
f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load vehicle"));
|
|
257
278
|
} finally {
|
|
@@ -269,14 +290,14 @@ function C(t) {
|
|
|
269
290
|
}, [p])
|
|
270
291
|
};
|
|
271
292
|
}
|
|
272
|
-
function
|
|
273
|
-
let t =
|
|
293
|
+
function E() {
|
|
294
|
+
let t = S(), [i, o] = a([]), [c, l] = a(!1), [u, p] = a(null), m = n(async () => {
|
|
274
295
|
l(!0), p(null);
|
|
275
296
|
try {
|
|
276
297
|
o((await e(t, s, { pagination: {
|
|
277
298
|
limit: 200,
|
|
278
299
|
offset: 0
|
|
279
|
-
} })).drivers.map(
|
|
300
|
+
} })).drivers.map(x));
|
|
280
301
|
} catch (e) {
|
|
281
302
|
p(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load drivers"));
|
|
282
303
|
} finally {
|
|
@@ -289,13 +310,13 @@ function w() {
|
|
|
289
310
|
let h = n(() => {
|
|
290
311
|
m();
|
|
291
312
|
}, [m]), g = n(async (n, r) => {
|
|
292
|
-
let i =
|
|
313
|
+
let i = x((await e(t, f, {
|
|
293
314
|
id: n,
|
|
294
|
-
status:
|
|
315
|
+
status: y(r)
|
|
295
316
|
})).updateDriverStatus);
|
|
296
317
|
return o((e) => e.map((e) => e.id === n ? i : e)), i;
|
|
297
|
-
}, [t]),
|
|
298
|
-
let i =
|
|
318
|
+
}, [t]), _ = n(async (n, r) => {
|
|
319
|
+
let i = x((await e(t, d, {
|
|
299
320
|
id: n,
|
|
300
321
|
vehicleId: r
|
|
301
322
|
})).assignDriverVehicle);
|
|
@@ -308,11 +329,11 @@ function w() {
|
|
|
308
329
|
error: u,
|
|
309
330
|
refetch: h,
|
|
310
331
|
updateDriverStatus: g,
|
|
311
|
-
assignVehicle:
|
|
332
|
+
assignVehicle: _
|
|
312
333
|
};
|
|
313
334
|
}
|
|
314
|
-
function
|
|
315
|
-
let i =
|
|
335
|
+
function D(t) {
|
|
336
|
+
let i = S(), [o, s] = a(null), [c, u] = a(!1), [d, f] = a(null), p = n(async () => {
|
|
316
337
|
if (!t) {
|
|
317
338
|
s(null);
|
|
318
339
|
return;
|
|
@@ -320,7 +341,7 @@ function T(t) {
|
|
|
320
341
|
u(!0), f(null);
|
|
321
342
|
try {
|
|
322
343
|
let n = await e(i, l, { id: t });
|
|
323
|
-
s(n.driver ?
|
|
344
|
+
s(n.driver ? x(n.driver) : null);
|
|
324
345
|
} catch (e) {
|
|
325
346
|
f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load driver"));
|
|
326
347
|
} finally {
|
|
@@ -338,8 +359,8 @@ function T(t) {
|
|
|
338
359
|
}, [p])
|
|
339
360
|
};
|
|
340
361
|
}
|
|
341
|
-
function
|
|
342
|
-
let t =
|
|
362
|
+
function O() {
|
|
363
|
+
let t = S(), [i, o] = a({
|
|
343
364
|
totalVehicles: 0,
|
|
344
365
|
totalDrivers: 0,
|
|
345
366
|
vehiclesByStatus: {
|
|
@@ -360,7 +381,7 @@ function E() {
|
|
|
360
381
|
}), [s, c] = a(!1), [l, u] = a(null), d = n(async () => {
|
|
361
382
|
c(!0), u(null);
|
|
362
383
|
try {
|
|
363
|
-
let n = await e(t,
|
|
384
|
+
let n = await e(t, h);
|
|
364
385
|
o({
|
|
365
386
|
totalVehicles: n.fleetStats.totalVehicles,
|
|
366
387
|
totalDrivers: n.fleetStats.totalDrivers,
|
|
@@ -398,4 +419,4 @@ function E() {
|
|
|
398
419
|
};
|
|
399
420
|
}
|
|
400
421
|
//#endregion
|
|
401
|
-
export {
|
|
422
|
+
export { T as a, O as i, E as n, w as o, C as r, D as t };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { it as e, ot as t } from "./PageLayout-D4LDHJJq.js";
|
|
2
2
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useInventory.ts
|
|
4
|
-
var o = "\n query ListInventoryItems($filter: InventoryFilterInput, $pagination: PaginationInput) {\n inventoryItems(filter: $filter, pagination: $pagination) {\n id\n productId\n warehouseId\n onHand\n available\n allocated\n damaged\n reorderPoint\n createdAt\n updatedAt\n }\n }\n", s = "\n query ListProducts($filter: ProductFilterInput, $pagination: PaginationInput) {\n products(filter: $filter, pagination: $pagination) {\n id\n sku\n name\n description\n category\n brand\n dimensions\n weight\n value\n hazardous\n fragile\n temperatureControlled\n createdAt\n updatedAt\n }\n }\n", c = "\n query ListWarehouses($filter: WarehouseFilterInput, $pagination: PaginationInput) {\n warehouses(filter: $filter, pagination: $pagination) {\n id\n name\n code\n type\n address\n totalCapacity\n usedCapacity\n createdAt\n }\n }\n", l = "\n query GetProduct($id: ID!) {\n product(id: $id) {\n id\n sku\n name\n description\n category\n brand\n dimensions\n weight\n value\n hazardous\n fragile\n temperatureControlled\n createdAt\n updatedAt\n }\n }\n", u = "\n query GetWarehouse($id: ID!) {\n warehouse(id: $id) {\n id\n name\n code\n type\n address\n totalCapacity\n usedCapacity\n createdAt\n }\n }\n", d = "\n query GetInventoryStats {\n inventoryStats {\n totalOnHand\n totalAvailable\n totalAllocated\n totalDamaged\n lowStockCount\n }\n }\n", f = "\n mutation AdjustInventoryStock($input: AdjustInventoryStockInput!) {\n adjustInventoryStock(input: $input) {\n id\n productId\n warehouseId\n onHand\n available\n allocated\n damaged\n reorderPoint\n createdAt\n updatedAt\n }\n }\n";
|
|
5
|
-
function
|
|
4
|
+
var o = "\n query ListInventoryItems($filter: InventoryFilterInput, $pagination: PaginationInput) {\n inventoryItems(filter: $filter, pagination: $pagination) {\n id\n productId\n warehouseId\n onHand\n available\n allocated\n damaged\n reorderPoint\n createdAt\n updatedAt\n }\n }\n", s = "\n query ListProducts($filter: ProductFilterInput, $pagination: PaginationInput) {\n products(filter: $filter, pagination: $pagination) {\n id\n sku\n name\n description\n category\n brand\n dimensions\n weight\n value\n hazardous\n fragile\n temperatureControlled\n createdAt\n updatedAt\n }\n }\n", c = "\n query ListWarehouses($filter: WarehouseFilterInput, $pagination: PaginationInput) {\n warehouses(filter: $filter, pagination: $pagination) {\n id\n name\n code\n type\n address\n totalCapacity\n usedCapacity\n createdAt\n }\n }\n", l = "\n query GetProduct($id: ID!) {\n product(id: $id) {\n id\n sku\n name\n description\n category\n brand\n dimensions\n weight\n value\n hazardous\n fragile\n temperatureControlled\n createdAt\n updatedAt\n }\n }\n", u = "\n query GetWarehouse($id: ID!) {\n warehouse(id: $id) {\n id\n name\n code\n type\n address\n totalCapacity\n usedCapacity\n createdAt\n }\n }\n", d = "\n query GetInventoryStats {\n inventoryStats {\n totalOnHand\n totalAvailable\n totalAllocated\n totalDamaged\n lowStockCount\n }\n }\n", f = "\n mutation CreateProduct($input: CreateProductInput!) {\n createProduct(input: $input) {\n id\n sku\n name\n description\n category\n brand\n dimensions\n weight\n value\n hazardous\n fragile\n temperatureControlled\n createdAt\n updatedAt\n }\n }\n", p = "\n mutation CreateWarehouse($input: CreateWarehouseInput!) {\n createWarehouse(input: $input) {\n id\n name\n code\n type\n address\n totalCapacity\n usedCapacity\n createdAt\n }\n }\n", m = "\n mutation AdjustInventoryStock($input: AdjustInventoryStockInput!) {\n adjustInventoryStock(input: $input) {\n id\n productId\n warehouseId\n onHand\n available\n allocated\n damaged\n reorderPoint\n createdAt\n updatedAt\n }\n }\n";
|
|
5
|
+
function h(e) {
|
|
6
6
|
return {
|
|
7
7
|
id: e.id,
|
|
8
8
|
sku: e.sku,
|
|
@@ -29,7 +29,7 @@ function p(e) {
|
|
|
29
29
|
updatedAt: new Date(e.updatedAt)
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
function
|
|
32
|
+
function g(e) {
|
|
33
33
|
let t = e.totalCapacity ?? 0, n = e.usedCapacity ?? 0;
|
|
34
34
|
return {
|
|
35
35
|
id: e.id,
|
|
@@ -69,7 +69,7 @@ function m(e) {
|
|
|
69
69
|
createdAt: new Date(e.createdAt)
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
-
function
|
|
72
|
+
function _(e) {
|
|
73
73
|
return {
|
|
74
74
|
id: e.id,
|
|
75
75
|
productId: e.productId,
|
|
@@ -92,7 +92,7 @@ function h(e) {
|
|
|
92
92
|
updatedAt: new Date(e.updatedAt)
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
|
-
function
|
|
95
|
+
function v() {
|
|
96
96
|
let { apiGatewayUrl: e, authToken: n, workspaceToken: r, workspaceId: a, tenantId: o, currentUser: s } = t();
|
|
97
97
|
return i(() => ({
|
|
98
98
|
apiGatewayUrl: e,
|
|
@@ -110,13 +110,13 @@ function g() {
|
|
|
110
110
|
s?.id
|
|
111
111
|
]);
|
|
112
112
|
}
|
|
113
|
-
function
|
|
113
|
+
function y(t = {}) {
|
|
114
114
|
let { filters: l } = t, u = i(() => l, [
|
|
115
115
|
l?.lowStock,
|
|
116
116
|
l?.productId,
|
|
117
117
|
l?.warehouseId
|
|
118
|
-
]), d =
|
|
119
|
-
|
|
118
|
+
]), d = v(), [y, b] = a([]), [x, S] = a([]), [C, w] = a([]), [T, E] = a(!1), [D, O] = a(null), k = n(async () => {
|
|
119
|
+
E(!0), O(null);
|
|
120
120
|
try {
|
|
121
121
|
let [t, n, r] = await Promise.all([
|
|
122
122
|
e(d, o, {
|
|
@@ -137,57 +137,77 @@ function _(t = {}) {
|
|
|
137
137
|
limit: 500,
|
|
138
138
|
offset: 0
|
|
139
139
|
} })
|
|
140
|
-
]), i = t.inventoryItems.map(
|
|
141
|
-
u?.lowStock && (i = i.filter((e) => e.availableQuantity <= e.reorderLevel)),
|
|
140
|
+
]), i = t.inventoryItems.map(_);
|
|
141
|
+
u?.lowStock && (i = i.filter((e) => e.availableQuantity <= e.reorderLevel)), b(i), S(n.products.map(h)), w(r.warehouses.map(g));
|
|
142
142
|
} catch (e) {
|
|
143
|
-
|
|
143
|
+
O(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load inventory data"));
|
|
144
144
|
} finally {
|
|
145
|
-
|
|
145
|
+
E(!1);
|
|
146
146
|
}
|
|
147
147
|
}, [u, d]);
|
|
148
148
|
r(() => {
|
|
149
|
-
|
|
150
|
-
}, [
|
|
151
|
-
let
|
|
152
|
-
|
|
153
|
-
}, [
|
|
154
|
-
let i =
|
|
149
|
+
k();
|
|
150
|
+
}, [k]);
|
|
151
|
+
let A = n(() => {
|
|
152
|
+
k();
|
|
153
|
+
}, [k]), j = n(async (t, n, r) => {
|
|
154
|
+
let i = y.find((e) => e.id === t);
|
|
155
155
|
if (!i) throw Error("Inventory item not found");
|
|
156
|
-
let a =
|
|
156
|
+
let a = _((await e(d, m, { input: {
|
|
157
157
|
id: t,
|
|
158
158
|
onHand: i.quantity + n,
|
|
159
159
|
available: i.availableQuantity + n,
|
|
160
160
|
allocated: i.reservedQuantity,
|
|
161
161
|
damaged: 0
|
|
162
162
|
} })).adjustInventoryStock);
|
|
163
|
-
return
|
|
164
|
-
}, [d,
|
|
165
|
-
let i =
|
|
163
|
+
return b((e) => e.map((e) => e.id === t ? a : e)), a;
|
|
164
|
+
}, [d, y]), M = n(async (e, t, n, r) => {
|
|
165
|
+
let i = y.find((t) => t.warehouseId === e && t.productId === n);
|
|
166
166
|
if (!i) throw Error("Source inventory not found");
|
|
167
|
-
await
|
|
168
|
-
let a =
|
|
169
|
-
a && await
|
|
170
|
-
}, [
|
|
167
|
+
await j(i.id, -Math.abs(r), "transfer out");
|
|
168
|
+
let a = y.find((e) => e.warehouseId === t && e.productId === n);
|
|
169
|
+
a && await j(a.id, Math.abs(r), "transfer in");
|
|
170
|
+
}, [y, j]), N = n(async (t) => {
|
|
171
|
+
let n = h((await e(d, f, { input: {
|
|
172
|
+
name: t.name,
|
|
173
|
+
sku: t.sku,
|
|
174
|
+
category: t.category,
|
|
175
|
+
brand: t.brand,
|
|
176
|
+
weight: t.weight
|
|
177
|
+
} })).createProduct);
|
|
178
|
+
return S((e) => [n, ...e]), n;
|
|
179
|
+
}, [d]), P = n(async (t) => {
|
|
180
|
+
let n = g((await e(d, p, { input: {
|
|
181
|
+
code: t.code,
|
|
182
|
+
name: t.name,
|
|
183
|
+
type: t.type,
|
|
184
|
+
address: t.address,
|
|
185
|
+
totalCapacity: t.totalCapacity
|
|
186
|
+
} })).createWarehouse);
|
|
187
|
+
return w((e) => [n, ...e]), n;
|
|
188
|
+
}, [d]);
|
|
171
189
|
return {
|
|
172
|
-
inventory:
|
|
173
|
-
products:
|
|
174
|
-
warehouses:
|
|
175
|
-
totalItems:
|
|
176
|
-
isLoading:
|
|
177
|
-
error:
|
|
178
|
-
refetch:
|
|
179
|
-
updateStock:
|
|
180
|
-
transferStock:
|
|
190
|
+
inventory: y,
|
|
191
|
+
products: x,
|
|
192
|
+
warehouses: C,
|
|
193
|
+
totalItems: y.length,
|
|
194
|
+
isLoading: T,
|
|
195
|
+
error: D,
|
|
196
|
+
refetch: A,
|
|
197
|
+
updateStock: j,
|
|
198
|
+
transferStock: M,
|
|
199
|
+
createProduct: N,
|
|
200
|
+
createWarehouse: P
|
|
181
201
|
};
|
|
182
202
|
}
|
|
183
|
-
function
|
|
184
|
-
let t =
|
|
203
|
+
function b() {
|
|
204
|
+
let t = v(), [i, o] = a([]), [c, l] = a(!1), [u, d] = a(null), f = n(async () => {
|
|
185
205
|
l(!0), d(null);
|
|
186
206
|
try {
|
|
187
207
|
o((await e(t, s, { pagination: {
|
|
188
208
|
limit: 500,
|
|
189
209
|
offset: 0
|
|
190
|
-
} })).products.map(
|
|
210
|
+
} })).products.map(h));
|
|
191
211
|
} catch (e) {
|
|
192
212
|
d(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load products"));
|
|
193
213
|
} finally {
|
|
@@ -204,8 +224,8 @@ function v() {
|
|
|
204
224
|
refetch: () => void f()
|
|
205
225
|
};
|
|
206
226
|
}
|
|
207
|
-
function
|
|
208
|
-
let i =
|
|
227
|
+
function x(t) {
|
|
228
|
+
let i = v(), [o, s] = a(null), [c, u] = a(!1), [d, f] = a(null), p = n(async () => {
|
|
209
229
|
if (!t) {
|
|
210
230
|
s(null);
|
|
211
231
|
return;
|
|
@@ -213,7 +233,7 @@ function y(t) {
|
|
|
213
233
|
u(!0), f(null);
|
|
214
234
|
try {
|
|
215
235
|
let n = await e(i, l, { id: t });
|
|
216
|
-
s(n.product ?
|
|
236
|
+
s(n.product ? h(n.product) : null);
|
|
217
237
|
} catch (e) {
|
|
218
238
|
f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load product"));
|
|
219
239
|
} finally {
|
|
@@ -221,22 +241,22 @@ function y(t) {
|
|
|
221
241
|
}
|
|
222
242
|
}, [i, t]);
|
|
223
243
|
return r(() => {
|
|
224
|
-
|
|
225
|
-
}, [
|
|
244
|
+
p();
|
|
245
|
+
}, [p]), {
|
|
226
246
|
product: o,
|
|
227
247
|
isLoading: c,
|
|
228
248
|
error: d,
|
|
229
|
-
refetch: () => void
|
|
249
|
+
refetch: () => void p()
|
|
230
250
|
};
|
|
231
251
|
}
|
|
232
|
-
function
|
|
233
|
-
let t =
|
|
252
|
+
function S() {
|
|
253
|
+
let t = v(), [i, o] = a([]), [s, l] = a(!1), [u, d] = a(null), f = n(async () => {
|
|
234
254
|
l(!0), d(null);
|
|
235
255
|
try {
|
|
236
256
|
o((await e(t, c, { pagination: {
|
|
237
257
|
limit: 500,
|
|
238
258
|
offset: 0
|
|
239
|
-
} })).warehouses.map(
|
|
259
|
+
} })).warehouses.map(g));
|
|
240
260
|
} catch (e) {
|
|
241
261
|
d(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load warehouses"));
|
|
242
262
|
} finally {
|
|
@@ -253,8 +273,8 @@ function b() {
|
|
|
253
273
|
refetch: () => void f()
|
|
254
274
|
};
|
|
255
275
|
}
|
|
256
|
-
function
|
|
257
|
-
let i =
|
|
276
|
+
function C(t) {
|
|
277
|
+
let i = v(), [o, s] = a(null), [c, l] = a(!1), [d, f] = a(null), p = n(async () => {
|
|
258
278
|
if (!t) {
|
|
259
279
|
s(null);
|
|
260
280
|
return;
|
|
@@ -262,7 +282,7 @@ function x(t) {
|
|
|
262
282
|
l(!0), f(null);
|
|
263
283
|
try {
|
|
264
284
|
let n = await e(i, u, { id: t });
|
|
265
|
-
s(n.warehouse ?
|
|
285
|
+
s(n.warehouse ? g(n.warehouse) : null);
|
|
266
286
|
} catch (e) {
|
|
267
287
|
f(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to load warehouse"));
|
|
268
288
|
} finally {
|
|
@@ -278,8 +298,8 @@ function x(t) {
|
|
|
278
298
|
refetch: () => void p()
|
|
279
299
|
};
|
|
280
300
|
}
|
|
281
|
-
function
|
|
282
|
-
let t =
|
|
301
|
+
function w() {
|
|
302
|
+
let t = v(), [n, i] = a({
|
|
283
303
|
totalItems: 0,
|
|
284
304
|
lowStockItems: 0,
|
|
285
305
|
totalValue: 0,
|
|
@@ -320,4 +340,4 @@ function S() {
|
|
|
320
340
|
};
|
|
321
341
|
}
|
|
322
342
|
//#endregion
|
|
323
|
-
export {
|
|
343
|
+
export { C as a, b as i, w as n, S as o, x as r, y as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { it as e, ot as t } from "./PageLayout-D4LDHJJq.js";
|
|
2
|
-
import { r as n, t as r } from "./useOrders-
|
|
3
|
-
import { a as i, n as a, o, t as s } from "./useFleet-
|
|
2
|
+
import { r as n, t as r } from "./useOrders-Cfk1GLiq.js";
|
|
3
|
+
import { a as i, n as a, o, t as s } from "./useFleet-DKqXZ16m.js";
|
|
4
4
|
import { useCallback as c, useEffect as l, useMemo as u, useState as d } from "react";
|
|
5
5
|
//#region src/movethewheels/hooks/useTracking.ts
|
|
6
6
|
var f = "\n query ListShipments($filter: ShipmentFilterInput, $pagination: PaginationInput) {\n shipments(filter: $filter, pagination: $pagination) {\n id\n shipmentNumber\n orderId\n status\n estimatedDelivery\n }\n }\n", p = "\n query GetShipment($id: ID!) {\n shipment(id: $id) {\n id\n shipmentNumber\n orderId\n status\n estimatedDelivery\n trackingEvents {\n id\n shipmentId\n eventType\n location\n details\n timestamp\n }\n }\n }\n", m = "\n query GetOrderTracking($orderId: ID!) {\n orderTracking(orderId: $orderId) {\n id\n shipmentId\n eventType\n location\n details\n timestamp\n }\n }\n", h = "\n query GetActiveDeliveries {\n activeDeliveries {\n id\n shipmentNumber\n orderId\n status\n estimatedDelivery\n }\n }\n", g = "\n query GetTrackingAlerts {\n trackingAlerts {\n shipmentId\n shipmentNumber\n alertType\n message\n }\n }\n";
|
package/package.json
CHANGED
|
@@ -93,15 +93,19 @@ export function MoveTheWheelsRoutes() {
|
|
|
93
93
|
{/* Fleet */}
|
|
94
94
|
<Route path="fleet" element={<FleetPage />} />
|
|
95
95
|
<Route path="fleet/vehicles" element={<VehiclesPage />} />
|
|
96
|
+
<Route path="fleet/vehicles/new" element={<VehicleDetailsPage />} />
|
|
96
97
|
<Route path="fleet/vehicles/:vehicleId" element={<VehicleDetailsPage />} />
|
|
97
98
|
<Route path="fleet/drivers" element={<DriversPage />} />
|
|
99
|
+
<Route path="fleet/drivers/new" element={<DriverDetailsPage />} />
|
|
98
100
|
<Route path="fleet/drivers/:driverId" element={<DriverDetailsPage />} />
|
|
99
101
|
|
|
100
102
|
{/* Inventory */}
|
|
101
103
|
<Route path="inventory" element={<InventoryPage />} />
|
|
102
104
|
<Route path="inventory/products" element={<ProductsPage />} />
|
|
105
|
+
<Route path="inventory/products/new" element={<ProductDetailsPage />} />
|
|
103
106
|
<Route path="inventory/products/:productId" element={<ProductDetailsPage />} />
|
|
104
107
|
<Route path="inventory/warehouses" element={<WarehousesPage />} />
|
|
108
|
+
<Route path="inventory/warehouses/new" element={<WarehouseDetailsPage />} />
|
|
105
109
|
<Route path="inventory/warehouses/:warehouseId" element={<WarehouseDetailsPage />} />
|
|
106
110
|
|
|
107
111
|
{/* Customers */}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FormError — inline error banner for create/edit forms.
|
|
3
|
+
*
|
|
4
|
+
* Renders nothing when there is no message, so it can be dropped into a form
|
|
5
|
+
* unconditionally. Uses semantic status tokens so it themes correctly.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { AlertCircle } from 'lucide-react';
|
|
9
|
+
|
|
10
|
+
interface FormErrorProps {
|
|
11
|
+
message?: string | null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function FormError({ message }: FormErrorProps) {
|
|
15
|
+
if (!message) return null;
|
|
16
|
+
return (
|
|
17
|
+
<div
|
|
18
|
+
role="alert"
|
|
19
|
+
className="flex items-start gap-2 rounded-lg border border-status-error-border bg-status-error-bg-subtle px-4 py-3 text-sm text-status-error-text"
|
|
20
|
+
>
|
|
21
|
+
<AlertCircle size={18} className="mt-0.5 shrink-0" />
|
|
22
|
+
<span>{message}</span>
|
|
23
|
+
</div>
|
|
24
|
+
);
|
|
25
|
+
}
|