@burdenoff/microfe-movethewheels 2026.1016.3 → 2026.1016.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/MoveTheWheelsRoot.js +5 -0
- package/dist/MoveTheWheelsRoutes.js +25 -21
- package/dist/components/ContainerEvidencePicker.js +55 -55
- package/dist/components/FleetAlertsPanel.js +2 -2
- package/dist/components/freight-invoice/InvoiceForm.js +366 -0
- package/dist/components/freight-invoice/InvoiceResults.js +240 -0
- package/dist/generated/consolidation-operations.d.ts +195 -265
- package/dist/generated/container-condition-operations.d.ts +124 -187
- package/dist/generated/container-operations.d.ts +59 -85
- package/dist/generated/empty-reuse-operations.d.ts +165 -271
- package/dist/generated/free-time-operations.d.ts +120 -184
- package/dist/generated/freight-cost-operations.d.ts +307 -476
- package/dist/generated/freight-invoice-operations.d.ts +1447 -0
- package/dist/generated/logistics-procedure-operations.d.ts +100 -156
- package/dist/generated/pending-pick-operations.d.ts +769 -1025
- package/dist/generated/shipment-status-authority-operations.d.ts +82 -103
- package/dist/generated/stock-binding-operations.d.ts +188 -260
- package/dist/generated/stock-observation-operations.d.ts +103 -138
- package/dist/generated/tracking-quality-operations.d.ts +27 -41
- package/dist/generated/trip-utilization-operations.d.ts +137 -185
- package/dist/generated/wspace-operations.d.ts +628 -2272
- package/dist/generated/wspace-types.d.ts +4 -23
- package/dist/hooks/useInvoiceComparisonRecovery.js +118 -0
- package/dist/movethewheels/components/ContainerEvidencePicker.d.ts +2 -1
- package/dist/movethewheels/components/freight-invoice/InvoiceForm.d.ts +19 -0
- package/dist/movethewheels/components/freight-invoice/InvoiceResults.d.ts +9 -0
- package/dist/movethewheels/hooks/useFleet.d.ts +1 -1
- package/dist/movethewheels/hooks/useFleetIntelligence.d.ts +1 -1
- package/dist/movethewheels/hooks/useInvoiceComparisonRecovery.d.ts +22 -0
- package/dist/movethewheels/hooks/useProcedureSelection.d.ts +1 -3
- package/dist/movethewheels/pages/FreightInvoicePage.d.ts +10 -0
- package/dist/movethewheels/utils/driverLicenseExpiry.d.ts +6 -0
- package/dist/movethewheels/utils/invoiceComparison.d.ts +32 -0
- package/dist/pages/DriverDetailsPage.js +306 -282
- package/dist/pages/FreightEstimatePage.js +1 -0
- package/dist/pages/FreightInvoicePage.js +346 -0
- package/dist/src/generated/consolidation-operations.js +3961 -503
- package/dist/src/generated/container-condition-operations.js +2968 -206
- package/dist/src/generated/container-operations.js +997 -99
- package/dist/src/generated/empty-reuse-operations.js +4811 -747
- package/dist/src/generated/free-time-operations.js +2824 -233
- package/dist/src/generated/freight-cost-operations.js +4852 -812
- package/dist/src/generated/freight-invoice-operations.js +4894 -0
- package/dist/src/generated/logistics-procedure-operations.js +2707 -360
- package/dist/src/generated/pending-pick-operations.js +8244 -1196
- package/dist/src/generated/shipment-status-authority-operations.js +1157 -84
- package/dist/src/generated/stock-binding-operations.js +2779 -173
- package/dist/src/generated/stock-observation-operations.js +1274 -91
- package/dist/src/generated/tracking-quality-operations.js +407 -42
- package/dist/src/generated/trip-utilization-operations.js +1765 -138
- package/dist/src/generated/wspace-operations.js +428 -706
- package/dist/utils/driverLicenseExpiry.js +14 -0
- package/dist/utils/invoiceComparison.js +272 -0
- package/package.json +29 -29
- package/src/generated/consolidation-operations.ts +60 -559
- package/src/generated/container-condition-operations.ts +63 -265
- package/src/generated/container-operations.ts +37 -132
- package/src/generated/empty-reuse-operations.ts +83 -824
- package/src/generated/free-time-operations.ts +55 -284
- package/src/generated/freight-cost-operations.ts +42 -848
- package/src/generated/freight-invoice-operations.ts +830 -0
- package/src/generated/logistics-procedure-operations.ts +60 -414
- package/src/generated/pending-pick-operations.ts +48 -1239
- package/src/generated/shipment-status-authority-operations.ts +33 -113
- package/src/generated/stock-binding-operations.ts +29 -198
- package/src/generated/stock-observation-operations.ts +24 -111
- package/src/generated/tracking-quality-operations.ts +19 -57
- package/src/generated/trip-utilization-operations.ts +32 -166
- package/src/generated/wspace-operations.ts +284 -2906
- package/src/generated/wspace-types.ts +2 -8
- package/src/movethewheels/MoveTheWheelsRoot.tsx +6 -0
- package/src/movethewheels/MoveTheWheelsRoutes.tsx +2 -0
- package/src/movethewheels/components/ContainerEvidencePicker.tsx +12 -4
- package/src/movethewheels/components/FleetAlertsPanel.tsx +4 -2
- package/src/movethewheels/components/freight-invoice/InvoiceForm.tsx +412 -0
- package/src/movethewheels/components/freight-invoice/InvoiceResults.tsx +162 -0
- package/src/movethewheels/hooks/useFleet.ts +1 -1
- package/src/movethewheels/hooks/useFleetIntelligence.ts +5 -1
- package/src/movethewheels/hooks/useInvoiceComparisonRecovery.ts +227 -0
- package/src/movethewheels/pages/DriverDetailsPage.tsx +35 -9
- package/src/movethewheels/pages/FreightEstimatePage.tsx +1 -0
- package/src/movethewheels/pages/FreightInvoicePage.tsx +477 -0
- package/src/movethewheels/utils/driverLicenseExpiry.ts +25 -0
- package/src/movethewheels/utils/invoiceComparison.ts +520 -0
- package/src/operations/freight-invoice/comparison.graphql +40 -0
- package/src/operations/wspace/freight-invoice-evidence.graphql +6 -0
- package/patches/braces@3.0.3.patch +0 -87
package/README.md
CHANGED
|
@@ -87,3 +87,13 @@ Proprietary - Copyright Burdenoff Consultancy Services Pvt. Ltd.
|
|
|
87
87
|
The existing pending-plan receipt can open an independent review panel. It reuses canonical workspace permissions and the shared Files exact-version picker, typed owning candidate operations, bounded history, explicit handling/SOP references, action/quantity/exclusive validity and approve/reject/revoke decisions. Before dispatch, the panel preserves the intended nonsecret idempotency UUID in tab sessionStorage scoped to actor/workspace/task/intent. A missing storage capability holds before submission; an uncertain result stops further decisions and remains stopped across a same-tab refresh. The owning mutation receipt must match its kind, task, intent hash, subject, request key, reviewer, predecessor/version and declared action/quantity/time scope before the saved key is cleared or success shown. A missing/null/mismatched receipt remains unknown with the key retained. Read-only receipts display request keys for reconciliation; an absent paginated result is not proof of no commit. There is no resend/clear control or automatic mutation retry. Closing the tab/clearing storage is not a durable no-replay certificate; preserve the intended key and reconcile the unknown before another decision. The backend's exact-body idempotency remains authoritative.
|
|
88
88
|
|
|
89
89
|
An approval is review-only: reserved/staged quantities stay zero. No stock move, scan execution, safety/qualification certificate, live deployment or full F04/UI acceptance is claimed by this source candidate. `graphql/pending-pick.graphql` is regenerated from the owning backend candidate and explicitly is not a published Hive contract; actual Both schema/package/host/ordinary-actor/Files and Playwright acceptance remain release gates.
|
|
90
|
+
|
|
91
|
+
### Manual freight invoice comparison candidate — BOFF-4395 / BOFF-8598
|
|
92
|
+
|
|
93
|
+
The finance page compares manually reported supplier invoice rows with one explicitly selected immutable estimate/quote version. It preserves unknown amounts and source dates, explicit row mappings, supplier/invoice references, payer and currency conventions. Sourced amounts use exact decimal input and currency display; the existing amount editor accepts up to 20 whole digits and rejects excess fractional precision without rounding. The wire contract retains integer minor-unit strings, including larger existing receipts. Changing an unsent currency convention clears its amount rather than reinterpreting it. Quantity/rate differences, incomparable rows, unknown expected-charge coverage and comparable-only subtotals remain distinct. This does not establish acceptance, contracted liability, approval, FX conversion or payment.
|
|
94
|
+
|
|
95
|
+
Structural preview must match the exact version and current source facts. Recording additionally requires current shipment update permission, current readable exact Files versions, and an owning immutable receipt. Corrections append against the latest loaded predecessor. Known receipt history opens after confirmation and survives a bookmarked URL; complete supplier/invoice discovery is not implemented by the five-operation backend contract. Manual identity lookup is available only in the advanced disclosure.
|
|
96
|
+
|
|
97
|
+
Before one mutation dispatch, the complete normalized business intent and original request key are retained in tab sessionStorage. A lost/malformed reply remains unresolved across refresh and prevents another save or new key. Recovery rechecks the original public scope between its original-key read and exact-receipt read, then before confirmation; null never proves no effect or permits retry. Confirmation checks the full business tuple, exact evidence, visible direct actor, revision/predecessor and stable server fingerprint. Retained source facts are hidden whenever that readable public scope is unavailable or different. Public canonical actor/workspace/organization/project/tenant scope is compared locally; it does not reproduce the server's full trusted context or recompute its fingerprint. No token or credential is decoded, persisted or logged by this feature. Storage is tab-scoped; closing the tab or clearing browser data is not proof of no commit.
|
|
98
|
+
|
|
99
|
+
Generate the additive typed snapshot with `bun scripts/generate-freight-invoice-contract.ts <owning-combined-SDL>` and normal `bun run codegen`; generated TypeScript is not hand-edited. `verify:freight-invoice` runs strict source/receipt and actual recovery-hook controls in normal sanity and PR CI. The existing live-contract gate includes the new project. Source/local synthetic browser checks do not establish deployed schema, genuine permissions, Files eligibility or end-to-end acceptance. Official backend/schema, MFE/host publication and ordinary-account Alpha/Production acceptance remain separate gates. Existing BOFF-9129 dependency findings remain unwaived; the unrelated responsive PR is not included.
|
|
@@ -223,6 +223,11 @@ var E = ({ registerNavItems: v, basePath: b = "/" }) => {
|
|
|
223
223
|
icon: /* @__PURE__ */ S(a, { size: 16 }),
|
|
224
224
|
order: 9,
|
|
225
225
|
children: [{
|
|
226
|
+
id: "mtw-freight-invoice-comparisons",
|
|
227
|
+
label: C("movethewheels.root.nav.freightInvoices", "Freight invoice comparisons"),
|
|
228
|
+
path: E(b, "finance/freight-invoice-comparisons"),
|
|
229
|
+
icon: /* @__PURE__ */ S(a, { size: 16 })
|
|
230
|
+
}, {
|
|
226
231
|
id: "mtw-freight-estimates",
|
|
227
232
|
label: C("movethewheels.root.nav.freightEstimates", "Freight cost estimates"),
|
|
228
233
|
path: E(b, "finance/freight-estimates"),
|
|
@@ -28,8 +28,8 @@ function d() {
|
|
|
28
28
|
})
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
-
var f = r(() => import("./pages/DashboardPage.js")), p = r(() => import("./pages/OrdersListPage.js")), m = r(() => import("./pages/OrderDetailsPage.js")), h = r(() => import("./pages/CreateOrderPage.js")), g = r(() => import("./pages/TrackingPage.js")), _ = r(() => import("./pages/TrackingEventQualityPage.js")), v = r(() => import("./pages/ShipmentStatusAuthorityPage.js")), y = r(() => import("./pages/LiveTrackingPage.js")), b = r(() => import("./pages/FleetPage.js")), x = r(() => import("./pages/VehiclesPage.js")), S = r(() => import("./pages/VehicleDetailsPage.js")), C = r(() => import("./pages/DriversPage.js")), w = r(() => import("./pages/DriverDetailsPage.js")), T = r(() => import("./pages/InventoryPage.js")), E = r(() => import("./pages/ProductsPage.js")), D = r(() => import("./pages/ProductDetailsPage.js")), O = r(() => import("./pages/WarehousesPage.js")), k = r(() => import("./pages/WarehouseDetailsPage.js")), A = r(() => import("./pages/CustomersPage.js")), j = r(() => import("./pages/CustomerDetailsPage.js")), M = r(() => import("./pages/RoutesPage.js")), N = r(() => import("./pages/RouteDetailsPage.js")), P = r(() => import("./pages/AnalyticsPage.js")), ee = r(() => import("./pages/FinancePage.js")), F = r(() => import("./pages/FreightEstimatePage.js")), I = r(() => import("./pages/
|
|
32
|
-
function
|
|
31
|
+
var f = r(() => import("./pages/DashboardPage.js")), p = r(() => import("./pages/OrdersListPage.js")), m = r(() => import("./pages/OrderDetailsPage.js")), h = r(() => import("./pages/CreateOrderPage.js")), g = r(() => import("./pages/TrackingPage.js")), _ = r(() => import("./pages/TrackingEventQualityPage.js")), v = r(() => import("./pages/ShipmentStatusAuthorityPage.js")), y = r(() => import("./pages/LiveTrackingPage.js")), b = r(() => import("./pages/FleetPage.js")), x = r(() => import("./pages/VehiclesPage.js")), S = r(() => import("./pages/VehicleDetailsPage.js")), C = r(() => import("./pages/DriversPage.js")), w = r(() => import("./pages/DriverDetailsPage.js")), T = r(() => import("./pages/InventoryPage.js")), E = r(() => import("./pages/ProductsPage.js")), D = r(() => import("./pages/ProductDetailsPage.js")), O = r(() => import("./pages/WarehousesPage.js")), k = r(() => import("./pages/WarehouseDetailsPage.js")), A = r(() => import("./pages/CustomersPage.js")), j = r(() => import("./pages/CustomerDetailsPage.js")), M = r(() => import("./pages/RoutesPage.js")), N = r(() => import("./pages/RouteDetailsPage.js")), P = r(() => import("./pages/AnalyticsPage.js")), ee = r(() => import("./pages/FinancePage.js")), F = r(() => import("./pages/FreightEstimatePage.js")), I = r(() => import("./pages/FreightInvoicePage.js")), L = r(() => import("./pages/ConsolidationPage.js")), R = r(() => import("./pages/LogisticsProceduresPage.js")), z = r(() => import("./pages/MarketplacePage.js")), B = r(() => import("./pages/ImportExportPage.js")), V = r(() => import("./pages/ReportsPage.js")), H = r(() => import("./pages/SettingsPage.js")), U = r(() => import("./pages/AIAssistantPage.js")), W = r(() => import("./pages/DeliveryCapturePage.js")), G = r(() => import("./pages/MultiModalShipmentPage.js")), K = r(() => import("./pages/ShippingRatesPage.js")), q = r(() => import("./pages/ContainersPage.js")), J = r(() => import("./pages/ContainerConditionPage.js")), Y = r(() => import("./pages/FreeTimePage.js")), X = r(() => import("./pages/PendingPickPage.js")), Z = r(() => import("./pages/StockObservationsPage.js")), Q = r(() => import("./pages/StockBindingPage.js")), $ = r(() => import("./pages/TripUtilizationPage.js")), te = r(() => import("./pages/EmptyReusePage.js"));
|
|
32
|
+
function ne() {
|
|
33
33
|
return /* @__PURE__ */ s(n, {
|
|
34
34
|
fallback: /* @__PURE__ */ s(d, {}),
|
|
35
35
|
children: /* @__PURE__ */ c(a, { children: [
|
|
@@ -71,39 +71,39 @@ function te() {
|
|
|
71
71
|
}),
|
|
72
72
|
/* @__PURE__ */ s(i, {
|
|
73
73
|
path: "deliveries/mine",
|
|
74
|
-
element: /* @__PURE__ */ s(
|
|
74
|
+
element: /* @__PURE__ */ s(W, {})
|
|
75
75
|
}),
|
|
76
76
|
/* @__PURE__ */ s(i, {
|
|
77
77
|
path: "shipments/multi-modal",
|
|
78
|
-
element: /* @__PURE__ */ s(
|
|
78
|
+
element: /* @__PURE__ */ s(G, {})
|
|
79
79
|
}),
|
|
80
80
|
/* @__PURE__ */ s(i, {
|
|
81
81
|
path: "shipments/rates",
|
|
82
|
-
element: /* @__PURE__ */ s(
|
|
82
|
+
element: /* @__PURE__ */ s(K, {})
|
|
83
83
|
}),
|
|
84
84
|
/* @__PURE__ */ s(i, {
|
|
85
85
|
path: "containers",
|
|
86
|
-
element: /* @__PURE__ */ s(
|
|
86
|
+
element: /* @__PURE__ */ s(q, {})
|
|
87
87
|
}),
|
|
88
88
|
/* @__PURE__ */ s(i, {
|
|
89
89
|
path: "containers/condition",
|
|
90
|
-
element: /* @__PURE__ */ s(
|
|
90
|
+
element: /* @__PURE__ */ s(J, {})
|
|
91
91
|
}),
|
|
92
92
|
/* @__PURE__ */ s(i, {
|
|
93
93
|
path: "containers/free-time",
|
|
94
|
-
element: /* @__PURE__ */ s(
|
|
94
|
+
element: /* @__PURE__ */ s(Y, {})
|
|
95
95
|
}),
|
|
96
96
|
/* @__PURE__ */ s(i, {
|
|
97
97
|
path: "containers/empty-reuse",
|
|
98
|
-
element: /* @__PURE__ */ s(
|
|
98
|
+
element: /* @__PURE__ */ s(te, {})
|
|
99
99
|
}),
|
|
100
100
|
/* @__PURE__ */ s(i, {
|
|
101
101
|
path: "containers/consolidation",
|
|
102
|
-
element: /* @__PURE__ */ s(
|
|
102
|
+
element: /* @__PURE__ */ s(L, {})
|
|
103
103
|
}),
|
|
104
104
|
/* @__PURE__ */ s(i, {
|
|
105
105
|
path: "containers/procedures",
|
|
106
|
-
element: /* @__PURE__ */ s(
|
|
106
|
+
element: /* @__PURE__ */ s(R, {})
|
|
107
107
|
}),
|
|
108
108
|
/* @__PURE__ */ s(i, {
|
|
109
109
|
path: "fleet",
|
|
@@ -147,15 +147,15 @@ function te() {
|
|
|
147
147
|
}),
|
|
148
148
|
/* @__PURE__ */ s(i, {
|
|
149
149
|
path: "inventory/source-assessments",
|
|
150
|
-
element: /* @__PURE__ */ s(
|
|
150
|
+
element: /* @__PURE__ */ s(Q, {})
|
|
151
151
|
}),
|
|
152
152
|
/* @__PURE__ */ s(i, {
|
|
153
153
|
path: "inventory/reported-issues",
|
|
154
|
-
element: /* @__PURE__ */ s(
|
|
154
|
+
element: /* @__PURE__ */ s(Z, {})
|
|
155
155
|
}),
|
|
156
156
|
/* @__PURE__ */ s(i, {
|
|
157
157
|
path: "inventory/pending-picks",
|
|
158
|
-
element: /* @__PURE__ */ s(
|
|
158
|
+
element: /* @__PURE__ */ s(X, {})
|
|
159
159
|
}),
|
|
160
160
|
/* @__PURE__ */ s(i, {
|
|
161
161
|
path: "inventory/products",
|
|
@@ -207,7 +207,7 @@ function te() {
|
|
|
207
207
|
}),
|
|
208
208
|
/* @__PURE__ */ s(i, {
|
|
209
209
|
path: "routes/trip-utilization",
|
|
210
|
-
element: /* @__PURE__ */ s(
|
|
210
|
+
element: /* @__PURE__ */ s($, {})
|
|
211
211
|
}),
|
|
212
212
|
/* @__PURE__ */ s(i, {
|
|
213
213
|
path: "routes/new",
|
|
@@ -233,25 +233,29 @@ function te() {
|
|
|
233
233
|
path: "finance/freight-estimates",
|
|
234
234
|
element: /* @__PURE__ */ s(F, {})
|
|
235
235
|
}),
|
|
236
|
+
/* @__PURE__ */ s(i, {
|
|
237
|
+
path: "finance/freight-invoice-comparisons",
|
|
238
|
+
element: /* @__PURE__ */ s(I, {})
|
|
239
|
+
}),
|
|
236
240
|
/* @__PURE__ */ s(i, {
|
|
237
241
|
path: "marketplace",
|
|
238
|
-
element: /* @__PURE__ */ s(
|
|
242
|
+
element: /* @__PURE__ */ s(z, {})
|
|
239
243
|
}),
|
|
240
244
|
/* @__PURE__ */ s(i, {
|
|
241
245
|
path: "import-export",
|
|
242
|
-
element: /* @__PURE__ */ s(
|
|
246
|
+
element: /* @__PURE__ */ s(B, {})
|
|
243
247
|
}),
|
|
244
248
|
/* @__PURE__ */ s(i, {
|
|
245
249
|
path: "reports",
|
|
246
|
-
element: /* @__PURE__ */ s(
|
|
250
|
+
element: /* @__PURE__ */ s(V, {})
|
|
247
251
|
}),
|
|
248
252
|
/* @__PURE__ */ s(i, {
|
|
249
253
|
path: "ai-assistant",
|
|
250
|
-
element: /* @__PURE__ */ s(
|
|
254
|
+
element: /* @__PURE__ */ s(U, {})
|
|
251
255
|
}),
|
|
252
256
|
/* @__PURE__ */ s(i, {
|
|
253
257
|
path: "settings",
|
|
254
|
-
element: /* @__PURE__ */ s(
|
|
258
|
+
element: /* @__PURE__ */ s(H, {})
|
|
255
259
|
}),
|
|
256
260
|
/* @__PURE__ */ s(i, {
|
|
257
261
|
path: "*",
|
|
@@ -261,4 +265,4 @@ function te() {
|
|
|
261
265
|
});
|
|
262
266
|
}
|
|
263
267
|
//#endregion
|
|
264
|
-
export {
|
|
268
|
+
export { ne as MoveTheWheelsRoutes };
|
|
@@ -1,138 +1,138 @@
|
|
|
1
1
|
import { Button as e } from "./ui.js";
|
|
2
2
|
import { useConditionQuery as t } from "../hooks/useContainerCondition.js";
|
|
3
|
-
import { ContainerEvidenceFilesDocument as n, ContainerEvidenceVersionsDocument as r } from "../src/generated/wspace-operations.js";
|
|
4
|
-
import { useState as
|
|
5
|
-
import { jsx as
|
|
3
|
+
import { ContainerEvidenceFilesDocument as n, ContainerEvidenceVersionsDocument as r, InvoiceEvidenceVersionsDocument as i } from "../src/generated/wspace-operations.js";
|
|
4
|
+
import { useState as a } from "react";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
6
|
//#region src/movethewheels/components/ContainerEvidencePicker.tsx
|
|
7
|
-
function
|
|
8
|
-
let [
|
|
7
|
+
function c({ value: c, onChange: l, currentOnly: u = !1, description: d = "Choose exact versions from shared Files. Evidence integrity does not confirm the issuer or certify the container." }) {
|
|
8
|
+
let [f, p] = a(""), [m, h] = a(0), [g, _] = a(0), v = t(n, { pagination: {
|
|
9
9
|
limit: 25,
|
|
10
|
-
offset:
|
|
11
|
-
} }),
|
|
12
|
-
fileId:
|
|
10
|
+
offset: m
|
|
11
|
+
} }), y = t(u ? i : r, f ? {
|
|
12
|
+
fileId: f,
|
|
13
13
|
pagination: {
|
|
14
14
|
limit: 25,
|
|
15
|
-
offset:
|
|
15
|
+
offset: g
|
|
16
16
|
}
|
|
17
17
|
} : null);
|
|
18
|
-
return /* @__PURE__ */
|
|
18
|
+
return /* @__PURE__ */ s("fieldset", {
|
|
19
19
|
className: "space-y-3 rounded-lg border p-4",
|
|
20
20
|
children: [
|
|
21
|
-
/* @__PURE__ */
|
|
21
|
+
/* @__PURE__ */ o("legend", {
|
|
22
22
|
className: "px-1 font-medium",
|
|
23
23
|
children: "Evidence for this record"
|
|
24
24
|
}),
|
|
25
|
-
/* @__PURE__ */
|
|
25
|
+
/* @__PURE__ */ o("p", {
|
|
26
26
|
className: "text-sm",
|
|
27
|
-
children:
|
|
27
|
+
children: d
|
|
28
28
|
}),
|
|
29
|
-
|
|
29
|
+
v.error && /* @__PURE__ */ s("p", {
|
|
30
30
|
role: "alert",
|
|
31
|
-
children: ["Evidence files unavailable: ",
|
|
31
|
+
children: ["Evidence files unavailable: ", v.error]
|
|
32
32
|
}),
|
|
33
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ s("label", {
|
|
34
34
|
className: "block",
|
|
35
|
-
children: ["File", /* @__PURE__ */
|
|
35
|
+
children: ["File", /* @__PURE__ */ s("select", {
|
|
36
36
|
"aria-label": "Evidence file",
|
|
37
37
|
className: "mt-1 w-full rounded-md border p-2",
|
|
38
|
-
value:
|
|
38
|
+
value: f,
|
|
39
39
|
onChange: (e) => {
|
|
40
|
-
|
|
40
|
+
p(e.target.value), _(0);
|
|
41
41
|
},
|
|
42
|
-
children: [/* @__PURE__ */
|
|
42
|
+
children: [/* @__PURE__ */ o("option", {
|
|
43
43
|
value: "",
|
|
44
44
|
children: "Choose a readable file"
|
|
45
|
-
}),
|
|
45
|
+
}), v.data?.getFiles.files.filter((e) => e.canRead === !0).map((e) => /* @__PURE__ */ o("option", {
|
|
46
46
|
value: e.id,
|
|
47
47
|
children: e.name
|
|
48
48
|
}, e.id))]
|
|
49
49
|
})]
|
|
50
50
|
}),
|
|
51
|
-
|
|
51
|
+
v.loading && /* @__PURE__ */ o("p", {
|
|
52
52
|
role: "status",
|
|
53
53
|
children: "Loading evidence files…"
|
|
54
54
|
}),
|
|
55
|
-
/* @__PURE__ */
|
|
55
|
+
/* @__PURE__ */ s("div", {
|
|
56
56
|
className: "flex gap-2",
|
|
57
|
-
children: [/* @__PURE__ */
|
|
57
|
+
children: [/* @__PURE__ */ o(e, {
|
|
58
58
|
type: "button",
|
|
59
59
|
variant: "outline",
|
|
60
|
-
disabled:
|
|
60
|
+
disabled: m === 0 || v.loading,
|
|
61
61
|
onClick: () => {
|
|
62
|
-
|
|
62
|
+
h(Math.max(0, m - 25)), p("");
|
|
63
63
|
},
|
|
64
64
|
children: "Previous files"
|
|
65
|
-
}), /* @__PURE__ */
|
|
65
|
+
}), /* @__PURE__ */ o(e, {
|
|
66
66
|
type: "button",
|
|
67
67
|
variant: "outline",
|
|
68
|
-
disabled: !
|
|
68
|
+
disabled: !v.data?.getFiles.hasMore || v.loading,
|
|
69
69
|
onClick: () => {
|
|
70
|
-
|
|
70
|
+
h(m + 25), p("");
|
|
71
71
|
},
|
|
72
72
|
children: "Next files"
|
|
73
73
|
})]
|
|
74
74
|
}),
|
|
75
|
-
|
|
75
|
+
y.error && /* @__PURE__ */ s("p", {
|
|
76
76
|
role: "alert",
|
|
77
|
-
children: ["File versions unavailable: ",
|
|
77
|
+
children: ["File versions unavailable: ", y.error]
|
|
78
78
|
}),
|
|
79
|
-
|
|
79
|
+
y.loading && /* @__PURE__ */ o("p", {
|
|
80
80
|
role: "status",
|
|
81
81
|
children: "Loading file versions…"
|
|
82
82
|
}),
|
|
83
|
-
|
|
84
|
-
let t =
|
|
85
|
-
return /* @__PURE__ */
|
|
83
|
+
y.data?.getFileVersions.versions.map((e) => {
|
|
84
|
+
let t = c.some((t) => t.versionId === e.id), n = !u || "isCurrentVersion" in e && e.isCurrentVersion === !0, r = n && /^[a-fA-F0-9]{64}$/.test(e.sha256Hash ?? ""), i = `${e.name} — version ${e.versionLabel ?? e.versionNumber}`;
|
|
85
|
+
return /* @__PURE__ */ s("label", {
|
|
86
86
|
className: "flex gap-2 text-sm",
|
|
87
87
|
children: [
|
|
88
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ o("input", {
|
|
89
89
|
type: "checkbox",
|
|
90
90
|
checked: t,
|
|
91
|
-
disabled: !
|
|
92
|
-
onChange: () =>
|
|
91
|
+
disabled: !r || !t && c.length >= 10,
|
|
92
|
+
onChange: () => l(t ? c.filter((t) => t.versionId !== e.id) : [...c, {
|
|
93
93
|
fileId: e.fileId,
|
|
94
94
|
versionId: e.id,
|
|
95
|
-
label:
|
|
95
|
+
label: i
|
|
96
96
|
}])
|
|
97
97
|
}),
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
i,
|
|
99
|
+
n ? !r && " (integrity fingerprint unavailable)" : " (not confirmed current)"
|
|
100
100
|
]
|
|
101
101
|
}, e.id);
|
|
102
102
|
}),
|
|
103
|
-
|
|
103
|
+
f && /* @__PURE__ */ s("div", {
|
|
104
104
|
className: "flex gap-2",
|
|
105
|
-
children: [/* @__PURE__ */
|
|
105
|
+
children: [/* @__PURE__ */ o(e, {
|
|
106
106
|
type: "button",
|
|
107
107
|
variant: "outline",
|
|
108
|
-
disabled:
|
|
109
|
-
onClick: () =>
|
|
108
|
+
disabled: g === 0 || y.loading,
|
|
109
|
+
onClick: () => _(Math.max(0, g - 25)),
|
|
110
110
|
children: "Previous versions"
|
|
111
|
-
}), /* @__PURE__ */
|
|
111
|
+
}), /* @__PURE__ */ o(e, {
|
|
112
112
|
type: "button",
|
|
113
113
|
variant: "outline",
|
|
114
|
-
disabled: !
|
|
115
|
-
onClick: () =>
|
|
114
|
+
disabled: !y.data?.getFileVersions.hasMore || y.loading,
|
|
115
|
+
onClick: () => _(g + 25),
|
|
116
116
|
children: "Next versions"
|
|
117
117
|
})]
|
|
118
118
|
}),
|
|
119
|
-
/* @__PURE__ */
|
|
119
|
+
/* @__PURE__ */ s("p", {
|
|
120
120
|
className: "text-sm",
|
|
121
121
|
children: [
|
|
122
122
|
"Selected ",
|
|
123
|
-
|
|
123
|
+
c.length,
|
|
124
124
|
" of 10 versions."
|
|
125
125
|
]
|
|
126
126
|
}),
|
|
127
|
-
|
|
127
|
+
c.map((t) => /* @__PURE__ */ s("div", {
|
|
128
128
|
className: "flex items-center justify-between gap-2 text-sm",
|
|
129
|
-
children: [/* @__PURE__ */
|
|
129
|
+
children: [/* @__PURE__ */ o("span", {
|
|
130
130
|
className: "break-words",
|
|
131
131
|
children: t.label
|
|
132
|
-
}), /* @__PURE__ */
|
|
132
|
+
}), /* @__PURE__ */ o(e, {
|
|
133
133
|
type: "button",
|
|
134
134
|
variant: "outline",
|
|
135
|
-
onClick: () => c
|
|
135
|
+
onClick: () => l(c.filter((e) => e.versionId !== t.versionId)),
|
|
136
136
|
children: "Remove"
|
|
137
137
|
})]
|
|
138
138
|
}, t.versionId))
|
|
@@ -140,4 +140,4 @@ function s({ value: s, onChange: c, description: l = "Choose exact versions from
|
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
142
|
//#endregion
|
|
143
|
-
export {
|
|
143
|
+
export { c as ContainerEvidencePicker };
|
|
@@ -57,7 +57,7 @@ function h({ alerts: p, isLoading: h, error: g, onRetry: _, onOpen: v, t: y }) {
|
|
|
57
57
|
}), b]
|
|
58
58
|
}) }), /* @__PURE__ */ u(a, { children: /* @__PURE__ */ u("p", {
|
|
59
59
|
className: "text-sm text-text-secondary",
|
|
60
|
-
children: y("movethewheels.fleet.alerts.allClear", "
|
|
60
|
+
children: y("movethewheels.fleet.alerts.allClear", "No recorded fleet alerts. This does not certify legal driving eligibility or duty-hours availability.")
|
|
61
61
|
}) })] }) : /* @__PURE__ */ d(i, { children: [/* @__PURE__ */ u(o, { children: /* @__PURE__ */ d(s, {
|
|
62
62
|
className: "flex items-center gap-2",
|
|
63
63
|
children: [
|
|
@@ -92,7 +92,7 @@ function h({ alerts: p, isLoading: h, error: g, onRetry: _, onOpen: v, t: y }) {
|
|
|
92
92
|
/* @__PURE__ */ d("span", {
|
|
93
93
|
className: "flex-1 min-w-0",
|
|
94
94
|
children: [/* @__PURE__ */ u("span", {
|
|
95
|
-
className: "block text-sm font-medium
|
|
95
|
+
className: "block text-sm font-medium whitespace-normal break-words",
|
|
96
96
|
children: t.message
|
|
97
97
|
}), n && /* @__PURE__ */ u("span", {
|
|
98
98
|
className: "block text-xs text-text-secondary",
|