@burdenoff/microfe-movethewheels 2026.703.7 → 2026.703.8
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-B7FGmmKT.js → AIAssistantPage-MWJLAMN_.js} +5 -5
- package/dist/{AnalyticsPage-DXduj5KB.js → AnalyticsPage-900jpV2T.js} +9 -9
- package/dist/{CreateOrderPage-DuJJQ16b.js → CreateOrderPage-V8aXfcpN.js} +11 -11
- package/dist/{CustomerDetailsPage-C98SKw7Z.js → CustomerDetailsPage-CHzg75Q5.js} +16 -16
- package/dist/{CustomersPage-s8hK55JL.js → CustomersPage-CwtVspuq.js} +11 -11
- package/dist/{DashboardPage-BsEgcKEN.js → DashboardPage-DiD-cWwD.js} +17 -17
- package/dist/{DataTable-Da7yHjM1.js → DataTable-CmdZd6iV.js} +7 -7
- package/dist/{DocumentsCard-CziaTJhP.js → DocumentsCard-y2ybnAlu.js} +4 -4
- package/dist/{DriverDetailsPage-CBzAmM6s.js → DriverDetailsPage-DjaXaATQ.js} +14 -14
- package/dist/{DriversPage-Duy_ITG6.js → DriversPage-DW-FGPFW.js} +11 -11
- package/dist/{FinancePage-BZtPTpmT.js → FinancePage-DYadOUzC.js} +9 -9
- package/dist/{FleetPage-DJfzoHbs.js → FleetPage-P9k4zZqP.js} +10 -10
- package/dist/{FormError-CWjGwOW8.js → FormError-D4T5FWZA.js} +1 -1
- package/dist/{ImportExportPage-DJ77GK_7.js → ImportExportPage-BhWGfbH3.js} +6 -6
- package/dist/{InventoryPage-Dpnwk_N3.js → InventoryPage-BWikjZMW.js} +10 -10
- package/dist/{LiveTrackingPage-CLlvsP1B.js → LiveTrackingPage-UQBWlthJ.js} +10 -10
- package/dist/{MarketplacePage-d99r-v6p.js → MarketplacePage-DMH0HNDH.js} +9 -9
- package/dist/{MetricCard-DA5ZqAVl.js → MetricCard-CqU5WsyW.js} +2 -2
- package/dist/{Notice-kkjV2rLR.js → Notice-BrXJ85dA.js} +2 -2
- package/dist/{OrderDetailsPage-BePtkyN0.js → OrderDetailsPage-2J4ua0wd.js} +28 -24
- package/dist/{OrdersListPage-Csy_KScx.js → OrdersListPage-DvICveRv.js} +14 -14
- package/dist/{PageLayout-h_q9l8af.js → PageLayout-j9Zw3wBN.js} +579 -561
- package/dist/{ProductDetailsPage-BMlRoR9E.js → ProductDetailsPage-BSjWLrty.js} +9 -9
- package/dist/{ProductsPage-B4jWJ5bv.js → ProductsPage-Bn1U2jTj.js} +9 -9
- package/dist/{ReportsPage-ALRYfXtz.js → ReportsPage-MU8F9DQC.js} +9 -9
- package/dist/{RouteDetailsPage-Btb1MSIS.js → RouteDetailsPage-CgSY1CTd.js} +18 -18
- package/dist/{RoutesPage-CQHCDInT.js → RoutesPage-Dqd5Don6.js} +7 -7
- package/dist/{SettingsPage-BYBRrlGe.js → SettingsPage-2a05Sq2k.js} +4 -4
- package/dist/{Sparkline-Q-6bJ24J.js → Sparkline-DTGdlxUH.js} +1 -1
- package/dist/{StatusBadge-1W2p8fEi.js → StatusBadge-BfiF-nNI.js} +1 -1
- package/dist/{TrackingPage-CFndTIyk.js → TrackingPage-SnjW6qeD.js} +11 -11
- package/dist/{VehicleDetailsPage-DNLrMljV.js → VehicleDetailsPage-CvRMJ2zC.js} +12 -12
- package/dist/{VehiclesPage-ClkfFZxL.js → VehiclesPage-qxf-1C1B.js} +12 -12
- package/dist/{WarehouseDetailsPage-CAQFz7l_.js → WarehouseDetailsPage-D0Wyyj1Y.js} +11 -11
- package/dist/{WarehousesPage-kNba6cr3.js → WarehousesPage-44Wj7AGT.js} +8 -8
- package/dist/{arrow-left-XOzFvBFD.js → arrow-left-1dVWv2dg.js} +1 -1
- package/dist/{arrow-right-CRrwlvFe.js → arrow-right-PUCNATnk.js} +1 -1
- package/dist/{arrow-up-ClFaLPly.js → arrow-up-VQuGMABN.js} +1 -1
- package/dist/{box-BX4WyCLv.js → box-DW1KNP8j.js} +1 -1
- package/dist/{boxes-R3nq5f0_.js → boxes-D6I00XqA.js} +1 -1
- package/dist/{chart-column-BgF8J9bx.js → chart-column-BwQ5H9ol.js} +1 -1
- package/dist/{charts-BS_OnWc6.js → charts-Dv_zxP7L.js} +2 -2
- package/dist/{chevron-left-D3hcLQ1g.js → chevron-left-DzNxoaBG.js} +1 -1
- package/dist/{chevron-right-BpfSrzQF.js → chevron-right-CKm3ZC1T.js} +1 -1
- package/dist/{circle-alert-CLqT8iCQ.js → circle-alert-CtBm6oIb.js} +1 -1
- package/dist/{circle-check-CWLAr_8f.js → circle-check-B_Y7FDyR.js} +1 -1
- package/dist/{circle-check-big-Dsuz8dJ2.js → circle-check-big-H5pLiMBW.js} +1 -1
- package/dist/{clock-DrZOQD8h.js → clock-B4-qjGuB.js} +1 -1
- package/dist/{dollar-sign-CJfKfYul.js → dollar-sign-CYGHy2oS.js} +1 -1
- package/dist/{download-C-yNvUiL.js → download-BJonq2ty.js} +1 -1
- package/dist/{file-text-m2SyQgBo.js → file-text-C-cZx58r.js} +1 -1
- package/dist/{filter-uA6govE9.js → filter-B_S6WOqr.js} +1 -1
- package/dist/{fuel-BroSIBo1.js → fuel-Cjt6IxKr.js} +1 -1
- package/dist/index.js +33 -33
- package/dist/{map-BzwQ__kD.js → map-CO0aWUae.js} +1 -1
- package/dist/{map-pin-BGbmEGn3.js → map-pin-BISLzLwb.js} +1 -1
- package/dist/{maps-DpIuSSmg.js → maps-CtfuCAmh.js} +1 -1
- package/dist/{navigation-CjKGLL9T.js → navigation-BFki5UJz.js} +1 -1
- package/dist/{package-D36cKFvu.js → package-UyaWiALC.js} +1 -1
- package/dist/{phone-mMZFHd1Z.js → phone-Bav_V7rR.js} +1 -1
- package/dist/{plus-DY5R-c1j.js → plus-Bk_G-lFC.js} +1 -1
- package/dist/{refresh-cw-DyOLYuDU.js → refresh-cw-C4-jecjy.js} +1 -1
- package/dist/{route-CuaZ1wU3.js → route-WpCP6F1x.js} +1 -1
- package/dist/{save-h9dzHwJE.js → save-CcfoIn2J.js} +1 -1
- package/dist/{search-stTGSec-.js → search-C3YRxW9e.js} +1 -1
- package/dist/{square-pen-DT5srCPD.js → square-pen-Dr1X-P2s.js} +1 -1
- package/dist/{star-gp4yO3PF.js → star-1Ixfuzai.js} +1 -1
- package/dist/{store-DJZDAvCY.js → store-BwU935v5.js} +1 -1
- package/dist/{trash-2-DwcjTxYE.js → trash-2-CC4KugEJ.js} +1 -1
- package/dist/{trending-up-2q2sPVsb.js → trending-up-1brglj1E.js} +1 -1
- package/dist/{triangle-alert-CU60xaOi.js → triangle-alert-Dh56Yu3-.js} +1 -1
- package/dist/{truck-ByZxqZhI.js → truck-DxhtLfkG.js} +1 -1
- package/dist/{upload-CWor1uj3.js → upload-CLf0JLXW.js} +1 -1
- package/dist/{useAssistant-uoc8wjr0.js → useAssistant-B9qBtRKm.js} +1 -1
- package/dist/{useCustomers-BPPhQXSH.js → useCustomers-BQ4AIEAT.js} +1 -1
- package/dist/{useFleet-CT_iW2V9.js → useFleet-BXSocBD_.js} +1 -1
- package/dist/{useImportExport-BG0Cg_D9.js → useImportExport-7-O8noRJ.js} +1 -1
- package/dist/{useInventory-BtBGnOC2.js → useInventory-DmZficcp.js} +1 -1
- package/dist/{useOrders-BC-1mCc0.js → useOrders-B5FV0kcz.js} +1 -1
- package/dist/{useReports-Cx8blThR.js → useReports-hUXb8ryJ.js} +1 -1
- package/dist/{useRoutes-8fw8oO6y.js → useRoutes-C_ZCYJ_h.js} +1 -1
- package/dist/{useSettings-Do5WSUaI.js → useSettings-CteNasBE.js} +1 -1
- package/dist/{useTracking-Dogilo5C.js → useTracking-B7ttexRe.js} +3 -3
- package/dist/{user-Dr_JS2FF.js → user-B1IjWJtn.js} +1 -1
- package/dist/{user-check-CBSiMH6I.js → user-check-Cx6fHHll.js} +1 -1
- package/dist/{users-BRV9-2nV.js → users-BKmsb79k.js} +1 -1
- package/dist/{warehouse-CmIAl0_w.js → warehouse-DE1irFyJ.js} +1 -1
- package/dist/{wrench-6U-BTSbg.js → wrench-DTJGFs17.js} +1 -1
- package/dist/{x-DX8sZrkd.js → x-CvsUGJy1.js} +1 -1
- package/package.json +1 -1
- package/src/movethewheels/components/GlassPanel.tsx +1 -3
- package/src/movethewheels/components/MetricCard.tsx +16 -3
- package/src/movethewheels/components/charts/StatusDonut.tsx +2 -6
- package/src/movethewheels/components/charts/TrendChart.tsx +2 -6
- package/src/movethewheels/components/maps/LogisticsMap.tsx +1 -4
- package/src/movethewheels/components/maps/RouteMap.tsx +3 -5
- package/src/movethewheels/components/maps/TrackingMap.tsx +11 -2
- package/src/movethewheels/pages/CustomerDetailsPage.tsx +3 -2
- package/src/movethewheels/pages/DriverDetailsPage.tsx +2 -2
- package/src/movethewheels/pages/OrderDetailsPage.tsx +2 -1
- package/src/movethewheels/pages/VehicleDetailsPage.tsx +2 -2
- package/src/movethewheels/pages/VehiclesPage.tsx +9 -1
- package/src/movethewheels/pages/WarehouseDetailsPage.tsx +3 -1
- package/src/movethewheels/utils/graphqlClient.ts +51 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ut as e } from "./PageLayout-
|
|
1
|
+
import { ut as e } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
//#region node_modules/lucide-react/dist/esm/icons/square-pen.js
|
|
3
3
|
var t = e("SquarePen", [["path", {
|
|
4
4
|
d: "M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ut as e } from "./PageLayout-
|
|
1
|
+
import { ut as e } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
//#region node_modules/lucide-react/dist/esm/icons/star.js
|
|
3
3
|
var t = e("Star", [["path", {
|
|
4
4
|
d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t, ut as n } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t, ut as n } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region node_modules/lucide-react/dist/esm/icons/bot.js
|
|
4
4
|
var o = n("Bot", [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useCustomers.ts
|
|
4
4
|
var o = "\n query ListCustomers($filter: CustomerFilterInput, $pagination: PaginationInput) {\n customers(filter: $filter, pagination: $pagination) {\n id\n name\n email\n phone\n type\n company\n address\n businessLicense\n taxId\n rating\n createdAt\n updatedAt\n deletedAt\n }\n }\n", s = "\n query GetCustomer($id: ID!) {\n customer(id: $id) {\n id\n name\n email\n phone\n type\n company\n address\n businessLicense\n taxId\n rating\n createdAt\n updatedAt\n deletedAt\n }\n }\n", c = "\n mutation CreateCustomer($input: CreateCustomerInput!) {\n createCustomer(input: $input) {\n id\n name\n email\n phone\n type\n company\n address\n businessLicense\n taxId\n rating\n createdAt\n updatedAt\n deletedAt\n }\n }\n", l = "\n mutation UpdateCustomer($id: ID!, $input: UpdateCustomerInput!) {\n updateCustomer(id: $id, input: $input) {\n id\n name\n email\n phone\n type\n company\n address\n businessLicense\n taxId\n rating\n createdAt\n updatedAt\n deletedAt\n }\n }\n", u = "\n mutation DeleteCustomer($id: ID!) {\n deleteCustomer(id: $id)\n }\n";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.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
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";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as n, useMemo as r, useState as i } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useImportExport.ts
|
|
4
4
|
var a = "\n mutation MovethewheelsExportData($input: MovethewheelsExportDataInput!) {\n exportData(input: $input) {\n success\n message\n payload\n }\n }\n", o = "\n mutation MovethewheelsImportData($input: MovethewheelsImportDataInput!) {\n importData(input: $input) {\n success\n message\n payload\n }\n }\n";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.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
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";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useOrders.ts
|
|
4
4
|
var o = "\n query ListMovethewheelsOrders($filter: OrderFilterInput, $pagination: PaginationInput) {\n movethewheelsOrders(filter: $filter, pagination: $pagination) {\n id\n orderNumber\n customerId\n orderType\n status\n priority\n pickupAddress\n deliveryAddress\n items\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 statusHistory {\n status\n notes\n location\n createdAt\n createdBy\n }\n }\n }\n", s = "\n query GetMovethewheelsOrder($id: ID!) {\n movethewheelsOrder(id: $id) {\n id\n orderNumber\n customerId\n orderType\n status\n priority\n pickupAddress\n deliveryAddress\n items\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 statusHistory {\n status\n notes\n location\n createdAt\n createdBy\n }\n }\n }\n", c = "\n query GetOrderStatsBundle {\n orderStats {\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", l = "\n mutation CreateMovethewheelsOrder($input: CreateOrderInput!) {\n createMovethewheelsOrder(input: $input) {\n id\n orderNumber\n customerId\n orderType\n status\n priority\n pickupAddress\n deliveryAddress\n items\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 statusHistory {\n status\n notes\n location\n createdAt\n createdBy\n }\n }\n }\n", u = "\n mutation UpdateMovethewheelsOrder($id: ID!, $input: UpdateOrderInput!) {\n updateMovethewheelsOrder(id: $id, input: $input) {\n id\n orderNumber\n customerId\n orderType\n status\n priority\n pickupAddress\n deliveryAddress\n items\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 statusHistory {\n status\n notes\n location\n createdAt\n createdBy\n }\n }\n }\n", d = "\n mutation UpdateMovethewheelsOrderStatus($id: ID!, $input: UpdateOrderStatusInput!) {\n updateMovethewheelsOrderStatus(id: $id, input: $input) {\n id\n orderNumber\n customerId\n orderType\n status\n priority\n pickupAddress\n deliveryAddress\n items\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 statusHistory {\n status\n notes\n location\n createdAt\n createdBy\n }\n }\n }\n", f = "\n mutation DeleteMovethewheelsOrder($id: ID!) {\n deleteMovethewheelsOrder(id: $id)\n }\n";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useReports.ts
|
|
4
4
|
var o = "\n id\n name\n description\n type\n status\n schedule\n lastGenerated\n createdAt\n updatedAt\n", s = `
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as n, useEffect as r, useMemo as i, useState as a } from "react";
|
|
3
3
|
//#region src/movethewheels/hooks/useRoutes.ts
|
|
4
4
|
var o = "\n query ListRoutes($filter: RouteFilterInput, $pagination: PaginationInput) {\n routes(filter: $filter, pagination: $pagination) {\n id\n name\n status\n shipmentId\n vehicleId\n driverId\n waypoints\n estimatedDistance\n estimatedDuration\n fuelCost\n actualDistance\n actualDuration\n createdAt\n }\n }\n", s = "\n query GetRoute($id: ID!) {\n route(id: $id) {\n id\n name\n status\n shipmentId\n vehicleId\n driverId\n waypoints\n estimatedDistance\n estimatedDuration\n fuelCost\n actualDistance\n actualDuration\n createdAt\n }\n }\n", c = "\n mutation CreateRoute($input: CreateRouteInput!) {\n createRoute(input: $input) {\n id\n name\n status\n shipmentId\n vehicleId\n driverId\n waypoints\n estimatedDistance\n estimatedDuration\n fuelCost\n actualDistance\n actualDuration\n createdAt\n }\n }\n", l = "\n mutation UpdateRoute($id: ID!, $input: UpdateRouteInput!) {\n updateRoute(id: $id, input: $input) {\n id\n name\n status\n shipmentId\n vehicleId\n driverId\n waypoints\n estimatedDistance\n estimatedDuration\n fuelCost\n actualDistance\n actualDuration\n createdAt\n }\n }\n", u = "\n mutation DeleteRoute($id: ID!) {\n deleteRoute(id: $id)\n }\n", d = "\n mutation OptimizeRoute($id: ID!) {\n optimizeRoute(id: $id) {\n id\n name\n status\n shipmentId\n vehicleId\n driverId\n waypoints\n estimatedDistance\n estimatedDuration\n fuelCost\n actualDistance\n actualDuration\n createdAt\n }\n }\n";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { at as e, st as t, ut as n } from "./PageLayout-
|
|
1
|
+
import { at as e, st as t, ut as n } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
import { useCallback as r, useEffect as i, useMemo as a, useState as o } from "react";
|
|
3
3
|
//#region node_modules/lucide-react/dist/esm/icons/globe.js
|
|
4
4
|
var s = n("Globe", [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { at as e, st as t } from "./PageLayout-
|
|
2
|
-
import { r as n, t as r } from "./useOrders-
|
|
3
|
-
import { a as i, n as a, o, t as s } from "./useFleet-
|
|
1
|
+
import { at as e, st as t } from "./PageLayout-j9Zw3wBN.js";
|
|
2
|
+
import { r as n, t as r } from "./useOrders-B5FV0kcz.js";
|
|
3
|
+
import { a as i, n as a, o, t as s } from "./useFleet-BXSocBD_.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";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ut as e } from "./PageLayout-
|
|
1
|
+
import { ut as e } from "./PageLayout-j9Zw3wBN.js";
|
|
2
2
|
//#region node_modules/lucide-react/dist/esm/icons/wrench.js
|
|
3
3
|
var t = e("Wrench", [["path", {
|
|
4
4
|
d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",
|
package/package.json
CHANGED
|
@@ -58,9 +58,7 @@ export function GlassPanel({
|
|
|
58
58
|
{title != null && (
|
|
59
59
|
<h3 className="truncate text-sm font-semibold text-text-primary">{title}</h3>
|
|
60
60
|
)}
|
|
61
|
-
{description != null &&
|
|
62
|
-
<p className="text-xs text-text-secondary">{description}</p>
|
|
63
|
-
)}
|
|
61
|
+
{description != null && <p className="text-xs text-text-secondary">{description}</p>}
|
|
64
62
|
</div>
|
|
65
63
|
{action != null && <div className="flex shrink-0 items-center gap-2">{action}</div>}
|
|
66
64
|
</div>
|
|
@@ -78,7 +78,13 @@ const accentChipClasses: Record<MetricAccent, string> = {
|
|
|
78
78
|
function ArrowIcon({ direction }: { direction: 'up' | 'down' | 'flat' }) {
|
|
79
79
|
if (direction === 'flat') {
|
|
80
80
|
return (
|
|
81
|
-
<svg
|
|
81
|
+
<svg
|
|
82
|
+
className="h-3.5 w-3.5"
|
|
83
|
+
fill="none"
|
|
84
|
+
viewBox="0 0 24 24"
|
|
85
|
+
stroke="currentColor"
|
|
86
|
+
aria-hidden
|
|
87
|
+
>
|
|
82
88
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2.5} d="M5 12h14" />
|
|
83
89
|
</svg>
|
|
84
90
|
);
|
|
@@ -91,7 +97,12 @@ function ArrowIcon({ direction }: { direction: 'up' | 'down' | 'flat' }) {
|
|
|
91
97
|
stroke="currentColor"
|
|
92
98
|
aria-hidden
|
|
93
99
|
>
|
|
94
|
-
<path
|
|
100
|
+
<path
|
|
101
|
+
strokeLinecap="round"
|
|
102
|
+
strokeLinejoin="round"
|
|
103
|
+
strokeWidth={2.5}
|
|
104
|
+
d="M12 19V5m0 0l-6 6m6-6l6 6"
|
|
105
|
+
/>
|
|
95
106
|
</svg>
|
|
96
107
|
);
|
|
97
108
|
}
|
|
@@ -278,7 +289,9 @@ export function MetricCardSkeleton({ size = 'md' }: { size?: 'sm' | 'md' | 'lg'
|
|
|
278
289
|
<div className="h-8 w-32 rounded bg-bg-sunken motion-safe:animate-vc-shimmer" />
|
|
279
290
|
<div className="h-3 w-20 rounded bg-bg-sunken motion-safe:animate-vc-shimmer" />
|
|
280
291
|
</div>
|
|
281
|
-
<div
|
|
292
|
+
<div
|
|
293
|
+
className={cn('rounded-xl bg-bg-sunken motion-safe:animate-vc-shimmer', styles.icon)}
|
|
294
|
+
/>
|
|
282
295
|
</div>
|
|
283
296
|
</div>
|
|
284
297
|
</GlassCard>
|
|
@@ -67,9 +67,7 @@ export function StatusDonut({
|
|
|
67
67
|
<Tooltip
|
|
68
68
|
content={
|
|
69
69
|
<ChartTooltip
|
|
70
|
-
formatter={(v) =>
|
|
71
|
-
valueFormatter ? valueFormatter(Number(v)) : String(v)
|
|
72
|
-
}
|
|
70
|
+
formatter={(v) => (valueFormatter ? valueFormatter(Number(v)) : String(v))}
|
|
73
71
|
/>
|
|
74
72
|
}
|
|
75
73
|
/>
|
|
@@ -77,9 +75,7 @@ export function StatusDonut({
|
|
|
77
75
|
</ResponsiveContainer>
|
|
78
76
|
{centerLabel != null && (
|
|
79
77
|
<div className="pointer-events-none absolute inset-0 flex flex-col items-center justify-center text-center">
|
|
80
|
-
<span className="text-2xl font-bold tabular-nums text-text-primary">
|
|
81
|
-
{centerLabel}
|
|
82
|
-
</span>
|
|
78
|
+
<span className="text-2xl font-bold tabular-nums text-text-primary">{centerLabel}</span>
|
|
83
79
|
{centerSubLabel && (
|
|
84
80
|
<span className="text-xs text-text-secondary">{centerSubLabel}</span>
|
|
85
81
|
)}
|
|
@@ -99,9 +99,7 @@ export function TrendChart({
|
|
|
99
99
|
tickLine={false}
|
|
100
100
|
axisLine={false}
|
|
101
101
|
width={44}
|
|
102
|
-
tickFormatter={
|
|
103
|
-
valueFormatter ? (v: number) => valueFormatter(v, '') : undefined
|
|
104
|
-
}
|
|
102
|
+
tickFormatter={valueFormatter ? (v: number) => valueFormatter(v, '') : undefined}
|
|
105
103
|
/>
|
|
106
104
|
<Tooltip
|
|
107
105
|
cursor={{ stroke: chartTokens.axis, strokeOpacity: 0.3 }}
|
|
@@ -144,9 +142,7 @@ export function TrendChart({
|
|
|
144
142
|
tickLine={false}
|
|
145
143
|
axisLine={false}
|
|
146
144
|
width={44}
|
|
147
|
-
tickFormatter={
|
|
148
|
-
valueFormatter ? (v: number) => valueFormatter(v, '') : undefined
|
|
149
|
-
}
|
|
145
|
+
tickFormatter={valueFormatter ? (v: number) => valueFormatter(v, '') : undefined}
|
|
150
146
|
/>
|
|
151
147
|
<Tooltip
|
|
152
148
|
cursor={{ stroke: chartTokens.axis, strokeOpacity: 0.3 }}
|
|
@@ -40,10 +40,7 @@ export function LogisticsMap({
|
|
|
40
40
|
fitToMarkers = true,
|
|
41
41
|
emptyMessage = 'No live locations yet',
|
|
42
42
|
}: LogisticsMapProps) {
|
|
43
|
-
const validMarkers = useMemo(
|
|
44
|
-
() => markers.filter((m) => isRealCoord(m.lat, m.lng)),
|
|
45
|
-
[markers]
|
|
46
|
-
);
|
|
43
|
+
const validMarkers = useMemo(() => markers.filter((m) => isRealCoord(m.lat, m.lng)), [markers]);
|
|
47
44
|
|
|
48
45
|
const validRoutes = useMemo(
|
|
49
46
|
() =>
|
|
@@ -31,7 +31,8 @@ export function RouteMap({
|
|
|
31
31
|
emptyMessage = 'No stops with coordinates yet',
|
|
32
32
|
}: RouteMapProps) {
|
|
33
33
|
const ordered = useMemo(
|
|
34
|
-
() =>
|
|
34
|
+
() =>
|
|
35
|
+
[...stops].filter((s) => isRealCoord(s.lat, s.lng)).sort((a, b) => a.sequence - b.sequence),
|
|
35
36
|
[stops]
|
|
36
37
|
);
|
|
37
38
|
|
|
@@ -48,10 +49,7 @@ export function RouteMap({
|
|
|
48
49
|
emptyState={<p className="text-sm text-text-secondary">{emptyMessage}</p>}
|
|
49
50
|
>
|
|
50
51
|
{line.length >= 2 && (
|
|
51
|
-
<Polyline
|
|
52
|
-
positions={line}
|
|
53
|
-
pathOptions={{ color: routeColor, weight: 4, opacity: 0.85 }}
|
|
54
|
-
/>
|
|
52
|
+
<Polyline positions={line} pathOptions={{ color: routeColor, weight: 4, opacity: 0.85 }} />
|
|
55
53
|
)}
|
|
56
54
|
{ordered.map((s) => (
|
|
57
55
|
<Marker
|
|
@@ -70,11 +70,20 @@ export function TrackingMap({
|
|
|
70
70
|
{trailLine.length >= 2 && (
|
|
71
71
|
<Polyline
|
|
72
72
|
positions={trailLine}
|
|
73
|
-
pathOptions={{
|
|
73
|
+
pathOptions={{
|
|
74
|
+
color: trailColor,
|
|
75
|
+
weight: 4,
|
|
76
|
+
opacity: 0.85,
|
|
77
|
+
dashArray: '1 8',
|
|
78
|
+
lineCap: 'round',
|
|
79
|
+
}}
|
|
74
80
|
/>
|
|
75
81
|
)}
|
|
76
82
|
{originOk && (
|
|
77
|
-
<Marker
|
|
83
|
+
<Marker
|
|
84
|
+
position={[originOk.lat, originOk.lng]}
|
|
85
|
+
icon={createPinIcon('origin', { glyph: false })}
|
|
86
|
+
>
|
|
78
87
|
<Popup>
|
|
79
88
|
<span className="font-semibold">{originOk.label ?? 'Origin'}</span>
|
|
80
89
|
</Popup>
|
|
@@ -116,8 +116,9 @@ function NewCustomerForm() {
|
|
|
116
116
|
}
|
|
117
117
|
>
|
|
118
118
|
<PagePurpose icon={<Users size={18} />}>
|
|
119
|
-
Add a customer once and their contact details auto-fill every future order you book for
|
|
120
|
-
Only a name is required — add email, phone and company to make deliveries easier to
|
|
119
|
+
Add a customer once and their contact details auto-fill every future order you book for
|
|
120
|
+
them. Only a name is required — add email, phone and company to make deliveries easier to
|
|
121
|
+
arrange.
|
|
121
122
|
</PagePurpose>
|
|
122
123
|
|
|
123
124
|
<form onSubmit={handleSubmit} className="max-w-2xl space-y-6">
|
|
@@ -94,8 +94,8 @@ function NewDriverForm() {
|
|
|
94
94
|
}
|
|
95
95
|
>
|
|
96
96
|
<PagePurpose icon={<Users size={18} />}>
|
|
97
|
-
Add a driver so they can be assigned to orders and routes. An employee ID and name get them
|
|
98
|
-
the roster — add contact details and license number to keep the record complete.
|
|
97
|
+
Add a driver so they can be assigned to orders and routes. An employee ID and name get them
|
|
98
|
+
on the roster — add contact details and license number to keep the record complete.
|
|
99
99
|
</PagePurpose>
|
|
100
100
|
|
|
101
101
|
<form onSubmit={handleSubmit} className="max-w-2xl space-y-6">
|
|
@@ -548,7 +548,8 @@ export default function OrderDetailsPage() {
|
|
|
548
548
|
|
|
549
549
|
<div className="space-y-2">
|
|
550
550
|
<p className="text-sm text-text-secondary">
|
|
551
|
-
Current status:
|
|
551
|
+
Current status:{' '}
|
|
552
|
+
<span className="font-medium">{STATUS_LABELS[order.status]}</span>
|
|
552
553
|
</p>
|
|
553
554
|
{(() => {
|
|
554
555
|
const upcoming = nextStatus(order.status);
|
|
@@ -97,8 +97,8 @@ function NewVehicleForm() {
|
|
|
97
97
|
}
|
|
98
98
|
>
|
|
99
99
|
<PagePurpose icon={<Truck size={18} />}>
|
|
100
|
-
Add a vehicle so it can be assigned to deliveries and routes. Give it a fleet number and
|
|
101
|
-
to start — make, model and plate help identify it on the road.
|
|
100
|
+
Add a vehicle so it can be assigned to deliveries and routes. Give it a fleet number and
|
|
101
|
+
type to start — make, model and plate help identify it on the road.
|
|
102
102
|
</PagePurpose>
|
|
103
103
|
|
|
104
104
|
<form onSubmit={handleSubmit} className="max-w-2xl space-y-6">
|
|
@@ -3,7 +3,15 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { useState } from 'react';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
Truck,
|
|
8
|
+
Plus,
|
|
9
|
+
RefreshCw,
|
|
10
|
+
Download,
|
|
11
|
+
CircleCheck,
|
|
12
|
+
Route as RouteIcon,
|
|
13
|
+
Wrench,
|
|
14
|
+
} from 'lucide-react';
|
|
7
15
|
import { PageLayout } from '../components/PageLayout';
|
|
8
16
|
import { MetricCard, MetricGrid } from '../components/MetricCard';
|
|
9
17
|
import { DataTable, type Column } from '../components/DataTable';
|
|
@@ -90,7 +90,9 @@ function NewWarehouseForm() {
|
|
|
90
90
|
navigate?.(joinPath(basePath, `inventory/warehouses/${created.id}`));
|
|
91
91
|
} catch (err) {
|
|
92
92
|
console.error('Failed to create warehouse:', err);
|
|
93
|
-
setError(
|
|
93
|
+
setError(
|
|
94
|
+
err instanceof Error ? err.message : 'Failed to create warehouse. Please try again.'
|
|
95
|
+
);
|
|
94
96
|
setSubmitting(false);
|
|
95
97
|
}
|
|
96
98
|
};
|
|
@@ -69,6 +69,40 @@ function isAbortError(error: unknown): boolean {
|
|
|
69
69
|
|
|
70
70
|
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Global in-flight cap across every GraphQL call this MFE makes. The workspace
|
|
74
|
+
* service runs a single lean replica (no PgBouncer), and a page like the
|
|
75
|
+
* dashboard fans out ~7 queries at once; multiplied by the retry loop below a
|
|
76
|
+
* transient blip could balloon into dozens of simultaneous requests and tip the
|
|
77
|
+
* replica over. A small semaphore keeps the fan-out polite — requests beyond the
|
|
78
|
+
* limit queue for a moment instead of stampeding the service. 4 is high enough
|
|
79
|
+
* that normal navigation feels instant, low enough that a burst never floods.
|
|
80
|
+
*/
|
|
81
|
+
const MAX_CONCURRENT = 4;
|
|
82
|
+
let activeRequests = 0;
|
|
83
|
+
const pendingAcquirers: Array<() => void> = [];
|
|
84
|
+
|
|
85
|
+
function acquireSlot(): Promise<void> {
|
|
86
|
+
return new Promise((resolve) => {
|
|
87
|
+
if (activeRequests < MAX_CONCURRENT) {
|
|
88
|
+
activeRequests += 1;
|
|
89
|
+
resolve();
|
|
90
|
+
} else {
|
|
91
|
+
pendingAcquirers.push(resolve);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function releaseSlot(): void {
|
|
97
|
+
const next = pendingAcquirers.shift();
|
|
98
|
+
if (next) {
|
|
99
|
+
// Hand the slot straight to the next waiter — activeRequests stays put.
|
|
100
|
+
next();
|
|
101
|
+
} else {
|
|
102
|
+
activeRequests -= 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
72
106
|
export async function executeGraphQL<TData>(
|
|
73
107
|
options: GraphQLRequestOptions,
|
|
74
108
|
query: string,
|
|
@@ -88,12 +122,28 @@ export async function executeGraphQL<TData>(
|
|
|
88
122
|
};
|
|
89
123
|
const body = JSON.stringify({ query, variables });
|
|
90
124
|
|
|
125
|
+
// Serialize past the global concurrency cap before doing any network work,
|
|
126
|
+
// and always release the slot when this call settles (success or failure).
|
|
127
|
+
await acquireSlot();
|
|
128
|
+
try {
|
|
129
|
+
return await runWithRetries<TData>(url, headers, body);
|
|
130
|
+
} finally {
|
|
131
|
+
releaseSlot();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function runWithRetries<TData>(
|
|
136
|
+
url: string,
|
|
137
|
+
headers: Record<string, string>,
|
|
138
|
+
body: string
|
|
139
|
+
): Promise<TData> {
|
|
91
140
|
let lastError: Error = new Error('GraphQL request failed');
|
|
92
141
|
|
|
93
142
|
for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {
|
|
94
143
|
const canRetry = attempt < MAX_RETRIES;
|
|
95
144
|
// Exponential backoff with jitter before each retry (not the first attempt).
|
|
96
|
-
if (attempt > 0)
|
|
145
|
+
if (attempt > 0)
|
|
146
|
+
await sleep(Math.min(250 * 2 ** (attempt - 1), 2000) + Math.floor(Math.random() * 150));
|
|
97
147
|
|
|
98
148
|
const controller = new AbortController();
|
|
99
149
|
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|