@burdenoff/microfe-movethewheels 2026.930.5 → 2026.1010.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/dist/MoveTheWheelsRoot.js +177 -102
  2. package/dist/MoveTheWheelsRoutes.js +55 -11
  3. package/dist/_virtual/_rolldown/runtime.js +1 -1
  4. package/dist/components/ContainerEvidencePicker.js +143 -0
  5. package/dist/components/FreeTimeAgreementForm.js +496 -0
  6. package/dist/components/ReturnInstructionForm.js +108 -0
  7. package/dist/components/ReuseControls.js +91 -0
  8. package/dist/components/ReusePermissionForm.js +114 -0
  9. package/dist/components/ReuseProposalForm.js +455 -0
  10. package/dist/components/ReuseSourceFields.js +78 -0
  11. package/dist/components/consolidation/ConsolidationHistory.js +244 -0
  12. package/dist/components/consolidation/ConsolidationLotEditor.js +133 -0
  13. package/dist/components/consolidation/ConsolidationManifestWorkbench.js +143 -0
  14. package/dist/components/consolidation/ConsolidationPlanForm.js +172 -0
  15. package/dist/components/consolidation/ConsolidationPlanWorkbench.js +321 -0
  16. package/dist/components/consolidation/ConsolidationReportForm.js +94 -0
  17. package/dist/components/consolidation/ConsolidationReportsWorkbench.js +195 -0
  18. package/dist/components/consolidation/ConsolidationSummary.js +76 -0
  19. package/dist/components/consolidation/OriginalConsolidationHistory.js +112 -0
  20. package/dist/components/freight-cost/FreightDraftForm.js +213 -0
  21. package/dist/components/freight-cost/FreightFields.js +70 -0
  22. package/dist/components/freight-cost/FreightFxEditor.js +90 -0
  23. package/dist/components/freight-cost/FreightHistory.js +164 -0
  24. package/dist/components/freight-cost/FreightLineEditor.js +191 -0
  25. package/dist/components/freight-cost/FreightScopeEditor.js +72 -0
  26. package/dist/components/freight-cost/FreightTotals.js +66 -0
  27. package/dist/components/logistics-procedure/ProcedureDecisionForm.js +197 -0
  28. package/dist/components/logistics-procedure/ProcedureFields.js +31 -0
  29. package/dist/components/logistics-procedure/ProcedureHistory.js +177 -0
  30. package/dist/components/logistics-procedure/ProcedurePolicyForm.js +227 -0
  31. package/dist/components/logistics-procedure/ProcedurePolicyWorkbench.js +155 -0
  32. package/dist/components/logistics-procedure/ProcedureReviewWorkbench.js +221 -0
  33. package/dist/components/logistics-procedure/ProcedureRunWorkbench.js +190 -0
  34. package/dist/components/logistics-procedure/ProcedureSubjectPicker.js +130 -0
  35. package/dist/components/pending-pick/PendingPickDraft.js +84 -0
  36. package/dist/components/pending-pick/PendingPickHistory.js +113 -0
  37. package/dist/components/pending-pick/PickCapture.js +166 -0
  38. package/dist/components/pending-pick/PickLineSelection.js +111 -0
  39. package/dist/components/stock-binding/StockAssessmentDraft.js +48 -0
  40. package/dist/components/stock-binding/StockAssessmentHistory.js +61 -0
  41. package/dist/components/stock-binding/StockAssessmentSummary.js +199 -0
  42. package/dist/components/stock-binding/StockFactForm.js +232 -0
  43. package/dist/components/stock-observation/StockIssueForm.js +148 -0
  44. package/dist/components/stock-observation/StockIssueHistory.js +116 -0
  45. package/dist/components/stock-observation/StockIssueReadPanel.js +70 -0
  46. package/dist/components/trip-utilization/TripReportForm.js +118 -0
  47. package/dist/components/trip-utilization/TripReportHistory.js +54 -0
  48. package/dist/components/trip-utilization/TripReportSummary.js +216 -0
  49. package/dist/components/trip-utilization/TripSegmentFields.js +166 -0
  50. package/dist/generated/consolidation-operations.d.ts +1060 -0
  51. package/dist/generated/container-condition-operations.d.ts +868 -0
  52. package/dist/generated/container-operations.d.ts +356 -0
  53. package/dist/generated/empty-reuse-operations.d.ts +1578 -0
  54. package/dist/generated/free-time-operations.d.ts +938 -0
  55. package/dist/generated/freight-cost-operations.d.ts +716 -0
  56. package/dist/generated/logistics-procedure-operations.d.ts +938 -0
  57. package/dist/generated/pending-pick-operations.d.ts +1969 -0
  58. package/dist/generated/stock-binding-operations.d.ts +930 -0
  59. package/dist/generated/stock-observation-operations.d.ts +476 -0
  60. package/dist/generated/trip-utilization-operations.d.ts +651 -0
  61. package/dist/generated/wspace-operations.d.ts +143 -50
  62. package/dist/hooks/useConsolidationAction.js +119 -0
  63. package/dist/hooks/useContainerCondition.js +105 -0
  64. package/dist/hooks/useContainerLifecycle.js +192 -0
  65. package/dist/hooks/useEmptyReuseAction.js +45 -0
  66. package/dist/hooks/useFreightRecoveryAction.js +117 -0
  67. package/dist/hooks/useMultiModalShipments.js +1 -1
  68. package/dist/hooks/useProcedureAction.js +119 -0
  69. package/dist/hooks/useProcedureSelection.js +53 -0
  70. package/dist/hooks/useReuseRecoveryAction.js +116 -0
  71. package/dist/movethewheels/components/ContainerEvidencePicker.d.ts +10 -0
  72. package/dist/movethewheels/components/FreeTimeAgreementForm.d.ts +14 -0
  73. package/dist/movethewheels/components/ReturnInstructionForm.d.ts +8 -0
  74. package/dist/movethewheels/components/ReuseControls.d.ts +42 -0
  75. package/dist/movethewheels/components/ReusePermissionForm.d.ts +9 -0
  76. package/dist/movethewheels/components/ReuseProposalForm.d.ts +11 -0
  77. package/dist/movethewheels/components/ReuseSourceFields.d.ts +9 -0
  78. package/dist/movethewheels/components/consolidation/ConsolidationHistory.d.ts +13 -0
  79. package/dist/movethewheels/components/consolidation/ConsolidationLotEditor.d.ts +6 -0
  80. package/dist/movethewheels/components/consolidation/ConsolidationManifestWorkbench.d.ts +8 -0
  81. package/dist/movethewheels/components/consolidation/ConsolidationPlanForm.d.ts +8 -0
  82. package/dist/movethewheels/components/consolidation/ConsolidationPlanWorkbench.d.ts +5 -0
  83. package/dist/movethewheels/components/consolidation/ConsolidationReportForm.d.ts +9 -0
  84. package/dist/movethewheels/components/consolidation/ConsolidationReportsWorkbench.d.ts +7 -0
  85. package/dist/movethewheels/components/consolidation/ConsolidationSummary.d.ts +6 -0
  86. package/dist/movethewheels/components/consolidation/OriginalConsolidationHistory.d.ts +8 -0
  87. package/dist/movethewheels/components/freight-cost/FreightDraftForm.d.ts +8 -0
  88. package/dist/movethewheels/components/freight-cost/FreightFields.d.ts +23 -0
  89. package/dist/movethewheels/components/freight-cost/FreightFxEditor.d.ts +6 -0
  90. package/dist/movethewheels/components/freight-cost/FreightHistory.d.ts +5 -0
  91. package/dist/movethewheels/components/freight-cost/FreightLineEditor.d.ts +8 -0
  92. package/dist/movethewheels/components/freight-cost/FreightScopeEditor.d.ts +6 -0
  93. package/dist/movethewheels/components/freight-cost/FreightTotals.d.ts +6 -0
  94. package/dist/movethewheels/components/logistics-procedure/ProcedureDecisionForm.d.ts +20 -0
  95. package/dist/movethewheels/components/logistics-procedure/ProcedureFields.d.ts +17 -0
  96. package/dist/movethewheels/components/logistics-procedure/ProcedureHistory.d.ts +7 -0
  97. package/dist/movethewheels/components/logistics-procedure/ProcedurePolicyForm.d.ts +10 -0
  98. package/dist/movethewheels/components/logistics-procedure/ProcedurePolicyWorkbench.d.ts +5 -0
  99. package/dist/movethewheels/components/logistics-procedure/ProcedureReviewWorkbench.d.ts +5 -0
  100. package/dist/movethewheels/components/logistics-procedure/ProcedureRunWorkbench.d.ts +6 -0
  101. package/dist/movethewheels/components/logistics-procedure/ProcedureSubjectPicker.d.ts +7 -0
  102. package/dist/movethewheels/components/pending-pick/PendingPickDraft.d.ts +16 -0
  103. package/dist/movethewheels/components/pending-pick/PendingPickHistory.d.ts +5 -0
  104. package/dist/movethewheels/components/pending-pick/PickCapture.d.ts +6 -0
  105. package/dist/movethewheels/components/pending-pick/PickLineSelection.d.ts +17 -0
  106. package/dist/movethewheels/components/stock-binding/StockAssessmentDraft.d.ts +13 -0
  107. package/dist/movethewheels/components/stock-binding/StockAssessmentHistory.d.ts +18 -0
  108. package/dist/movethewheels/components/stock-binding/StockAssessmentSummary.d.ts +9 -0
  109. package/dist/movethewheels/components/stock-binding/StockFactForm.d.ts +6 -0
  110. package/dist/movethewheels/components/stock-observation/StockIssueForm.d.ts +7 -0
  111. package/dist/movethewheels/components/stock-observation/StockIssueHistory.d.ts +7 -0
  112. package/dist/movethewheels/components/stock-observation/StockIssueReadPanel.d.ts +5 -0
  113. package/dist/movethewheels/components/trip-utilization/TripReportForm.d.ts +6 -0
  114. package/dist/movethewheels/components/trip-utilization/TripReportHistory.d.ts +14 -0
  115. package/dist/movethewheels/components/trip-utilization/TripReportSummary.d.ts +5 -0
  116. package/dist/movethewheels/components/trip-utilization/TripSegmentFields.d.ts +9 -0
  117. package/dist/movethewheels/hooks/useConsolidationAction.d.ts +19 -0
  118. package/dist/movethewheels/hooks/useContainerCondition.d.ts +21 -0
  119. package/dist/movethewheels/hooks/useContainerLifecycle.d.ts +40 -0
  120. package/dist/movethewheels/hooks/useEmptyReuseAction.d.ts +14 -0
  121. package/dist/movethewheels/hooks/useFreightRecoveryAction.d.ts +23 -0
  122. package/dist/movethewheels/hooks/useProcedureAction.d.ts +18 -0
  123. package/dist/movethewheels/hooks/useProcedureSelection.d.ts +51 -0
  124. package/dist/movethewheels/hooks/useReuseRecoveryAction.d.ts +18 -0
  125. package/dist/movethewheels/pages/ConsolidationPage.d.ts +1 -0
  126. package/dist/movethewheels/pages/ContainerConditionPage.d.ts +1 -0
  127. package/dist/movethewheels/pages/ContainersPage.d.ts +2 -0
  128. package/dist/movethewheels/pages/EmptyReusePage.d.ts +1 -0
  129. package/dist/movethewheels/pages/FreeTimePage.d.ts +1 -0
  130. package/dist/movethewheels/pages/FreightEstimatePage.d.ts +1 -0
  131. package/dist/movethewheels/pages/LogisticsProceduresPage.d.ts +1 -0
  132. package/dist/movethewheels/pages/PendingPickPage.d.ts +1 -0
  133. package/dist/movethewheels/pages/StockBindingPage.d.ts +1 -0
  134. package/dist/movethewheels/pages/StockObservationsPage.d.ts +1 -0
  135. package/dist/movethewheels/pages/TripUtilizationPage.d.ts +1 -0
  136. package/dist/movethewheels/utils/consolidationHistoryTarget.d.ts +12 -0
  137. package/dist/movethewheels/utils/consolidationInput.d.ts +15 -0
  138. package/dist/movethewheels/utils/consolidationLot.d.ts +3 -0
  139. package/dist/movethewheels/utils/consolidationPins.d.ts +20 -0
  140. package/dist/movethewheels/utils/consolidationRecovery.d.ts +5 -0
  141. package/dist/movethewheels/utils/consolidationReportHead.d.ts +5 -0
  142. package/dist/movethewheels/utils/freeTimeDate.d.ts +1 -0
  143. package/dist/movethewheels/utils/freightAcknowledgement.d.ts +2 -0
  144. package/dist/movethewheels/utils/freightDraft.d.ts +36 -0
  145. package/dist/movethewheels/utils/freightRecovery.d.ts +5 -0
  146. package/dist/movethewheels/utils/graphqlClient.d.ts +2 -1
  147. package/dist/movethewheels/utils/pendingPickDraft.d.ts +8 -0
  148. package/dist/movethewheels/utils/procedureInput.d.ts +18 -0
  149. package/dist/movethewheels/utils/procedureRecovery.d.ts +5 -0
  150. package/dist/movethewheels/utils/reuseAttempt.d.ts +7 -0
  151. package/dist/movethewheels/utils/reuseForm.d.ts +6 -0
  152. package/dist/movethewheels/utils/reuseRecovery.d.ts +26 -0
  153. package/dist/movethewheels/utils/stockBindingForm.d.ts +23 -0
  154. package/dist/movethewheels/utils/stockBindingLabels.d.ts +10 -0
  155. package/dist/movethewheels/utils/stockObservationForm.d.ts +5 -0
  156. package/dist/movethewheels/utils/tripDraftContext.d.ts +25 -0
  157. package/dist/movethewheels/utils/tripUtilizationForm.d.ts +6 -0
  158. package/dist/node_modules/@react-leaflet/core/lib/component.js +5 -5
  159. package/dist/node_modules/fast-equals/dist/es/index.js +87 -74
  160. package/dist/node_modules/leaflet/dist/leaflet-src.js +8 -5
  161. package/dist/node_modules/lodash/_Stack.js +2 -1
  162. package/dist/node_modules/lucide-react/dist/esm/icons/clipboard-list.js +35 -0
  163. package/dist/node_modules/lucide-react/dist/esm/icons/repeat-2.js +22 -0
  164. package/dist/node_modules/react-leaflet/lib/MapContainer.js +3 -3
  165. package/dist/node_modules/react-smooth/es6/Animate.js +2 -2
  166. package/dist/node_modules/recharts/es6/cartesian/Area.js +13 -13
  167. package/dist/node_modules/recharts/es6/cartesian/Bar.js +9 -9
  168. package/dist/node_modules/recharts/es6/cartesian/Brush.js +12 -12
  169. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +7 -7
  170. package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +13 -13
  171. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +4 -4
  172. package/dist/node_modules/recharts/es6/cartesian/Line.js +10 -10
  173. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +3 -3
  174. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +3 -3
  175. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +4 -4
  176. package/dist/node_modules/recharts/es6/cartesian/XAxis.js +3 -3
  177. package/dist/node_modules/recharts/es6/cartesian/YAxis.js +3 -3
  178. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +1 -1
  179. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +22 -22
  180. package/dist/node_modules/recharts/es6/component/Cursor.js +1 -1
  181. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +11 -11
  182. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +6 -6
  183. package/dist/node_modules/recharts/es6/component/Label.js +14 -14
  184. package/dist/node_modules/recharts/es6/component/LabelList.js +6 -6
  185. package/dist/node_modules/recharts/es6/component/Legend.js +5 -5
  186. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +3 -3
  187. package/dist/node_modules/recharts/es6/component/Text.js +2 -2
  188. package/dist/node_modules/recharts/es6/component/Tooltip.js +3 -3
  189. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +2 -2
  190. package/dist/node_modules/recharts/es6/container/Layer.js +2 -2
  191. package/dist/node_modules/recharts/es6/container/Surface.js +2 -2
  192. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +2 -2
  193. package/dist/node_modules/recharts/es6/polar/Pie.js +13 -13
  194. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +8 -8
  195. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +6 -6
  196. package/dist/node_modules/recharts/es6/shape/Cross.js +1 -1
  197. package/dist/node_modules/recharts/es6/shape/Curve.js +1 -1
  198. package/dist/node_modules/recharts/es6/shape/Dot.js +1 -1
  199. package/dist/node_modules/recharts/es6/shape/Polygon.js +4 -4
  200. package/dist/node_modules/recharts/es6/shape/Rectangle.js +4 -4
  201. package/dist/node_modules/recharts/es6/shape/Sector.js +1 -1
  202. package/dist/node_modules/recharts/es6/shape/Symbols.js +1 -1
  203. package/dist/node_modules/recharts/es6/shape/Trapezoid.js +4 -4
  204. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +9 -9
  205. package/dist/node_modules/recharts/es6/util/BarUtils.js +1 -1
  206. package/dist/node_modules/recharts/es6/util/CartesianUtils.js +1 -1
  207. package/dist/node_modules/recharts/es6/util/PolarUtils.js +1 -1
  208. package/dist/node_modules/recharts/es6/util/ReactUtils.js +2 -2
  209. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +1 -1
  210. package/dist/node_modules/recharts/es6/util/types.js +1 -1
  211. package/dist/node_modules/{react-is → recharts/node_modules/react-is}/cjs/react-is.development.js +2 -2
  212. package/dist/node_modules/{react-is → recharts/node_modules/react-is}/cjs/react-is.production.min.js +2 -2
  213. package/dist/node_modules/{react-is → recharts/node_modules/react-is}/index.js +2 -2
  214. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +97 -18
  215. package/dist/node_modules/zustand/esm/middleware.js +2 -2
  216. package/dist/pages/ConsolidationPage.js +76 -0
  217. package/dist/pages/ContainerConditionPage.js +972 -0
  218. package/dist/pages/ContainersPage.js +522 -0
  219. package/dist/pages/EmptyReusePage.js +777 -0
  220. package/dist/pages/FreeTimePage.js +657 -0
  221. package/dist/pages/FreightEstimatePage.js +284 -0
  222. package/dist/pages/LogisticsProceduresPage.js +100 -0
  223. package/dist/pages/PendingPickPage.js +155 -0
  224. package/dist/pages/StockBindingPage.js +236 -0
  225. package/dist/pages/StockObservationsPage.js +168 -0
  226. package/dist/pages/TripUtilizationPage.js +227 -0
  227. package/dist/src/generated/consolidation-operations.js +505 -0
  228. package/dist/src/generated/container-condition-operations.js +208 -0
  229. package/dist/src/generated/container-operations.js +101 -0
  230. package/dist/src/generated/empty-reuse-operations.js +749 -0
  231. package/dist/src/generated/free-time-operations.js +235 -0
  232. package/dist/src/generated/freight-cost-operations.js +325 -0
  233. package/dist/src/generated/logistics-procedure-operations.js +362 -0
  234. package/dist/src/generated/pending-pick-operations.js +1128 -0
  235. package/dist/src/generated/stock-binding-operations.js +175 -0
  236. package/dist/src/generated/stock-observation-operations.js +93 -0
  237. package/dist/src/generated/trip-utilization-operations.js +140 -0
  238. package/dist/src/generated/wspace-operations.js +708 -0
  239. package/dist/utils/consolidationHistoryTarget.js +27 -0
  240. package/dist/utils/consolidationInput.js +21 -0
  241. package/dist/utils/consolidationLot.js +29 -0
  242. package/dist/utils/consolidationPins.js +13 -0
  243. package/dist/utils/consolidationRecovery.js +40 -0
  244. package/dist/utils/consolidationReportHead.js +18 -0
  245. package/dist/utils/freeTimeDate.js +26 -0
  246. package/dist/utils/freightAcknowledgement.js +8 -0
  247. package/dist/utils/freightDraft.js +125 -0
  248. package/dist/utils/freightRecovery.js +36 -0
  249. package/dist/utils/graphqlClient.js +28 -28
  250. package/dist/utils/pendingPickDraft.js +46 -0
  251. package/dist/utils/procedureInput.js +43 -0
  252. package/dist/utils/procedureRecovery.js +42 -0
  253. package/dist/utils/reuseAttempt.js +20 -0
  254. package/dist/utils/reuseForm.js +25 -0
  255. package/dist/utils/reuseRecovery.js +71 -0
  256. package/dist/utils/stockBindingForm.js +142 -0
  257. package/dist/utils/stockBindingLabels.js +23 -0
  258. package/dist/utils/stockObservationForm.js +55 -0
  259. package/dist/utils/tripDraftContext.js +19 -0
  260. package/dist/utils/tripUtilizationForm.js +60 -0
  261. package/package.json +20 -5
  262. package/src/generated/consolidation-operations.ts +1138 -0
  263. package/src/generated/container-condition-operations.ts +771 -0
  264. package/src/generated/container-operations.ts +376 -0
  265. package/src/generated/empty-reuse-operations.ts +1648 -0
  266. package/src/generated/free-time-operations.ts +814 -0
  267. package/src/generated/freight-cost-operations.ts +753 -0
  268. package/src/generated/logistics-procedure-operations.ts +1047 -0
  269. package/src/generated/pending-pick-operations.ts +1508 -0
  270. package/src/generated/stock-binding-operations.ts +631 -0
  271. package/src/generated/stock-observation-operations.ts +373 -0
  272. package/src/generated/trip-utilization-operations.ts +500 -0
  273. package/src/generated/wspace-operations.ts +116 -0
  274. package/src/movethewheels/MoveTheWheelsRoot.tsx +79 -0
  275. package/src/movethewheels/MoveTheWheelsRoutes.tsx +22 -0
  276. package/src/movethewheels/components/ContainerEvidencePicker.tsx +146 -0
  277. package/src/movethewheels/components/FreeTimeAgreementForm.tsx +483 -0
  278. package/src/movethewheels/components/ReturnInstructionForm.tsx +102 -0
  279. package/src/movethewheels/components/ReuseControls.tsx +138 -0
  280. package/src/movethewheels/components/ReusePermissionForm.tsx +123 -0
  281. package/src/movethewheels/components/ReuseProposalForm.tsx +484 -0
  282. package/src/movethewheels/components/ReuseSourceFields.tsx +80 -0
  283. package/src/movethewheels/components/consolidation/ConsolidationHistory.tsx +159 -0
  284. package/src/movethewheels/components/consolidation/ConsolidationLotEditor.tsx +144 -0
  285. package/src/movethewheels/components/consolidation/ConsolidationManifestWorkbench.tsx +168 -0
  286. package/src/movethewheels/components/consolidation/ConsolidationPlanForm.tsx +185 -0
  287. package/src/movethewheels/components/consolidation/ConsolidationPlanWorkbench.tsx +395 -0
  288. package/src/movethewheels/components/consolidation/ConsolidationReportForm.tsx +124 -0
  289. package/src/movethewheels/components/consolidation/ConsolidationReportsWorkbench.tsx +233 -0
  290. package/src/movethewheels/components/consolidation/ConsolidationSummary.tsx +84 -0
  291. package/src/movethewheels/components/consolidation/OriginalConsolidationHistory.tsx +133 -0
  292. package/src/movethewheels/components/freight-cost/FreightDraftForm.tsx +224 -0
  293. package/src/movethewheels/components/freight-cost/FreightFields.tsx +91 -0
  294. package/src/movethewheels/components/freight-cost/FreightFxEditor.tsx +98 -0
  295. package/src/movethewheels/components/freight-cost/FreightHistory.tsx +91 -0
  296. package/src/movethewheels/components/freight-cost/FreightLineEditor.tsx +192 -0
  297. package/src/movethewheels/components/freight-cost/FreightScopeEditor.tsx +64 -0
  298. package/src/movethewheels/components/freight-cost/FreightTotals.tsx +68 -0
  299. package/src/movethewheels/components/logistics-procedure/ProcedureDecisionForm.tsx +204 -0
  300. package/src/movethewheels/components/logistics-procedure/ProcedureFields.tsx +43 -0
  301. package/src/movethewheels/components/logistics-procedure/ProcedureHistory.tsx +102 -0
  302. package/src/movethewheels/components/logistics-procedure/ProcedurePolicyForm.tsx +226 -0
  303. package/src/movethewheels/components/logistics-procedure/ProcedurePolicyWorkbench.tsx +174 -0
  304. package/src/movethewheels/components/logistics-procedure/ProcedureReviewWorkbench.tsx +278 -0
  305. package/src/movethewheels/components/logistics-procedure/ProcedureRunWorkbench.tsx +292 -0
  306. package/src/movethewheels/components/logistics-procedure/ProcedureSubjectPicker.tsx +111 -0
  307. package/src/movethewheels/components/pending-pick/PendingPickDraft.tsx +82 -0
  308. package/src/movethewheels/components/pending-pick/PendingPickHistory.tsx +93 -0
  309. package/src/movethewheels/components/pending-pick/PickCapture.tsx +70 -0
  310. package/src/movethewheels/components/pending-pick/PickLineSelection.tsx +130 -0
  311. package/src/movethewheels/components/stock-binding/StockAssessmentDraft.tsx +52 -0
  312. package/src/movethewheels/components/stock-binding/StockAssessmentHistory.tsx +56 -0
  313. package/src/movethewheels/components/stock-binding/StockAssessmentSummary.tsx +108 -0
  314. package/src/movethewheels/components/stock-binding/StockFactForm.tsx +186 -0
  315. package/src/movethewheels/components/stock-observation/StockIssueForm.tsx +103 -0
  316. package/src/movethewheels/components/stock-observation/StockIssueHistory.tsx +96 -0
  317. package/src/movethewheels/components/stock-observation/StockIssueReadPanel.tsx +72 -0
  318. package/src/movethewheels/components/trip-utilization/TripReportForm.tsx +116 -0
  319. package/src/movethewheels/components/trip-utilization/TripReportHistory.tsx +51 -0
  320. package/src/movethewheels/components/trip-utilization/TripReportSummary.tsx +127 -0
  321. package/src/movethewheels/components/trip-utilization/TripSegmentFields.tsx +118 -0
  322. package/src/movethewheels/hooks/useConsolidationAction.ts +196 -0
  323. package/src/movethewheels/hooks/useContainerCondition.ts +129 -0
  324. package/src/movethewheels/hooks/useContainerLifecycle.ts +291 -0
  325. package/src/movethewheels/hooks/useEmptyReuseAction.ts +72 -0
  326. package/src/movethewheels/hooks/useFreightRecoveryAction.ts +201 -0
  327. package/src/movethewheels/hooks/useMultiModalShipments.ts +2 -1
  328. package/src/movethewheels/hooks/useProcedureAction.ts +196 -0
  329. package/src/movethewheels/hooks/useProcedureSelection.ts +75 -0
  330. package/src/movethewheels/hooks/useReuseRecoveryAction.ts +192 -0
  331. package/src/movethewheels/pages/ConsolidationPage.tsx +70 -0
  332. package/src/movethewheels/pages/ContainerConditionPage.tsx +959 -0
  333. package/src/movethewheels/pages/ContainersPage.tsx +490 -0
  334. package/src/movethewheels/pages/EmptyReusePage.tsx +823 -0
  335. package/src/movethewheels/pages/FreeTimePage.tsx +720 -0
  336. package/src/movethewheels/pages/FreightEstimatePage.tsx +353 -0
  337. package/src/movethewheels/pages/LogisticsProceduresPage.tsx +86 -0
  338. package/src/movethewheels/pages/PendingPickPage.tsx +226 -0
  339. package/src/movethewheels/pages/StockBindingPage.tsx +299 -0
  340. package/src/movethewheels/pages/StockObservationsPage.tsx +181 -0
  341. package/src/movethewheels/pages/TripUtilizationPage.tsx +315 -0
  342. package/src/movethewheels/utils/consolidationHistoryTarget.ts +39 -0
  343. package/src/movethewheels/utils/consolidationInput.ts +70 -0
  344. package/src/movethewheels/utils/consolidationLot.ts +24 -0
  345. package/src/movethewheels/utils/consolidationPins.ts +52 -0
  346. package/src/movethewheels/utils/consolidationRecovery.ts +88 -0
  347. package/src/movethewheels/utils/consolidationReportHead.ts +29 -0
  348. package/src/movethewheels/utils/freeTimeDate.ts +31 -0
  349. package/src/movethewheels/utils/freightAcknowledgement.ts +31 -0
  350. package/src/movethewheels/utils/freightDraft.ts +170 -0
  351. package/src/movethewheels/utils/freightRecovery.ts +79 -0
  352. package/src/movethewheels/utils/graphqlClient.ts +14 -5
  353. package/src/movethewheels/utils/pendingPickDraft.ts +61 -0
  354. package/src/movethewheels/utils/procedureInput.ts +98 -0
  355. package/src/movethewheels/utils/procedureRecovery.ts +92 -0
  356. package/src/movethewheels/utils/reuseAttempt.ts +29 -0
  357. package/src/movethewheels/utils/reuseForm.ts +30 -0
  358. package/src/movethewheels/utils/reuseRecovery.ts +151 -0
  359. package/src/movethewheels/utils/stockBindingForm.ts +209 -0
  360. package/src/movethewheels/utils/stockBindingLabels.ts +41 -0
  361. package/src/movethewheels/utils/stockObservationForm.ts +73 -0
  362. package/src/movethewheels/utils/tripDraftContext.ts +61 -0
  363. package/src/movethewheels/utils/tripUtilizationForm.ts +105 -0
  364. package/src/operations/condition/container-condition.graphql +41 -0
  365. package/src/operations/consolidation/consolidation.graphql +490 -0
  366. package/src/operations/container/container-lifecycle.graphql +80 -0
  367. package/src/operations/empty-reuse/empty-reuse.graphql +737 -0
  368. package/src/operations/free-time/free-time.graphql +47 -0
  369. package/src/operations/freight-cost/freight.graphql +6 -0
  370. package/src/operations/logistics-procedure/procedure.graphql +15 -0
  371. package/src/operations/pending-pick/pending-pick.graphql +1122 -0
  372. package/src/operations/stock-binding/stock-binding.graphql +160 -0
  373. package/src/operations/stock-observation/stock-observation.graphql +20 -0
  374. package/src/operations/trip-utilization/trip-utilization.graphql +126 -0
  375. package/src/operations/wspace/container-evidence.graphql +6 -0
@@ -0,0 +1,299 @@
1
+ import { useRef, useState } from 'react';
2
+ import { ClipboardList } from 'lucide-react';
3
+ import { PageLayout } from '../components/PageLayout';
4
+ import { Button } from '../components/ui';
5
+ import { PinnedSelect, ReusePager, ReuseState, reuseCard } from '../components/ReuseControls';
6
+ import { StockAssessmentDraft } from '../components/stock-binding/StockAssessmentDraft';
7
+ import { StockAssessmentHistory } from '../components/stock-binding/StockAssessmentHistory';
8
+ import { useMoveTheWheels } from '../providers/MoveTheWheelsProvider';
9
+ import { useConditionApi, useConditionQuery } from '../hooks/useContainerCondition';
10
+ import { useEmptyReuseAction } from '../hooks/useEmptyReuseAction';
11
+ import {
12
+ stockContextLabel,
13
+ stockDraftPin,
14
+ stockContextMatches,
15
+ inputForStockDraft,
16
+ type StockDraftPin,
17
+ type StockFactDraft,
18
+ } from '../utils/stockBindingForm';
19
+ import {
20
+ StockBindingInventoryDocument,
21
+ StockBindingContextDocument,
22
+ StockBindingHistoryDocument,
23
+ StockBindingExactDocument,
24
+ RecordStockBindingDocument,
25
+ type StockBindingInventoryQuery,
26
+ type StockBindingContextQuery,
27
+ type StockBindingHistoryQuery,
28
+ type StockBindingExactQuery,
29
+ type RecordStockBindingMutation,
30
+ type StockAssessmentFragment,
31
+ } from '../../generated/stock-binding-operations';
32
+ export default function StockBindingPage() {
33
+ const { workspaceId, tenantId, currentUser, apiGatewayUrl } = useMoveTheWheels();
34
+ return (
35
+ <PageLayout
36
+ title="Inventory source assessments"
37
+ subtitle="Recorded units, item labels and lot facts."
38
+ icon={<ClipboardList aria-hidden="true" />}
39
+ >
40
+ <StockBindingWorkbench
41
+ key={`${workspaceId}:${tenantId}:${currentUser?.id}:${apiGatewayUrl}`}
42
+ />
43
+ </PageLayout>
44
+ );
45
+ }
46
+ function StockBindingWorkbench() {
47
+ const [inventoryOffset, setInventoryOffset] = useState(0);
48
+ const [historyOffset, setHistoryOffset] = useState(0);
49
+ const [selection, setSelection] = useState<{ id: string; label: string } | null>(null);
50
+ const [pin, setPin] = useState<(StockDraftPin & { generation: string }) | null>(null);
51
+ const [mismatch, setMismatch] = useState(false);
52
+ const [selected, setSelected] = useState<StockAssessmentFragment | null>(null);
53
+ const [selectedId, setSelectedId] = useState<string | null>(null);
54
+ const [checking, setChecking] = useState(false);
55
+ const checkingNow = useRef(false);
56
+ const [error, setError] = useState<string | null>(null);
57
+ const request = useConditionApi();
58
+ const actions = useEmptyReuseAction();
59
+ const inventory = useConditionQuery<StockBindingInventoryQuery>(
60
+ StockBindingInventoryDocument,
61
+ { pagination: { limit: 25, offset: inventoryOffset } },
62
+ actions.revision
63
+ );
64
+ const current = useConditionQuery<StockBindingContextQuery>(
65
+ StockBindingContextDocument,
66
+ selection ? { id: selection.id } : null,
67
+ actions.revision
68
+ );
69
+ const head = useConditionQuery<StockBindingHistoryQuery>(
70
+ StockBindingHistoryDocument,
71
+ selection ? { inventoryItemId: selection.id, pagination: { limit: 1, offset: 0 } } : null,
72
+ actions.revision
73
+ );
74
+ const history = useConditionQuery<StockBindingHistoryQuery>(
75
+ StockBindingHistoryDocument,
76
+ selection
77
+ ? { inventoryItemId: selection.id, pagination: { limit: 25, offset: historyOffset } }
78
+ : null,
79
+ actions.revision
80
+ );
81
+ const exact = useConditionQuery<StockBindingExactQuery>(
82
+ StockBindingExactDocument,
83
+ selection && selectedId ? { inventoryItemId: selection.id, id: selectedId } : null,
84
+ actions.revision
85
+ );
86
+ const row = current.data?.inventoryItem;
87
+ const predecessor = head.data?.mtwStockBindingAssessmentPage.items[0] ?? null;
88
+ const contextReady =
89
+ !!row && !!head.data && (!head.data.mtwStockBindingAssessmentPage.total || !!predecessor);
90
+ const busy = actions.busy || checking;
91
+ const displayedMismatch =
92
+ !!pin && !!current.data && !!head.data && !stockContextMatches(pin, row, predecessor);
93
+ const options =
94
+ inventory.data?.inventoryItems.map((item) => ({
95
+ id: item.id,
96
+ label: stockContextLabel(item),
97
+ })) ?? [];
98
+ if (selection && !options.some((item) => item.id === selection.id))
99
+ options.unshift({ ...selection, label: `${selection.label} — selected outside this page` });
100
+ const inventoryPage = inventory.data
101
+ ? {
102
+ total: inventory.data.inventoryItemsCount,
103
+ limit: 25,
104
+ offset: inventoryOffset,
105
+ hasMore:
106
+ inventoryOffset + inventory.data.inventoryItems.length <
107
+ inventory.data.inventoryItemsCount,
108
+ nextOffset: inventoryOffset + 25,
109
+ }
110
+ : undefined;
111
+ const record = async (draft: StockFactDraft) => {
112
+ if (checkingNow.current) return;
113
+ if (!pin || actions.uncertain)
114
+ throw new Error(
115
+ 'Review a new draft context or resolve the original uncertain request first.'
116
+ );
117
+ const captured = pin;
118
+ checkingNow.current = true;
119
+ setChecking(true);
120
+ setError(null);
121
+ try {
122
+ const fresh = await request<StockBindingContextQuery>(StockBindingContextDocument, {
123
+ id: captured.inventoryItemId,
124
+ });
125
+ const latest = await request<StockBindingHistoryQuery>(StockBindingHistoryDocument, {
126
+ inventoryItemId: captured.inventoryItemId,
127
+ pagination: { limit: 1, offset: 0 },
128
+ });
129
+ const latestPage = latest.mtwStockBindingAssessmentPage;
130
+ if (latestPage.total > 0 && !latestPage.items[0])
131
+ throw new Error('Last recorded assessment is unavailable.');
132
+ const latestPredecessor = latestPage.items[0] ?? null;
133
+ if (!stockContextMatches(captured, fresh.inventoryItem, latestPredecessor)) setMismatch(true);
134
+ const input = inputForStockDraft(draft, captured, fresh.inventoryItem, latestPredecessor);
135
+ const result = await actions.run<RecordStockBindingMutation>(
136
+ RecordStockBindingDocument,
137
+ input,
138
+ 'Reported facts recorded.'
139
+ );
140
+ if (result) {
141
+ setSelected(result.recordMtwStockBindingAssessment);
142
+ setSelectedId(null);
143
+ setHistoryOffset(0);
144
+ setPin(null);
145
+ }
146
+ } catch (failure) {
147
+ setError(
148
+ failure instanceof Error
149
+ ? failure.message
150
+ : 'Unable to verify the captured inventory context.'
151
+ );
152
+ throw failure;
153
+ } finally {
154
+ checkingNow.current = false;
155
+ setChecking(false);
156
+ }
157
+ };
158
+ const start = () => {
159
+ if (!contextReady || !row) return;
160
+ try {
161
+ setPin({ ...stockDraftPin(row, predecessor), generation: crypto.randomUUID() });
162
+ setMismatch(false);
163
+ setError(null);
164
+ } catch (failure) {
165
+ setError(failure instanceof Error ? failure.message : 'Current context is unavailable.');
166
+ }
167
+ };
168
+ return (
169
+ <div className="min-w-0 space-y-6 break-words">
170
+ <p className="rounded border p-4 text-sm">
171
+ Record the units, labels and lot facts reported for this stock line. Review any missing
172
+ facts before planning a pick. This page records source history; picking remains a separate
173
+ workflow.
174
+ </p>
175
+ <section className={reuseCard} aria-label="Choose current inventory context">
176
+ <h2 className="text-lg font-semibold">Inventory line and current owners</h2>
177
+ <PinnedSelect
178
+ label="Warehouse / cargo SKU / bin"
179
+ value={selection?.id ?? ''}
180
+ disabled={busy || actions.uncertain}
181
+ options={options}
182
+ onChange={(id) => {
183
+ const item = inventory.data?.inventoryItems.find((value) => value.id === id);
184
+ setSelection(item ? { id: item.id, label: stockContextLabel(item) } : null);
185
+ setPin(null);
186
+ setMismatch(false);
187
+ setSelected(null);
188
+ setSelectedId(null);
189
+ setHistoryOffset(0);
190
+ setError(null);
191
+ actions.discardAttempt();
192
+ }}
193
+ />
194
+ <ReuseState {...inventory} />
195
+ <ReusePager
196
+ page={inventoryPage}
197
+ offset={inventoryOffset}
198
+ onChange={setInventoryOffset}
199
+ busy={busy || inventory.loading}
200
+ />
201
+ <ReuseState {...current} />
202
+ <ReuseState {...head} />
203
+ {row && (
204
+ <div className="space-y-2">
205
+ <p>
206
+ {stockContextLabel(row)}. Warehouse status {row.warehouse?.status ?? 'UNKNOWN'}; bin
207
+ status{' '}
208
+ {row.locationId === null ? 'Unbinned' : (row.location?.status ?? 'Unavailable')}.
209
+ </p>
210
+ <p>
211
+ Current balance: on hand {row.onHand}, available {row.available}, allocated{' '}
212
+ {row.allocated}, damaged {row.damaged}.
213
+ </p>
214
+
215
+ <p>
216
+ Last recorded assessment{' '}
217
+ {predecessor
218
+ ? `version ${predecessor.version}, effective ${predecessor.effectiveAt}`
219
+ : 'none'}
220
+ . Future effective dates stay in recorded order.
221
+ </p>
222
+ </div>
223
+ )}
224
+ {selection && !row && !current.loading && (
225
+ <p>
226
+ This stock line is unavailable for new facts. You can still read its recorded history.
227
+ </p>
228
+ )}
229
+ <Button
230
+ type="button"
231
+ variant="outline"
232
+ disabled={busy}
233
+ onClick={() => {
234
+ setMismatch(false);
235
+ setError(null);
236
+ actions.refresh();
237
+ }}
238
+ >
239
+ Refresh current context and history
240
+ </Button>
241
+ </section>
242
+ {selection && (
243
+ <>
244
+ <StockAssessmentDraft
245
+ pin={pin}
246
+ mismatch={mismatch || displayedMismatch}
247
+ uncertain={actions.uncertain}
248
+ startDisabled={
249
+ busy ||
250
+ actions.uncertain ||
251
+ mismatch ||
252
+ current.loading ||
253
+ head.loading ||
254
+ !contextReady
255
+ }
256
+ formDisabled={
257
+ busy || actions.uncertain || current.loading || head.loading || !contextReady
258
+ }
259
+ onStart={start}
260
+ onSubmit={record}
261
+ />
262
+ <StockAssessmentHistory
263
+ current={current.loading || current.error ? null : row}
264
+ query={history}
265
+ offset={historyOffset}
266
+ onPage={setHistoryOffset}
267
+ busy={busy}
268
+ selected={selectedId ? (exact.data?.mtwStockBindingAssessment ?? null) : selected}
269
+ onSelect={(item) => {
270
+ setSelected(null);
271
+ setSelectedId(item.id);
272
+ }}
273
+ />
274
+ {selectedId && <ReuseState {...exact} />}
275
+ </>
276
+ )}
277
+ {error && <p role="alert">{error}</p>}
278
+ {actions.error && <p role="alert">{actions.error}</p>}
279
+ {actions.notice && <p role="status">{actions.notice}</p>}
280
+ {actions.uncertain && (
281
+ <div className="space-y-3 rounded border p-4">
282
+ <p>
283
+ Check refreshed history first. Retry sends the same submitted facts for the original
284
+ stock line. This retry is available until you leave or reload this page.
285
+ </p>
286
+ <Button type="button" variant="outline" disabled={busy} onClick={actions.refresh}>
287
+ Refresh assessment history
288
+ </Button>
289
+ <Button type="button" disabled={busy} onClick={actions.retryOriginal}>
290
+ Retry original request
291
+ </Button>
292
+ <Button type="button" variant="outline" disabled={busy} onClick={actions.discardAttempt}>
293
+ Discard retry after checking history
294
+ </Button>
295
+ </div>
296
+ )}
297
+ </div>
298
+ );
299
+ }
@@ -0,0 +1,181 @@
1
+ import { useState } from 'react';
2
+ import { ClipboardList } from 'lucide-react';
3
+ import { PageLayout } from '../components/PageLayout';
4
+ import { Button, Input } from '../components/ui';
5
+ import { PinnedSelect, ReusePager, ReuseState, reuseCard } from '../components/ReuseControls';
6
+ import { StockIssueForm } from '../components/stock-observation/StockIssueForm';
7
+ import { StockIssueReadPanel } from '../components/stock-observation/StockIssueReadPanel';
8
+ import { useMoveTheWheels } from '../providers/MoveTheWheelsProvider';
9
+ import { useConditionQuery } from '../hooks/useContainerCondition';
10
+ import { useEmptyReuseAction } from '../hooks/useEmptyReuseAction';
11
+ import {
12
+ ObservationInventoryDocument,
13
+ RecordStockIssueDocument,
14
+ type ObservationInventoryQuery,
15
+ type RecordStockIssueMutation,
16
+ type RecordMtwStockObservationInput,
17
+ } from '../../generated/stock-observation-operations';
18
+
19
+ export default function StockObservationsPage() {
20
+ const { workspaceId, tenantId, currentUser, apiGatewayUrl } = useMoveTheWheels();
21
+ return (
22
+ <PageLayout
23
+ title="Reported stock issues"
24
+ subtitle="Record an unresolved operational observation."
25
+ icon={<ClipboardList aria-hidden="true" />}
26
+ >
27
+ <p className="mb-4 text-sm">
28
+ Changing workspace or user clears this draft. Check recorded history before starting again.
29
+ </p>
30
+ <ObservationWorkbench
31
+ key={`${workspaceId}:${tenantId}:${currentUser?.id}:${apiGatewayUrl}`}
32
+ />
33
+ </PageLayout>
34
+ );
35
+ }
36
+ function ObservationWorkbench() {
37
+ const actions = useEmptyReuseAction();
38
+ const [offset, setOffset] = useState(0);
39
+ const [selection, setSelection] = useState<{ id: string; label: string } | null>(null);
40
+ const [knownId, setKnownId] = useState('');
41
+ const [generation, setGeneration] = useState(0);
42
+ const inventory = useConditionQuery<ObservationInventoryQuery>(
43
+ ObservationInventoryDocument,
44
+ { pagination: { limit: 25, offset } },
45
+ actions.revision
46
+ );
47
+ const locked = actions.busy || actions.uncertain;
48
+ const options =
49
+ inventory.data?.inventoryItems.map((item) => ({
50
+ id: item.id,
51
+ label: `${item.cargoItem?.name ?? 'Item name not recorded'} · ${item.cargoItem?.sku ?? 'SKU not recorded'} · ${item.warehouse?.name ?? 'Warehouse not recorded'} · ${item.location?.locationCode ?? 'No bin'} · line ${item.id}`,
52
+ })) ?? [];
53
+ if (selection && !options.some((item) => item.id === selection.id)) options.unshift(selection);
54
+ const select = (id: string) => {
55
+ if (locked) return;
56
+ const option = options.find((item) => item.id === id);
57
+ setSelection(id ? (option ?? { id, label: `Known inventory line ${id}` }) : null);
58
+ setGeneration((value) => value + 1);
59
+ };
60
+ const save = async (input: Omit<RecordMtwStockObservationInput, 'idempotencyKey'>) => {
61
+ if (!selection || input.inventoryItemId !== selection.id || locked) return;
62
+ const result = await actions.run<RecordStockIssueMutation>(
63
+ RecordStockIssueDocument,
64
+ { ...input },
65
+ 'Unresolved issue recorded.'
66
+ );
67
+ if (result) {
68
+ setGeneration((value) => value + 1);
69
+ }
70
+ };
71
+ const inventoryPage = inventory.data
72
+ ? {
73
+ total: inventory.data.inventoryItemsCount,
74
+ limit: 25,
75
+ offset,
76
+ hasMore: offset + inventory.data.inventoryItems.length < inventory.data.inventoryItemsCount,
77
+ nextOffset: offset + 25,
78
+ }
79
+ : undefined;
80
+ return (
81
+ <div className="space-y-5">
82
+ <div className={reuseCard}>
83
+ <p>
84
+ Reports do not change stock quantities or authorize picking. Unknown fields can remain
85
+ blank, including while evidence services are unavailable.
86
+ </p>
87
+ <ReuseState loading={inventory.loading} error={inventory.error} />
88
+ <PinnedSelect
89
+ label="Inventory line"
90
+ value={selection?.id ?? ''}
91
+ options={options}
92
+ onChange={select}
93
+ disabled={locked}
94
+ />
95
+ <ReusePager page={inventoryPage} offset={offset} onChange={setOffset} busy={locked} />
96
+ <details>
97
+ <summary>Use a known inventory line reference</summary>
98
+ <p className="text-sm">
99
+ For an off-page or previously retired line, use its exact reference. This is not an
100
+ archive browser.
101
+ </p>
102
+ <label>
103
+ Exact inventory line reference
104
+ <Input
105
+ value={knownId}
106
+ maxLength={255}
107
+ disabled={locked}
108
+ onChange={(event) => setKnownId(event.target.value)}
109
+ />
110
+ </label>
111
+ <Button
112
+ type="button"
113
+ variant="outline"
114
+ disabled={locked || !knownId.trim()}
115
+ onClick={() => select(knownId.trim())}
116
+ >
117
+ Select known line
118
+ </Button>
119
+ </details>
120
+ {selection && (
121
+ <div className="text-sm space-y-1">
122
+ <p className="break-words">Selected: {selection.label}</p>
123
+ <p className="break-all">Exact inventory line reference: {selection.id}</p>
124
+ </div>
125
+ )}
126
+ </div>
127
+ {selection && (
128
+ <section className={reuseCard}>
129
+ <h2 className="text-lg font-semibold">Report an issue</h2>
130
+ <StockIssueForm
131
+ key={`${selection.id}:${generation}`}
132
+ inventoryItemId={selection.id}
133
+ disabled={locked}
134
+ onSubmit={save}
135
+ />
136
+ </section>
137
+ )}
138
+ <div className={reuseCard}>
139
+ {actions.error && <p role="alert">{actions.error}</p>}
140
+ {actions.notice && <p role="status">{actions.notice}</p>}
141
+ <Button type="button" variant="outline" disabled={actions.busy} onClick={actions.refresh}>
142
+ Refresh history
143
+ </Button>
144
+ {actions.uncertain && (
145
+ <div className="space-y-3">
146
+ <p>
147
+ The save result is uncertain. Check history, then retry the original request or
148
+ explicitly abandon it before starting a different report.
149
+ </p>
150
+ <Button
151
+ type="button"
152
+ disabled={actions.busy}
153
+ onClick={() => void actions.retryOriginal()}
154
+ >
155
+ Retry original request
156
+ </Button>
157
+ <Button
158
+ type="button"
159
+ variant="outline"
160
+ disabled={actions.busy}
161
+ onClick={() => {
162
+ actions.discardAttempt();
163
+ setGeneration((value) => value + 1);
164
+ }}
165
+ >
166
+ Abandon original request
167
+ </Button>
168
+ </div>
169
+ )}
170
+ </div>
171
+ {selection && (
172
+ <StockIssueReadPanel
173
+ key={`${selection.id}:${generation}`}
174
+ inventoryItemId={selection.id}
175
+ revision={actions.revision}
176
+ busy={actions.busy}
177
+ />
178
+ )}
179
+ </div>
180
+ );
181
+ }