@myparcel-dev/pdk-admin 1.14.1 → 2.0.0

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 (499) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/package.json +5 -5
  3. package/src/__tests__/__snapshots__/exports.spec.ts.snap +8 -1
  4. package/src/__tests__/doComponentTestTeardown.ts +2 -0
  5. package/src/__tests__/mocks/index.ts +1 -1
  6. package/src/__tests__/mocks/mockDefaultAccount.ts +1 -0
  7. package/src/__tests__/mocks/mockDefaultGlobalContext.ts +2 -2
  8. package/src/__tests__/mocks/{mockDefaultPlatform.ts → mockDefaultProposition.ts} +1 -3
  9. package/src/__tests__/mocks/mockDefaultShop.ts +1 -0
  10. package/src/__tests__/utils/getActionIds.ts +12 -0
  11. package/src/__tests__/utils/mockOrderData.ts +20 -0
  12. package/src/actions/composables/mutations/orders/useExportOrdersMutation.ts +1 -1
  13. package/src/actions/composables/queries/account/useOrderCapabilitiesQuery.ts +67 -0
  14. package/src/actions/composables/queries/account/useShipmentCapabilitiesQuery.ts +96 -0
  15. package/src/actions/definitions/orders.ts +6 -8
  16. package/src/actions/index.ts +1 -0
  17. package/src/actions/orderModeActions.spec.ts +150 -0
  18. package/src/actions/orderModeActions.ts +90 -0
  19. package/src/components/OrderBox/ShipmentOptionsBox.spec.ts +109 -0
  20. package/src/components/OrderBox/ShipmentOptionsBox.vue +9 -25
  21. package/src/components/OrderListItem/OrderModeOrderListItem.spec.ts +125 -0
  22. package/src/components/OrderListItem/OrderModeOrderListItem.vue +10 -6
  23. package/src/components/PluginSettings/PluginSettingsForms.vue +7 -4
  24. package/src/components/common/DeliveryOptionsExcerptCarrierName.vue +3 -3
  25. package/src/components/modals/ShipmentOptionsModal.spec.ts +79 -0
  26. package/src/components/modals/ShipmentOptionsModal.vue +4 -21
  27. package/src/composables/components/useToggleInputContext.ts +2 -2
  28. package/src/composables/components/useTriStateInputContext.ts +2 -2
  29. package/src/composables/context/index.ts +1 -0
  30. package/src/composables/context/useOrderMode.spec.ts +75 -0
  31. package/src/composables/context/useOrderMode.ts +26 -0
  32. package/src/composables/language/useLanguage.spec.ts +2 -2
  33. package/src/composables/shipments/useShipmentData.ts +2 -2
  34. package/src/data/index.ts +1 -0
  35. package/src/data/orderMode.spec.ts +22 -0
  36. package/src/data/orderMode.ts +50 -0
  37. package/src/forms/form-builder/builders/buildAfterUpdate.spec.ts +5 -8
  38. package/src/forms/form-builder/operations/executeOperations.spec.ts +4 -7
  39. package/src/forms/form-builder/operations/executeSetPropOperation.spec.ts +4 -7
  40. package/src/forms/form-builder/operations/executeSetValueOperation.spec.ts +3 -2
  41. package/src/forms/form-builder/utils/createValueSetter.ts +21 -8
  42. package/src/forms/helpers/addCapabilitiesClearNotification.ts +39 -0
  43. package/src/forms/helpers/getDeliveryTypes.ts +5 -10
  44. package/src/forms/helpers/getFieldLabel.ts +7 -2
  45. package/src/forms/helpers/getPackageTypes.ts +7 -12
  46. package/src/forms/helpers/index.ts +3 -10
  47. package/src/forms/helpers/useFormCapabilities.spec.ts +227 -0
  48. package/src/forms/helpers/useFormCapabilities.ts +176 -0
  49. package/src/forms/pluginSettings/createPluginSettingsForm.ts +2 -2
  50. package/src/forms/pluginSettings/filterPluginSettingsView.spec.ts +158 -0
  51. package/src/forms/pluginSettings/filterPluginSettingsView.ts +96 -0
  52. package/src/forms/pluginSettings/index.ts +1 -0
  53. package/src/forms/pluginSettings/resolveSettingsValues.spec.ts +62 -0
  54. package/src/forms/pluginSettings/resolveSettingsValues.ts +16 -0
  55. package/src/forms/shipmentOptions/createShipmentOptionsForm.spec.ts +108 -0
  56. package/src/forms/shipmentOptions/createShipmentOptionsForm.ts +114 -52
  57. package/src/forms/shipmentOptions/field.ts +6 -66
  58. package/src/forms/shipmentOptions/fieldFactoryRegistry.ts +26 -0
  59. package/src/forms/shipmentOptions/fields/createCarrierField.ts +119 -30
  60. package/src/forms/shipmentOptions/fields/createDigitalStampRangeField.ts +3 -3
  61. package/src/forms/shipmentOptions/fields/createInsuranceField.ts +43 -22
  62. package/src/forms/shipmentOptions/fields/createPackageTypeField.ts +1 -2
  63. package/src/forms/shipmentOptions/fields/createShipmentOptionField.spec.ts +177 -0
  64. package/src/forms/shipmentOptions/fields/createShipmentOptionField.ts +90 -8
  65. package/src/forms/shipmentOptions/fields/index.ts +0 -9
  66. package/src/forms/shipmentOptions/useCapabilitiesAutoClear.spec.ts +347 -0
  67. package/src/forms/shipmentOptions/useCapabilitiesAutoClear.ts +452 -0
  68. package/src/forms/shipmentOptions/useCapabilitiesWatcher.spec.ts +14 -0
  69. package/src/forms/shipmentOptions/useCapabilitiesWatcher.ts +29 -0
  70. package/src/forms/shipmentOptions/wireProxyCapabilities.spec.ts +160 -0
  71. package/src/forms/shipmentOptions/wireProxyCapabilities.ts +102 -0
  72. package/src/index.ts +2 -0
  73. package/src/pdk/instance/plugins/createRegisterComponentsPlugin.ts +2 -0
  74. package/src/sdk/composables/api/useFetchCarrier.ts +39 -4
  75. package/src/sdk/composables/usePdkAdminApi.ts +8 -3
  76. package/src/stores/useActionStore.spec.ts +101 -0
  77. package/src/stores/useActionStore.ts +4 -28
  78. package/src/stores/useQueryStore.ts +15 -0
  79. package/src/types/actions/endpoints.types.ts +2 -1
  80. package/src/types/sdk.types.ts +54 -1
  81. package/src/utils/forms/formToBody.ts +2 -1
  82. package/src/utils/forms/getEnabledValues.spec.ts +66 -0
  83. package/src/utils/forms/getEnabledValues.ts +25 -0
  84. package/src/utils/forms/index.ts +1 -0
  85. package/src/utils/translations/getDynamicTranslation.ts +1 -1
  86. package/src/views/OrderBox.vue +11 -5
  87. package/src/views/OrderListItem.spec.ts +71 -0
  88. package/src/views/OrderListItem.vue +6 -7
  89. package/dist/__tests__/doComponentTestSetup.d.ts +0 -2
  90. package/dist/__tests__/doComponentTestTeardown.d.ts +0 -1
  91. package/dist/__tests__/index.d.ts +0 -3
  92. package/dist/__tests__/mocks/index.d.ts +0 -14
  93. package/dist/__tests__/mocks/mockDefaultAccount.d.ts +0 -2
  94. package/dist/__tests__/mocks/mockDefaultAppConfig.d.ts +0 -2
  95. package/dist/__tests__/mocks/mockDefaultAppInfo.d.ts +0 -2
  96. package/dist/__tests__/mocks/mockDefaultCarriers.d.ts +0 -2
  97. package/dist/__tests__/mocks/mockDefaultConfig.d.ts +0 -2
  98. package/dist/__tests__/mocks/mockDefaultDynamicContext.d.ts +0 -2
  99. package/dist/__tests__/mocks/mockDefaultEndpoints.d.ts +0 -2
  100. package/dist/__tests__/mocks/mockDefaultGlobalContext.d.ts +0 -2
  101. package/dist/__tests__/mocks/mockDefaultLogger.d.ts +0 -1
  102. package/dist/__tests__/mocks/mockDefaultPlatform.d.ts +0 -2
  103. package/dist/__tests__/mocks/mockDefaultPluginSettings.d.ts +0 -2
  104. package/dist/__tests__/mocks/mockDefaultPrintOptionsView.d.ts +0 -2
  105. package/dist/__tests__/mocks/mockDefaultShop.d.ts +0 -2
  106. package/dist/__tests__/mocks/mockDefaultTranslations.d.ts +0 -2
  107. package/dist/actions/composables/index.d.ts +0 -2
  108. package/dist/actions/composables/mutations/account/index.d.ts +0 -2
  109. package/dist/actions/composables/mutations/account/useDeleteAccountMutation.d.ts +0 -3
  110. package/dist/actions/composables/mutations/account/useUpdateAccountMutation.d.ts +0 -3
  111. package/dist/actions/composables/mutations/debug/index.d.ts +0 -3
  112. package/dist/actions/composables/mutations/debug/useDownloadLogsMutation.d.ts +0 -3
  113. package/dist/actions/composables/mutations/debug/useSwitchToAcceptanceApiMutation.d.ts +0 -3
  114. package/dist/actions/composables/mutations/debug/useSwitchToProductionApiMutation.d.ts +0 -3
  115. package/dist/actions/composables/mutations/index.d.ts +0 -7
  116. package/dist/actions/composables/mutations/orders/index.d.ts +0 -3
  117. package/dist/actions/composables/mutations/orders/useExportOrdersMutation.d.ts +0 -5
  118. package/dist/actions/composables/mutations/orders/usePrintOrdersMutation.d.ts +0 -4
  119. package/dist/actions/composables/mutations/orders/useUpdateOrdersMutation.d.ts +0 -4
  120. package/dist/actions/composables/mutations/settings/index.d.ts +0 -2
  121. package/dist/actions/composables/mutations/settings/useUpdatePluginSettingsMutation.d.ts +0 -3
  122. package/dist/actions/composables/mutations/settings/useUpdateProductSettingsMutation.d.ts +0 -3
  123. package/dist/actions/composables/mutations/shipments/index.d.ts +0 -4
  124. package/dist/actions/composables/mutations/shipments/useDeleteShipmentsMutation.d.ts +0 -4
  125. package/dist/actions/composables/mutations/shipments/useExportReturnMutation.d.ts +0 -4
  126. package/dist/actions/composables/mutations/shipments/usePrintShipmentsMutation.d.ts +0 -4
  127. package/dist/actions/composables/mutations/shipments/useUpdateShipmentsMutation.d.ts +0 -4
  128. package/dist/actions/composables/mutations/usePdkMutation.d.ts +0 -15
  129. package/dist/actions/composables/mutations/webhooks/index.d.ts +0 -2
  130. package/dist/actions/composables/mutations/webhooks/useCreateWebhooksMutation.d.ts +0 -1
  131. package/dist/actions/composables/mutations/webhooks/useDeleteWebhooksMutation.d.ts +0 -3
  132. package/dist/actions/composables/queries/account/index.d.ts +0 -1
  133. package/dist/actions/composables/queries/account/useFetchContextQuery.d.ts +0 -3
  134. package/dist/actions/composables/queries/index.d.ts +0 -6
  135. package/dist/actions/composables/queries/orders/index.d.ts +0 -1
  136. package/dist/actions/composables/queries/orders/useFetchOrdersQuery.d.ts +0 -3
  137. package/dist/actions/composables/queries/products/index.d.ts +0 -1
  138. package/dist/actions/composables/queries/products/useFetchProductsQuery.d.ts +0 -3
  139. package/dist/actions/composables/queries/queryKeys.d.ts +0 -2
  140. package/dist/actions/composables/queries/shipments/index.d.ts +0 -1
  141. package/dist/actions/composables/queries/shipments/useFetchShipmentsQuery.d.ts +0 -4
  142. package/dist/actions/composables/queries/webhooks/index.d.ts +0 -1
  143. package/dist/actions/composables/queries/webhooks/useFetchWebhooksQuery.d.ts +0 -3
  144. package/dist/actions/defineAction.d.ts +0 -8
  145. package/dist/actions/definitions/account.d.ts +0 -13
  146. package/dist/actions/definitions/context.d.ts +0 -6
  147. package/dist/actions/definitions/debug.d.ts +0 -13
  148. package/dist/actions/definitions/index.d.ts +0 -8
  149. package/dist/actions/definitions/modal.d.ts +0 -17
  150. package/dist/actions/definitions/orders.d.ts +0 -38
  151. package/dist/actions/definitions/settings.d.ts +0 -2
  152. package/dist/actions/definitions/shipments.d.ts +0 -15
  153. package/dist/actions/definitions/webhooks.d.ts +0 -4
  154. package/dist/actions/executors/createHandlerWithParameters.d.ts +0 -5
  155. package/dist/actions/executors/createMutationHandler.d.ts +0 -3
  156. package/dist/actions/executors/createOrdersMutationHandler.d.ts +0 -2
  157. package/dist/actions/executors/createQueryHandler.d.ts +0 -3
  158. package/dist/actions/executors/createShipmentsMutationHandler.d.ts +0 -2
  159. package/dist/actions/executors/doMutate.d.ts +0 -4
  160. package/dist/actions/executors/executeAction.d.ts +0 -6
  161. package/dist/actions/executors/executeAfterHandle.d.ts +0 -3
  162. package/dist/actions/executors/executeBeforeHandle.d.ts +0 -4
  163. package/dist/actions/executors/executeHandler.d.ts +0 -3
  164. package/dist/actions/executors/executeNextAction.d.ts +0 -6
  165. package/dist/actions/executors/index.d.ts +0 -14
  166. package/dist/actions/executors/resolveOrderParameters.d.ts +0 -3
  167. package/dist/actions/executors/resolveQuerySuffix.d.ts +0 -3
  168. package/dist/actions/executors/types.d.ts +0 -19
  169. package/dist/actions/index.d.ts +0 -6
  170. package/dist/actions/print/index.d.ts +0 -3
  171. package/dist/actions/print/openOrPrintPdf.d.ts +0 -3
  172. package/dist/actions/print/resolvePrintParameters.d.ts +0 -3
  173. package/dist/actions/print/waitForLabelPrompt.d.ts +0 -3
  174. package/dist/actions/stopActionHandler.d.ts +0 -2
  175. package/dist/components/OrderBox/OrderShipmentsTable.vue.d.ts +0 -6
  176. package/dist/components/OrderBox/OrderShipmentsTableRow.vue.d.ts +0 -21
  177. package/dist/components/OrderBox/ShipmentOptionsBox.vue.d.ts +0 -2
  178. package/dist/components/OrderBox/ShipmentTableBox.vue.d.ts +0 -2
  179. package/dist/components/OrderListItem/OrderModeOrderListItem.vue.d.ts +0 -2
  180. package/dist/components/OrderListItem/ShipmentLabel.vue.d.ts +0 -15
  181. package/dist/components/OrderListItem/ShipmentModeOrderListItem.vue.d.ts +0 -2
  182. package/dist/components/PluginSettings/AccountSettings.vue.d.ts +0 -2
  183. package/dist/components/PluginSettings/DebugOptions.vue.d.ts +0 -2
  184. package/dist/components/PluginSettings/EditApiKeyForm.vue.d.ts +0 -7
  185. package/dist/components/PluginSettings/PluginSettingsForms.vue.d.ts +0 -2
  186. package/dist/components/PluginSettings/WebhooksStatus.vue.d.ts +0 -2
  187. package/dist/components/PluginSettings/createUpdateAccountSettingsValidator.d.ts +0 -4
  188. package/dist/components/common/ActionButton.vue.d.ts +0 -52
  189. package/dist/components/common/BulkSelectCheckbox.vue.d.ts +0 -22
  190. package/dist/components/common/CarrierLogo.vue.d.ts +0 -16
  191. package/dist/components/common/DateRelative.vue.d.ts +0 -16
  192. package/dist/components/common/DeliveryOptionsDeliveryType.vue.d.ts +0 -16
  193. package/dist/components/common/DeliveryOptionsExcerpt.vue.d.ts +0 -2
  194. package/dist/components/common/DeliveryOptionsExcerptCarrierName.vue.d.ts +0 -16
  195. package/dist/components/common/DeliveryOptionsPackageType.vue.d.ts +0 -16
  196. package/dist/components/common/DigitalStampWeightRange.vue.d.ts +0 -15
  197. package/dist/components/common/NotificationContainer.vue.d.ts +0 -19
  198. package/dist/components/common/PackageType.vue.d.ts +0 -16
  199. package/dist/components/common/PlainElement.d.ts +0 -2
  200. package/dist/components/common/ResetButton.vue.d.ts +0 -15
  201. package/dist/components/common/ReturnsForm.vue.d.ts +0 -14
  202. package/dist/components/common/ShipmentBarcode.vue.d.ts +0 -15
  203. package/dist/components/common/ShipmentOptionsForm.vue.d.ts +0 -16
  204. package/dist/components/common/ShipmentStatus.vue.d.ts +0 -15
  205. package/dist/components/common/StatusIndicator.vue.d.ts +0 -23
  206. package/dist/components/common/SubmitButton.vue.d.ts +0 -15
  207. package/dist/components/common/TabNavigation.vue.d.ts +0 -66
  208. package/dist/components/common/index.d.ts +0 -20
  209. package/dist/components/index.d.ts +0 -1
  210. package/dist/components/modals/PrintOptionsModal.vue.d.ts +0 -2
  211. package/dist/components/modals/PrintOptionsModalForm.vue.d.ts +0 -2
  212. package/dist/components/modals/ShipmentOptionsModal.vue.d.ts +0 -2
  213. package/dist/components/modals/ShipmentOptionsModalForm.vue.d.ts +0 -16
  214. package/dist/composables/components/index.d.ts +0 -15
  215. package/dist/composables/components/useBulkSelectCheckbox.d.ts +0 -9
  216. package/dist/composables/components/useCheckboxGroupContext.d.ts +0 -4
  217. package/dist/composables/components/useDropOffInputContext.d.ts +0 -13
  218. package/dist/composables/components/useDropdownButtonContext.d.ts +0 -15
  219. package/dist/composables/components/useElementContext.d.ts +0 -7
  220. package/dist/composables/components/useElementOptions.d.ts +0 -6
  221. package/dist/composables/components/useInputWithOptionsContext.d.ts +0 -10
  222. package/dist/composables/components/useModalElementContext.d.ts +0 -11
  223. package/dist/composables/components/useMultiSelectInputContext.d.ts +0 -4
  224. package/dist/composables/components/useRadioGroupContext.d.ts +0 -10
  225. package/dist/composables/components/useSelectInputContext.d.ts +0 -4
  226. package/dist/composables/components/useShippingMethodsInputContext.d.ts +0 -13
  227. package/dist/composables/components/useTableContext.d.ts +0 -7
  228. package/dist/composables/components/useToggleInputContext.d.ts +0 -11
  229. package/dist/composables/components/useTriStateInputContext.d.ts +0 -17
  230. package/dist/composables/context/index.d.ts +0 -7
  231. package/dist/composables/context/useAppInfo.d.ts +0 -2
  232. package/dist/composables/context/useContext.d.ts +0 -3
  233. package/dist/composables/context/useGlobalContext.d.ts +0 -2
  234. package/dist/composables/context/useInstanceContext.d.ts +0 -8
  235. package/dist/composables/context/useModalContext.d.ts +0 -11
  236. package/dist/composables/context/useModalOrder.d.ts +0 -1
  237. package/dist/composables/context/usePluginSettings.d.ts +0 -2
  238. package/dist/composables/formatter/default/createCurrencyFormat.d.ts +0 -1
  239. package/dist/composables/formatter/default/createLongDateFormat.d.ts +0 -1
  240. package/dist/composables/formatter/default/createRelativeTimeFormat.d.ts +0 -1
  241. package/dist/composables/formatter/default/defaultCurrencyFormatters.d.ts +0 -2
  242. package/dist/composables/formatter/default/defaultDateFormatters.d.ts +0 -4
  243. package/dist/composables/formatter/default/index.d.ts +0 -6
  244. package/dist/composables/formatter/default/parseDate.d.ts +0 -1
  245. package/dist/composables/formatter/formatter.types.d.ts +0 -23
  246. package/dist/composables/formatter/index.d.ts +0 -4
  247. package/dist/composables/formatter/useFormatter.d.ts +0 -2
  248. package/dist/composables/formatter/useLocalizedFormatter.d.ts +0 -2
  249. package/dist/composables/index.d.ts +0 -17
  250. package/dist/composables/language/index.d.ts +0 -4
  251. package/dist/composables/language/resolveTranslatedString.d.ts +0 -3
  252. package/dist/composables/language/resolveTranslationKey.d.ts +0 -2
  253. package/dist/composables/language/types.d.ts +0 -1
  254. package/dist/composables/language/useLanguage.d.ts +0 -23
  255. package/dist/composables/orders/index.d.ts +0 -3
  256. package/dist/composables/orders/useOrder.d.ts +0 -3
  257. package/dist/composables/orders/useOrderData.d.ts +0 -9
  258. package/dist/composables/orders/useOrdersData.d.ts +0 -3
  259. package/dist/composables/products/index.d.ts +0 -1
  260. package/dist/composables/products/useProductData.d.ts +0 -8
  261. package/dist/composables/shipments/index.d.ts +0 -3
  262. package/dist/composables/shipments/useShipment.d.ts +0 -3
  263. package/dist/composables/shipments/useShipmentData.d.ts +0 -12
  264. package/dist/composables/shipments/useShipmentsData.d.ts +0 -2
  265. package/dist/composables/useAdminConfig.d.ts +0 -2
  266. package/dist/composables/useAdminInstance.d.ts +0 -2
  267. package/dist/composables/useDigitalStampRanges.d.ts +0 -12
  268. package/dist/composables/useGlobalPdkAdmin.d.ts +0 -2
  269. package/dist/composables/useLoadMore.d.ts +0 -14
  270. package/dist/composables/useLoading.d.ts +0 -10
  271. package/dist/composables/useLogger.d.ts +0 -2
  272. package/dist/composables/useStoreContextQuery.d.ts +0 -3
  273. package/dist/composables/useStoreQuery.d.ts +0 -4
  274. package/dist/composables/useWeekdays.d.ts +0 -9
  275. package/dist/data/components.d.ts +0 -195
  276. package/dist/data/constants.d.ts +0 -63
  277. package/dist/data/endpoints.d.ts +0 -5
  278. package/dist/data/index.d.ts +0 -4
  279. package/dist/data/view.d.ts +0 -9
  280. package/dist/deprecated.d.ts +0 -6
  281. package/dist/forms/createReturnsForm.d.ts +0 -1
  282. package/dist/forms/form-builder/builders/buildAfterUpdate.d.ts +0 -3
  283. package/dist/forms/form-builder/builders/buildFormStateWatcher.d.ts +0 -3
  284. package/dist/forms/form-builder/builders/index.d.ts +0 -2
  285. package/dist/forms/form-builder/conditions/index.d.ts +0 -3
  286. package/dist/forms/form-builder/conditions/validateIfCondition.d.ts +0 -2
  287. package/dist/forms/form-builder/conditions/validateIfConditions.d.ts +0 -2
  288. package/dist/forms/form-builder/conditions/validateIsTruthy.d.ts +0 -2
  289. package/dist/forms/form-builder/index.d.ts +0 -5
  290. package/dist/forms/form-builder/operations/executeCustomOperationHandlers.d.ts +0 -2
  291. package/dist/forms/form-builder/operations/executeOperation.d.ts +0 -2
  292. package/dist/forms/form-builder/operations/executeOperations.d.ts +0 -2
  293. package/dist/forms/form-builder/operations/executeSetPropOperation.d.ts +0 -2
  294. package/dist/forms/form-builder/operations/executeSetValueOperation.d.ts +0 -2
  295. package/dist/forms/form-builder/operations/index.d.ts +0 -5
  296. package/dist/forms/form-builder/operations/parseBuilders.d.ts +0 -3
  297. package/dist/forms/form-builder/types/FormCondition.types.d.ts +0 -36
  298. package/dist/forms/form-builder/types/FormOperations.types.d.ts +0 -16
  299. package/dist/forms/form-builder/types/SubOperationBuilder.types.d.ts +0 -13
  300. package/dist/forms/form-builder/types/common.types.d.ts +0 -21
  301. package/dist/forms/form-builder/types/index.d.ts +0 -4
  302. package/dist/forms/form-builder/utils/createPropSetter.d.ts +0 -4
  303. package/dist/forms/form-builder/utils/createValueGetter.d.ts +0 -4
  304. package/dist/forms/form-builder/utils/createValueSetter.d.ts +0 -4
  305. package/dist/forms/form-builder/utils/index.d.ts +0 -4
  306. package/dist/forms/formKeys.d.ts +0 -10
  307. package/dist/forms/helpers/addBulkEditNotification.d.ts +0 -1
  308. package/dist/forms/helpers/createDefaultOption.d.ts +0 -3
  309. package/dist/forms/helpers/createHasShipmentOptionWatcher.d.ts +0 -3
  310. package/dist/forms/helpers/createLabel.d.ts +0 -1
  311. package/dist/forms/helpers/defineFormField.d.ts +0 -2
  312. package/dist/forms/helpers/getCarrier.d.ts +0 -3
  313. package/dist/forms/helpers/getDeliveryTypes.d.ts +0 -3
  314. package/dist/forms/helpers/getFieldLabel.d.ts +0 -2
  315. package/dist/forms/helpers/getFormCarrierName.d.ts +0 -2
  316. package/dist/forms/helpers/getInsuranceOptions.d.ts +0 -3
  317. package/dist/forms/helpers/getPackageTypes.d.ts +0 -3
  318. package/dist/forms/helpers/hasPostNlAgeCheck.d.ts +0 -2
  319. package/dist/forms/helpers/hasShipmentOption.d.ts +0 -3
  320. package/dist/forms/helpers/index.d.ts +0 -21
  321. package/dist/forms/helpers/isPackageTypeMailbox.d.ts +0 -2
  322. package/dist/forms/helpers/isPackageTypePackage.d.ts +0 -2
  323. package/dist/forms/helpers/isPackageTypePackageOrSmall.d.ts +0 -2
  324. package/dist/forms/helpers/isPackageTypeSmallPackage.d.ts +0 -2
  325. package/dist/forms/helpers/resolveFormComponent.d.ts +0 -3
  326. package/dist/forms/helpers/setFieldProp.d.ts +0 -8
  327. package/dist/forms/helpers/setPostNlAgeCheckSubtext.d.ts +0 -2
  328. package/dist/forms/helpers/triStateFieldIsEnabled.d.ts +0 -2
  329. package/dist/forms/helpers/updateFieldsDefaults.d.ts +0 -6
  330. package/dist/forms/index.d.ts +0 -6
  331. package/dist/forms/pluginSettings/createFormTab.d.ts +0 -3
  332. package/dist/forms/pluginSettings/createPluginSettingsForm.d.ts +0 -4
  333. package/dist/forms/pluginSettings/createPluginSettingsTabs.d.ts +0 -4
  334. package/dist/forms/pluginSettings/createPluginSettingsTabsComponent.d.ts +0 -4
  335. package/dist/forms/pluginSettings/generateFormFields.d.ts +0 -8
  336. package/dist/forms/pluginSettings/index.d.ts +0 -6
  337. package/dist/forms/pluginSettings/types.d.ts +0 -13
  338. package/dist/forms/shipmentOptions/createShipmentOptionsForm.d.ts +0 -4
  339. package/dist/forms/shipmentOptions/field.d.ts +0 -36
  340. package/dist/forms/shipmentOptions/fields/createAgeCheckField.d.ts +0 -3
  341. package/dist/forms/shipmentOptions/fields/createCarrierField.d.ts +0 -4
  342. package/dist/forms/shipmentOptions/fields/createDeliveryTypeField.d.ts +0 -3
  343. package/dist/forms/shipmentOptions/fields/createDigitalStampRangeField.d.ts +0 -4
  344. package/dist/forms/shipmentOptions/fields/createDirectReturnField.d.ts +0 -3
  345. package/dist/forms/shipmentOptions/fields/createHideSenderField.d.ts +0 -3
  346. package/dist/forms/shipmentOptions/fields/createInsuranceField.d.ts +0 -3
  347. package/dist/forms/shipmentOptions/fields/createLabelAmountField.d.ts +0 -3
  348. package/dist/forms/shipmentOptions/fields/createLargeFormatField.d.ts +0 -3
  349. package/dist/forms/shipmentOptions/fields/createOnlyRecipientField.d.ts +0 -3
  350. package/dist/forms/shipmentOptions/fields/createPackageTypeField.d.ts +0 -3
  351. package/dist/forms/shipmentOptions/fields/createPriorityDeliveryField.d.ts +0 -3
  352. package/dist/forms/shipmentOptions/fields/createReceiptCodeField.d.ts +0 -3
  353. package/dist/forms/shipmentOptions/fields/createRef.d.ts +0 -3
  354. package/dist/forms/shipmentOptions/fields/createSameDayDeliveryField.d.ts +0 -3
  355. package/dist/forms/shipmentOptions/fields/createShipmentOptionField.d.ts +0 -4
  356. package/dist/forms/shipmentOptions/fields/createSignatureField.d.ts +0 -3
  357. package/dist/forms/shipmentOptions/fields/index.d.ts +0 -15
  358. package/dist/forms/shipmentOptions/index.d.ts +0 -4
  359. package/dist/forms/shipmentOptions/types.d.ts +0 -2
  360. package/dist/index.d.ts +0 -19
  361. package/dist/pdk/PdkAdmin.d.ts +0 -18
  362. package/dist/pdk/boot.d.ts +0 -3
  363. package/dist/pdk/createAdminConfig.d.ts +0 -2
  364. package/dist/pdk/createPdkAdmin.d.ts +0 -8
  365. package/dist/pdk/createPdkAdminPlugin.d.ts +0 -3
  366. package/dist/pdk/fillShipmentsQueryData.d.ts +0 -4
  367. package/dist/pdk/index.d.ts +0 -11
  368. package/dist/pdk/instance/createInstanceContext.d.ts +0 -5
  369. package/dist/pdk/instance/createQueryClient.d.ts +0 -2
  370. package/dist/pdk/instance/index.d.ts +0 -3
  371. package/dist/pdk/instance/plugins/createContextPlugin.d.ts +0 -2
  372. package/dist/pdk/instance/plugins/createLoggerPlugin.d.ts +0 -2
  373. package/dist/pdk/instance/plugins/createRegisterComponentsPlugin.d.ts +0 -5
  374. package/dist/pdk/instance/plugins/createStorePlugin.d.ts +0 -2
  375. package/dist/pdk/instance/plugins/createVueQueryPlugin.d.ts +0 -5
  376. package/dist/pdk/instance/plugins/index.d.ts +0 -6
  377. package/dist/pdk/instance/plugins/plugins.types.d.ts +0 -3
  378. package/dist/pdk/renderMap.d.ts +0 -3
  379. package/dist/pdk/sendBootEvent.d.ts +0 -3
  380. package/dist/pdk/setupAdminApp.d.ts +0 -3
  381. package/dist/pdk/testIdDirective.d.ts +0 -5
  382. package/dist/sdk/PdkFetchClient.d.ts +0 -11
  383. package/dist/sdk/composables/api/index.d.ts +0 -1
  384. package/dist/sdk/composables/api/useFetchCarrier.d.ts +0 -2
  385. package/dist/sdk/composables/index.d.ts +0 -3
  386. package/dist/sdk/composables/useMyParcelApi.d.ts +0 -5
  387. package/dist/sdk/composables/usePdkAdminApi.d.ts +0 -6
  388. package/dist/sdk/endpoints/abstractPdkEndpoint.d.ts +0 -7
  389. package/dist/sdk/endpoints/index.d.ts +0 -1
  390. package/dist/sdk/index.d.ts +0 -3
  391. package/dist/services/actions/createAction.d.ts +0 -4
  392. package/dist/services/actions/createActionContext.d.ts +0 -3
  393. package/dist/services/actions/downloadFile.d.ts +0 -4
  394. package/dist/services/actions/getActionIdentifier.d.ts +0 -2
  395. package/dist/services/actions/index.d.ts +0 -4
  396. package/dist/services/addErrorToNotifications.d.ts +0 -2
  397. package/dist/services/context/getElementContext.d.ts +0 -2
  398. package/dist/services/context/index.d.ts +0 -1
  399. package/dist/services/createNotification.d.ts +0 -5
  400. package/dist/services/index.d.ts +0 -9
  401. package/dist/services/instantiateAction.d.ts +0 -2
  402. package/dist/services/instantiateActions.d.ts +0 -8
  403. package/dist/services/logger.d.ts +0 -19
  404. package/dist/services/mutations/getCallbackForMutationMode.d.ts +0 -4
  405. package/dist/services/mutations/getModalMutationOptions.d.ts +0 -2
  406. package/dist/services/mutations/index.d.ts +0 -3
  407. package/dist/services/mutations/mutationMode.d.ts +0 -4
  408. package/dist/services/print/index.d.ts +0 -1
  409. package/dist/services/print/openPdfInNewWindow.d.ts +0 -4
  410. package/dist/stores/createQueryCacheKey.d.ts +0 -3
  411. package/dist/stores/index.d.ts +0 -6
  412. package/dist/stores/types.d.ts +0 -13
  413. package/dist/stores/useActionStore.d.ts +0 -25
  414. package/dist/stores/useModalStore.d.ts +0 -16
  415. package/dist/stores/useNotificationStore.d.ts +0 -60
  416. package/dist/stores/useQueryStore.d.ts +0 -77
  417. package/dist/symbols.d.ts +0 -5
  418. package/dist/testing.d.ts +0 -1
  419. package/dist/types/actions/actions.types.d.ts +0 -31
  420. package/dist/types/actions/endpoints.types.d.ts +0 -9
  421. package/dist/types/actions/index.d.ts +0 -4
  422. package/dist/types/actions/parameters.types.d.ts +0 -55
  423. package/dist/types/actions/response.types.d.ts +0 -7
  424. package/dist/types/actions.types.d.ts +0 -45
  425. package/dist/types/admin.types.d.ts +0 -26
  426. package/dist/types/common.types.d.ts +0 -53
  427. package/dist/types/components-form.types.d.ts +0 -107
  428. package/dist/types/components.types.d.ts +0 -273
  429. package/dist/types/configuration.types.d.ts +0 -95
  430. package/dist/types/context.types.d.ts +0 -20
  431. package/dist/types/endpoints.types.d.ts +0 -7
  432. package/dist/types/form.types.d.ts +0 -39
  433. package/dist/types/index.d.ts +0 -12
  434. package/dist/types/language.types.d.ts +0 -9
  435. package/dist/types/sdk.types.d.ts +0 -155
  436. package/dist/utils/booleanToTriState.d.ts +0 -2
  437. package/dist/utils/convertDotNotationToObject.d.ts +0 -1
  438. package/dist/utils/createAssetUrl.d.ts +0 -1
  439. package/dist/utils/createClasses.d.ts +0 -8
  440. package/dist/utils/createObjectWithKeys.d.ts +0 -3
  441. package/dist/utils/decodeHtmlEntities.d.ts +0 -7
  442. package/dist/utils/downloadBlob.d.ts +0 -1
  443. package/dist/utils/downloadFileFromUrl.d.ts +0 -1
  444. package/dist/utils/encodeArrayParameter.d.ts +0 -2
  445. package/dist/utils/extendAdminInstance.d.ts +0 -2
  446. package/dist/utils/fakeLinkClick.d.ts +0 -4
  447. package/dist/utils/forms/createFormElement.d.ts +0 -3
  448. package/dist/utils/forms/createShipmentFormName.d.ts +0 -1
  449. package/dist/utils/forms/formToBody.d.ts +0 -2
  450. package/dist/utils/forms/generateFieldId.d.ts +0 -3
  451. package/dist/utils/forms/index.d.ts +0 -4
  452. package/dist/utils/generateLabelFilename.d.ts +0 -3
  453. package/dist/utils/getOrderId.d.ts +0 -3
  454. package/dist/utils/getOrderShipmentIds.d.ts +0 -2
  455. package/dist/utils/index.d.ts +0 -22
  456. package/dist/utils/openUrlInNewTab.d.ts +0 -1
  457. package/dist/utils/prefixComponent.d.ts +0 -3
  458. package/dist/utils/query/index.d.ts +0 -3
  459. package/dist/utils/query/setQueryData.d.ts +0 -2
  460. package/dist/utils/query/setQueryOrder.d.ts +0 -10
  461. package/dist/utils/query/setQueryShipment.d.ts +0 -3
  462. package/dist/utils/resolveCarrier.d.ts +0 -1
  463. package/dist/utils/translations/getDeliveryTypeTranslation.d.ts +0 -2
  464. package/dist/utils/translations/getDynamicTranslation.d.ts +0 -1
  465. package/dist/utils/translations/getPackageTypeTranslation.d.ts +0 -2
  466. package/dist/utils/translations/index.d.ts +0 -4
  467. package/dist/utils/translations/translateSelectOption.d.ts +0 -3
  468. package/dist/utils/triStateToBoolean.d.ts +0 -2
  469. package/dist/utils/unprefixComponent.d.ts +0 -3
  470. package/dist/utils/validateId.d.ts +0 -2
  471. package/dist/views/ChildProductSettings.vue.d.ts +0 -2
  472. package/dist/views/Modals.vue.d.ts +0 -2
  473. package/dist/views/Notifications.vue.d.ts +0 -2
  474. package/dist/views/OrderBox.vue.d.ts +0 -2
  475. package/dist/views/OrderListItem.vue.d.ts +0 -2
  476. package/dist/views/PluginSettings.vue.d.ts +0 -2
  477. package/dist/views/ProductSettings.vue.d.ts +0 -35
  478. package/dist/views/integrated/OrderBoxView.vue.d.ts +0 -12
  479. package/dist/views/integrated/OrderListItemView.vue.d.ts +0 -12
  480. package/dist/views/integrated/index.d.ts +0 -7
  481. package/src/forms/helpers/createHasShipmentOptionWatcher.ts +0 -12
  482. package/src/forms/helpers/getCarrier.ts +0 -11
  483. package/src/forms/helpers/getInsuranceOptions.ts +0 -23
  484. package/src/forms/helpers/hasPostNlAgeCheck.ts +0 -11
  485. package/src/forms/helpers/hasShipmentOption.ts +0 -8
  486. package/src/forms/helpers/isPackageTypeMailbox.ts +0 -7
  487. package/src/forms/helpers/isPackageTypePackage.ts +0 -7
  488. package/src/forms/helpers/isPackageTypePackageOrSmall.ts +0 -7
  489. package/src/forms/helpers/isPackageTypeSmallPackage.ts +0 -7
  490. package/src/forms/helpers/setPostNlAgeCheckSubtext.ts +0 -17
  491. package/src/forms/shipmentOptions/fields/createAgeCheckField.ts +0 -33
  492. package/src/forms/shipmentOptions/fields/createDirectReturnField.ts +0 -8
  493. package/src/forms/shipmentOptions/fields/createHideSenderField.ts +0 -8
  494. package/src/forms/shipmentOptions/fields/createLargeFormatField.ts +0 -8
  495. package/src/forms/shipmentOptions/fields/createOnlyRecipientField.ts +0 -21
  496. package/src/forms/shipmentOptions/fields/createPriorityDeliveryField.ts +0 -12
  497. package/src/forms/shipmentOptions/fields/createReceiptCodeField.ts +0 -21
  498. package/src/forms/shipmentOptions/fields/createSameDayDeliveryField.ts +0 -8
  499. package/src/forms/shipmentOptions/fields/createSignatureField.ts +0 -11
@@ -0,0 +1,102 @@
1
+ import {computed, onScopeDispose, type Ref} from 'vue';
2
+ import {type FormInstance} from '@myparcel-dev/vue-form-builder';
3
+ import {BackendEndpoint, type Plugin} from '@myparcel-dev/pdk-common';
4
+ import {globalLogger} from '../../services';
5
+ import {useQueryStore} from '../../stores';
6
+ import {
7
+ useShipmentCapabilitiesQuery,
8
+ type CapabilitiesSelection,
9
+ } from '../../actions/composables/queries/account/useShipmentCapabilitiesQuery';
10
+ import {
11
+ useOrderCapabilitiesQuery,
12
+ type OrderCapabilitiesInput,
13
+ } from '../../actions/composables/queries/account/useOrderCapabilitiesQuery';
14
+ import {useCapabilitiesWatcher, type FormInput, type OrderInput} from './useCapabilitiesWatcher';
15
+ import {FIELD_CARRIER, FIELD_DELIVERY_TYPE, FIELD_MANUAL_WEIGHT, FIELD_PACKAGE_TYPE} from './field';
16
+
17
+ /**
18
+ * Wire BOTH capabilities queries — order-scoped (cc + weight) and shipment-scoped (full
19
+ * selection) — into the shipment-options form for a single order, register them in the query
20
+ * store under composite-string modifiers (`${orderId}.order` and `${orderId}.shipment`), and
21
+ * tear them down when the form's scope disposes (modal close).
22
+ *
23
+ * The two queries serve different concerns:
24
+ *
25
+ * - **Order query** drives the carrier / packageType / deliveryType dropdowns from each
26
+ * carrier's flat union arrays. Refetches only when destination or weight change.
27
+ * - **Shipment query** drives per-option metadata (`isRequired`, `requires`, `excludes`,
28
+ * `insuredAmount`) for the chosen combination. Refetches when any axis of the selection
29
+ * changes; the empty-result case is the invalid-combo signal consumed by
30
+ * `useCapabilitiesAutoClear`.
31
+ *
32
+ * Manual-weight reactivity: weight is sourced from `FIELD_MANUAL_WEIGHT` when the user has set
33
+ * one, otherwise from `order.physicalProperties.initialWeight`. Both queries refetch when
34
+ * weight changes through the slider.
35
+ *
36
+ * Skipped for bulk forms (no single orderId) and for orders without an externalIdentifier (no
37
+ * key to register under).
38
+ */
39
+ export const wireProxyCapabilities = (
40
+ form: FormInstance,
41
+ order: Plugin.ModelContextOrderDataContext,
42
+ ): {selection: Readonly<Ref<CapabilitiesSelection>>} | undefined => {
43
+ const orderId = order.externalIdentifier;
44
+
45
+ if (!orderId) {
46
+ globalLogger.debug('wireProxyCapabilities', 'skipped — order has no externalIdentifier', {order});
47
+
48
+ return undefined;
49
+ }
50
+
51
+ const orderModifier = `${orderId}.order`;
52
+ const shipmentModifier = `${orderId}.shipment`;
53
+
54
+ // Use `form.getValue(name)` (which goes through `q(field.ref)` / `toValue` internally) rather
55
+ // than `form.values[name]` so reactive deps are tracked correctly inside computed/watchers.
56
+ const orderInput = computed<OrderInput>(() => {
57
+ // FIELD_MANUAL_WEIGHT carries `TriState.Inherit` (-1) when the user hasn't entered a manual
58
+ // override; only positive numbers represent an actual weight. Treat anything else as "unset"
59
+ // and fall back to the order's initial weight.
60
+ const manualWeightRaw = form.getValue(FIELD_MANUAL_WEIGHT);
61
+ const manualWeight = typeof manualWeightRaw === 'number' && manualWeightRaw > 0 ? manualWeightRaw : undefined;
62
+
63
+ return {
64
+ cc: order.shippingAddress?.cc,
65
+ weight: manualWeight ?? order.physicalProperties?.initialWeight,
66
+ };
67
+ });
68
+
69
+ const formInput = computed<FormInput>(() => ({
70
+ carrier: form.getValue<string | undefined>(FIELD_CARRIER),
71
+ packageType: form.getValue<string | undefined>(FIELD_PACKAGE_TYPE),
72
+ deliveryType: form.getValue<string | undefined>(FIELD_DELIVERY_TYPE),
73
+ }));
74
+
75
+ const selection = useCapabilitiesWatcher(orderInput, formInput);
76
+
77
+ const orderInputForQuery = computed<OrderCapabilitiesInput>(() => ({
78
+ cc: selection.value.cc,
79
+ weight: selection.value.weight,
80
+ }));
81
+
82
+ const orderQuery = useOrderCapabilitiesQuery(orderInputForQuery);
83
+ const shipmentQuery = useShipmentCapabilitiesQuery(selection);
84
+
85
+ const queryStore = useQueryStore();
86
+
87
+ queryStore.register(BackendEndpoint.ProxyCapabilities, orderModifier, orderQuery);
88
+ queryStore.register(BackendEndpoint.ProxyCapabilities, shipmentModifier, shipmentQuery);
89
+
90
+ // Drop both store entries when the form scope disposes (modal close). Without this, reopening
91
+ // the modal for the same order would surface the prior session's stale data because
92
+ // `register` returns the existing entry on second registration.
93
+ onScopeDispose(() => {
94
+ queryStore.unregister(BackendEndpoint.ProxyCapabilities, orderModifier);
95
+ queryStore.unregister(BackendEndpoint.ProxyCapabilities, shipmentModifier);
96
+ });
97
+
98
+ return {selection};
99
+ };
100
+
101
+ // Re-exported for the auto-clear composable so it can refer to the same selection-shape type.
102
+ export type {CapabilitiesSelection};
package/src/index.ts CHANGED
@@ -42,6 +42,7 @@ export {
42
42
  AdminModalKey,
43
43
  AdminView,
44
44
  NotificationCategory,
45
+ OrderMode,
45
46
  allAdminComponentNames,
46
47
  optionalAdminActionContainerComponentNames,
47
48
  optionalAdminComponentNames,
@@ -99,6 +100,7 @@ export {
99
100
  useModalElementContext,
100
101
  useMultiSelectInputContext,
101
102
  useOrderData,
103
+ useOrderMode,
102
104
  useOrdersData,
103
105
  useProductData,
104
106
  useRadioGroupContext,
@@ -67,6 +67,8 @@ export const createRegisterComponentsPlugin: PdkAppPlugin = ({config, logger}) =
67
67
  Object.entries(getOptionalComponents(app)).forEach(([componentName, component]) => {
68
68
  const componentToRegister = typeof component === 'string' ? componentsFromConfig[component] : component;
69
69
 
70
+ if (!componentToRegister) return;
71
+
70
72
  app.component(prefixComponent(componentName), markRaw(componentToRegister));
71
73
  });
72
74
 
@@ -1,18 +1,53 @@
1
1
  /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
2
2
  import {useQuery, useQueryClient} from '@tanstack/vue-query';
3
3
  import {type EndpointResponse, type GetCarrier} from '@myparcel-dev/sdk';
4
- import {type CarrierName} from '@myparcel-dev/constants';
4
+ import {CarrierId, CarrierName, type CarrierNameOrId} from '@myparcel-dev/constants';
5
5
  import {useMyParcelApi} from '../useMyParcelApi';
6
6
 
7
- export const useFetchCarrier = (carrier?: CarrierName) => {
7
+ const KNOWN_CARRIER_NAMES = new Set<string>(Object.values(CarrierName));
8
+ const KNOWN_CARRIER_IDS = new Set<number>(
9
+ Object.values(CarrierId).filter((value): value is number => typeof value === 'number'),
10
+ );
11
+
12
+ const resolveCarrierIdentifier = (input: string | number): CarrierNameOrId => {
13
+ if (typeof input === 'number') {
14
+ if (KNOWN_CARRIER_IDS.has(input)) {
15
+ return input as CarrierNameOrId;
16
+ }
17
+
18
+ // eslint-disable-next-line no-console
19
+ console.warn(`[useFetchCarrier] Unknown carrier ID "${input}", it may cause issues.`);
20
+
21
+ return input as CarrierNameOrId;
22
+ }
23
+
24
+ if (KNOWN_CARRIER_NAMES.has(input)) {
25
+ return input as CarrierNameOrId;
26
+ }
27
+
28
+ const normalized = input.replace(/_/g, '').toLowerCase();
29
+
30
+ if (KNOWN_CARRIER_NAMES.has(normalized)) {
31
+ return normalized as CarrierNameOrId;
32
+ }
33
+
34
+ // eslint-disable-next-line no-console
35
+ console.warn(`[useFetchCarrier] Unknown carrier identifier "${input}", it may cause issues.`);
36
+
37
+ // Cast input as CarrierNameOrId, even if it's not valid, to allow the query to run and return an error from the API if it's truly invalid.
38
+ return input as CarrierNameOrId;
39
+ };
40
+
41
+ export const useFetchCarrier = (carrier?: string | number) => {
42
+ const resolved = carrier === undefined ? undefined : resolveCarrierIdentifier(carrier);
8
43
  const queryClient = useQueryClient();
9
- const queryKey = ['carriers', {name: carrier}] as const;
44
+ const queryKey = ['carriers', {name: resolved}] as const;
10
45
 
11
46
  return useQuery<EndpointResponse<GetCarrier>[number]>(
12
47
  queryKey,
13
48
  async () => {
14
49
  const sdk = useMyParcelApi();
15
- const carriers = await sdk.getCarrier(carrier ? {path: {carrier}} : undefined);
50
+ const carriers = await sdk.getCarrier(resolved === undefined ? undefined : {path: {carrier: resolved}});
16
51
 
17
52
  return carriers[0];
18
53
  },
@@ -1,6 +1,6 @@
1
1
  import {createGlobalState} from '@vueuse/core';
2
- import {type BackendEndpoint} from '@myparcel-dev/pdk-common';
3
2
  import {createMyParcelSdk, type HttpMethod, type MyParcelSdk} from '@myparcel-dev/sdk';
3
+ import {type BackendEndpoint} from '@myparcel-dev/pdk-common';
4
4
  import {AbstractPdkEndpoint} from '../endpoints';
5
5
  import {PdkFetchClient} from '../PdkFetchClient';
6
6
  import {useGlobalContext} from '../../composables';
@@ -16,12 +16,17 @@ export const usePdkAdminApi = createGlobalState((): MyParcelSdk<AbstractPdkEndpo
16
16
  });
17
17
 
18
18
  const pdkEndpoints = Object.entries(globalContext.endpoints).map(([endpointName, options]) => {
19
+ // Effectively cast null as 'undefined' to prevent the SDK casting the prefix property to the string 'null'.
20
+ const property = typeof options.property === 'string' ? options.property : undefined;
21
+ const responseProperty = typeof options.responseProperty === 'string' ? options.responseProperty : undefined;
19
22
  class PdkEndpoint extends AbstractPdkEndpoint {
20
23
  public readonly method = options.method.toUpperCase() as HttpMethod;
21
24
  public readonly name = endpointName as BackendEndpoint;
22
25
  public readonly path = options.path;
23
- public readonly property = options.property;
24
- public readonly responseProperty = options.responseProperty ?? options.property;
26
+ public readonly property = property;
27
+ // If this is undefined, the SDK falls back to the endpoint instance's `property` value above.
28
+ public readonly responseProperty = responseProperty;
29
+ public readonly useDataEnvelope = typeof options.useDataEnvelope === 'undefined' ? true : options.useDataEnvelope;
25
30
  }
26
31
 
27
32
  return new PdkEndpoint({
@@ -0,0 +1,101 @@
1
+ // @vitest-environment happy-dom
2
+
3
+ import {computed, defineComponent, h} from 'vue';
4
+ import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
5
+ import {mount} from '@vue/test-utils';
6
+ import {AdminAction, OrderMode} from '../data';
7
+ import {useOrderMode} from '../composables/context/useOrderMode';
8
+ import {ORDER_VIEW_IN_BACKOFFICE_ID} from '../actions';
9
+ import {doComponentTestSetup, doComponentTestTeardown} from '../__tests__';
10
+ import {useActionStore} from './useActionStore';
11
+
12
+ vi.mock('../composables/context/useOrderMode', () => ({
13
+ useOrderMode: vi.fn(),
14
+ }));
15
+
16
+ const mockedUseOrderMode = vi.mocked(useOrderMode);
17
+
18
+ describe('useActionStore', () => {
19
+ beforeEach(() => {
20
+ doComponentTestSetup();
21
+ });
22
+
23
+ afterEach(() => {
24
+ doComponentTestTeardown();
25
+ });
26
+
27
+ describe('registerOrderActions', () => {
28
+ const mountWithStore = (mode: OrderMode) => {
29
+ mockedUseOrderMode.mockReturnValue(computed(() => mode));
30
+
31
+ let store!: ReturnType<typeof useActionStore>;
32
+
33
+ mount(
34
+ defineComponent({
35
+ setup() {
36
+ store = useActionStore();
37
+ store.registerOrderActions();
38
+
39
+ return () => h('div');
40
+ },
41
+ }),
42
+ );
43
+
44
+ return store;
45
+ };
46
+
47
+ const commonActions = [AdminAction.OrdersEdit, AdminAction.OrdersFetch, AdminAction.OrdersUpdate];
48
+
49
+ it.each(commonActions)('registers common action %s regardless of mode', (action) => {
50
+ for (const mode of [OrderMode.Shipments, OrderMode.OrderV1, OrderMode.OrderV2]) {
51
+ const store = mountWithStore(mode);
52
+ expect(store.get(action), `${action} should be registered in ${mode} mode`).toBeDefined();
53
+ }
54
+ });
55
+
56
+ it('registers shipment-specific actions in Shipments mode', () => {
57
+ const store = mountWithStore(OrderMode.Shipments);
58
+
59
+ expect(store.get(AdminAction.OrdersPrint)).toBeDefined();
60
+ expect(store.get(AdminAction.OrdersExport)).toBeDefined();
61
+ expect(store.get(AdminAction.OrdersExportPrint)).toBeDefined();
62
+ expect(store.get(AdminAction.ShipmentsExportReturn)).toBeDefined();
63
+ expect(store.get(AdminAction.ShipmentsDelete)).toBeDefined();
64
+ expect(store.get(AdminAction.ShipmentsUpdate)).toBeDefined();
65
+ expect(store.get(AdminAction.ShipmentsPrint)).toBeDefined();
66
+ expect(store.get(ORDER_VIEW_IN_BACKOFFICE_ID)).toBeUndefined();
67
+ });
68
+
69
+ it('registers order export and backoffice actions in OrderV1 mode', () => {
70
+ const store = mountWithStore(OrderMode.OrderV1);
71
+
72
+ expect(store.get(AdminAction.OrdersExport)).toBeDefined();
73
+ expect(store.get(ORDER_VIEW_IN_BACKOFFICE_ID)).toBeDefined();
74
+ expect(store.get(AdminAction.OrdersExportPrint)).toBeUndefined();
75
+ expect(store.get(AdminAction.ShipmentsExportReturn)).toBeUndefined();
76
+ expect(store.get(AdminAction.ShipmentsDelete)).toBeUndefined();
77
+ expect(store.get(AdminAction.ShipmentsUpdate)).toBeUndefined();
78
+ expect(store.get(AdminAction.ShipmentsPrint)).toBeUndefined();
79
+ });
80
+
81
+ it('registers the same shipment-specific action set as Shipments in OrderV2 mode (hybrid)', () => {
82
+ const store = mountWithStore(OrderMode.OrderV2);
83
+
84
+ expect(store.get(AdminAction.OrdersPrint)).toBeDefined();
85
+ expect(store.get(AdminAction.OrdersExport)).toBeDefined();
86
+ expect(store.get(AdminAction.OrdersExportPrint)).toBeDefined();
87
+ expect(store.get(AdminAction.ShipmentsExportReturn)).toBeDefined();
88
+ expect(store.get(AdminAction.ShipmentsDelete)).toBeDefined();
89
+ expect(store.get(AdminAction.ShipmentsUpdate)).toBeDefined();
90
+ expect(store.get(AdminAction.ShipmentsPrint)).toBeDefined();
91
+ // The backoffice view is V1-only and should still not appear in V2.
92
+ expect(store.get(ORDER_VIEW_IN_BACKOFFICE_ID)).toBeUndefined();
93
+ });
94
+
95
+ it('registers shipmentsExportReturn exactly once in Shipments mode', () => {
96
+ const store = mountWithStore(OrderMode.Shipments);
97
+
98
+ expect(store.get(AdminAction.ShipmentsExportReturn)).toBeDefined();
99
+ });
100
+ });
101
+ });
@@ -4,22 +4,14 @@ import {type OneOrMore, type PromiseOr, toArray} from '@myparcel-dev/ts-utils';
4
4
  import {type ActionParameters, type AnyActionDefinition, type ResolvedAction} from '../types';
5
5
  import {createAction, getActionIdentifier} from '../services';
6
6
  import {type AdminAction} from '../data';
7
- import {usePluginSettings} from '../composables';
7
+ import {useOrderMode} from '../composables';
8
8
  import {
9
9
  modalCloseAction,
10
10
  modalSubmitFormAction,
11
- orderExportAction,
12
- orderExportToShipmentsAction,
13
11
  ordersEditAction,
14
- ordersExportPrintShipmentsAction,
15
12
  ordersFetchAction,
16
- ordersPrintAction,
17
13
  ordersUpdateAction,
18
- orderViewInBackofficeAction,
19
- shipmentsDeleteAction,
20
- shipmentsExportReturnAction,
21
- shipmentsPrintAction,
22
- shipmentsUpdateAction,
14
+ STORE_MODE_ACTIONS,
23
15
  webhooksCreateAction,
24
16
  webhooksDeleteAction,
25
17
  webhooksFetchAction,
@@ -62,25 +54,9 @@ export const useActionStore = defineStore('actions', () => {
62
54
  dispatch,
63
55
 
64
56
  registerOrderActions: () => {
65
- const pluginSettings = usePluginSettings();
57
+ const orderMode = useOrderMode();
66
58
 
67
- register([
68
- ordersEditAction,
69
- ordersFetchAction,
70
- ordersPrintAction,
71
- ordersUpdateAction,
72
- ...(pluginSettings.order.orderMode
73
- ? [orderExportAction, orderViewInBackofficeAction]
74
- : [
75
- orderExportToShipmentsAction,
76
- ordersExportPrintShipmentsAction,
77
- shipmentsExportReturnAction,
78
- shipmentsExportReturnAction,
79
- shipmentsDeleteAction,
80
- shipmentsUpdateAction,
81
- shipmentsPrintAction,
82
- ]),
83
- ]);
59
+ register([ordersEditAction, ordersFetchAction, ordersUpdateAction, ...STORE_MODE_ACTIONS[orderMode.value]]);
84
60
  },
85
61
 
86
62
  registerModalActions: () => {
@@ -80,6 +80,20 @@ export const useQueryStore = defineStore('query', () => {
80
80
  return query;
81
81
  };
82
82
 
83
+ /**
84
+ * Drop the entry for {endpoint, modifier?} from the store. Used when a feature that registered
85
+ * its own query is unmounted (e.g. shipment-options modal closing) so a fresh registration on
86
+ * the next open isn't shadowed by stale data.
87
+ */
88
+ const unregister = <E extends BackendEndpoint>(endpoint: E, modifier?: PlainModifier): void => {
89
+ const key = createQueryCacheKey(endpoint, modifier);
90
+
91
+ if (queries.value[key] === undefined) return;
92
+
93
+ globalLogger.debug(`Unregistering query ${key}`);
94
+ delete queries.value[key];
95
+ };
96
+
83
97
  const registerShipmentQueries = (
84
98
  shipmentIds: MaybeRef<OneOrMore<number>>,
85
99
  orderIds?: MaybeRef<OneOrMore<string>>,
@@ -125,6 +139,7 @@ export const useQueryStore = defineStore('query', () => {
125
139
  get,
126
140
  has,
127
141
  register,
142
+ unregister,
128
143
 
129
144
  registerShipmentQueries,
130
145
 
@@ -29,4 +29,5 @@ export type BackendQueryEndpoints =
29
29
  | BackendEndpoint.FetchOrders
30
30
  | BackendEndpoint.FetchProducts
31
31
  | BackendEndpoint.FetchShipments
32
- | BackendEndpoint.FetchWebhooks;
32
+ | BackendEndpoint.FetchWebhooks
33
+ | BackendEndpoint.ProxyCapabilities;
@@ -1,6 +1,8 @@
1
+ import {type RecursivePartial} from '@myparcel-dev/ts-utils';
1
2
  import {
2
3
  type AdminContextKey,
3
4
  type BackendEndpoint,
5
+ type CarrierModel,
4
6
  type ExtractEndpointDefinition,
5
7
  type LabelFormat,
6
8
  type LabelOutput,
@@ -10,7 +12,6 @@ import {
10
12
  type Settings,
11
13
  type Shipment,
12
14
  } from '@myparcel-dev/pdk-common';
13
- import {type RecursivePartial} from '@myparcel-dev/ts-utils';
14
15
  import {type AdminContextObject} from './context.types';
15
16
  import {type WebhookDefinition} from './common.types';
16
17
 
@@ -185,6 +186,57 @@ interface DebugSwitchToProductionApiDefinition extends PdkEndpointDefinition {
185
186
  response: void;
186
187
  }
187
188
 
189
+ interface ProxyCapabilitiesDefinition extends PdkEndpointDefinition {
190
+ name: BackendEndpoint.ProxyCapabilities;
191
+ /**
192
+ * Action-control parameters live in the query string so the request body stays a clean
193
+ * mirror of the actual capabilities API contract.
194
+ *
195
+ * `filterSupported` (opt-in): when `true`, the action applies the registered-option allowlist
196
+ * server-side (`Carrier::filterRegisteredOptions`). When `false` or `undefined`, the backend
197
+ * should treat it as not opted in, preserving the existing unfiltered SDK passthrough
198
+ * behavior for callers.
199
+ */
200
+ parameters?: {filterSupported?: boolean};
201
+ /**
202
+ * Body shape mirrors the actual capabilities API request: camelCase keys at every level
203
+ * matching the SDK's attribute maps (`countryCode`, `physicalProperties`, `packageType`,
204
+ * `deliveryType`). The PHP action translates these top-level camelCase keys to the
205
+ * snake_case names the SDK PHP model uses internally — generic translation read from the
206
+ * SDK's own attribute map.
207
+ *
208
+ * `physicalProperties.weight` is an object `{value, unit}`, not a primitive — that's how the
209
+ * SDK's `PhysicalPropertiesWeightV2` model defines it on the wire.
210
+ */
211
+ body: {
212
+ recipient: {countryCode: string};
213
+ physicalProperties?: {
214
+ weight?: {value: number; unit: 'g' | 'kg'};
215
+ };
216
+ carrier?: string;
217
+ packageType?: string;
218
+ deliveryType?: string;
219
+ options?: string[];
220
+ };
221
+ response: {results: CarrierModel[]};
222
+ formattedResponse: CarrierModel[];
223
+ }
224
+
225
+ /**
226
+ * Body / parameters / call shape for `pdk.proxyCapabilities`. Both order-scoped and
227
+ * shipment-scoped query composables share these — the order-scoped call simply omits
228
+ * `parameters` at the call site. Derived from {@link ProxyCapabilitiesDefinition} so any
229
+ * change to the endpoint contract flows through automatically.
230
+ */
231
+ export type ProxyCapabilitiesBody = NonNullable<ProxyCapabilitiesDefinition['body']>;
232
+
233
+ export type ProxyCapabilitiesParameters = NonNullable<ProxyCapabilitiesDefinition['parameters']>;
234
+
235
+ export type ProxyCapabilitiesCall = (options: {
236
+ body: ProxyCapabilitiesBody;
237
+ parameters?: ProxyCapabilitiesParameters;
238
+ }) => Promise<ProxyCapabilitiesDefinition['response']>;
239
+
188
240
  export type BackendEndpointDefinition =
189
241
  | CreateWebhooksDefinition
190
242
  | DebugDownloadLogsDefinition
@@ -201,6 +253,7 @@ export type BackendEndpointDefinition =
201
253
  | FetchWebhooksDefinition
202
254
  | PrintOrdersDefinition
203
255
  | PrintShipmentsDefinition
256
+ | ProxyCapabilitiesDefinition
204
257
  | UpdateAccountDefinition
205
258
  | UpdateOrdersDefinition
206
259
  | UpdatePluginSettingsDefinition
@@ -1,6 +1,7 @@
1
1
  import {type FormInstance} from '@myparcel-dev/vue-form-builder';
2
2
  import {isOfType} from '@myparcel-dev/ts-utils';
3
3
  import {convertDotNotationToObject} from '../convertDotNotationToObject';
4
+ import {getEnabledValues} from './getEnabledValues';
4
5
 
5
6
  export const formToBody = <T extends Record<string, unknown> = Record<string, unknown>>(
6
7
  form?: false | FormInstance | T,
@@ -9,7 +10,7 @@ export const formToBody = <T extends Record<string, unknown> = Record<string, un
9
10
  return form ? form : ({} as T);
10
11
  }
11
12
 
12
- const formValues = form.getValues();
13
+ const formValues = getEnabledValues(form);
13
14
  return convertDotNotationToObject(formValues, (value) => {
14
15
  return typeof value === 'boolean' ? Number(value) : value;
15
16
  }) as T;
@@ -0,0 +1,66 @@
1
+ import {describe, expect, it} from 'vitest';
2
+ import {ref, computed} from 'vue';
3
+ import {type FormInstance} from '@myparcel-dev/vue-form-builder';
4
+ import {getEnabledValues} from './getEnabledValues';
5
+
6
+ const createMockField = (name: string, value: unknown, isDisabled: boolean) => ({
7
+ name,
8
+ ref: ref(value),
9
+ isDisabled: ref(isDisabled),
10
+ });
11
+
12
+ const createMockForm = (fields: ReturnType<typeof createMockField>[]): FormInstance => {
13
+ const allValues: Record<string, unknown> = {};
14
+
15
+ for (const field of fields) {
16
+ allValues[field.name] = field.ref.value;
17
+ }
18
+
19
+ return {
20
+ interactiveFields: computed(() => fields),
21
+ getValues: () => allValues,
22
+ } as unknown as FormInstance;
23
+ };
24
+
25
+ describe('getEnabledValues', () => {
26
+ it('returns values from enabled fields only', () => {
27
+ const form = createMockForm([
28
+ createMockField('deliveryOptions.carrier', 'POSTNL', false),
29
+ createMockField('deliveryOptions.shipmentOptions.requiresSignature', true, false),
30
+ createMockField('deliveryOptions.shipmentOptions.requiresAgeVerification', true, true),
31
+ ]);
32
+
33
+ const values = getEnabledValues(form);
34
+
35
+ expect(values).toEqual({
36
+ 'deliveryOptions.carrier': 'POSTNL',
37
+ 'deliveryOptions.shipmentOptions.requiresSignature': true,
38
+ });
39
+ expect(values).not.toHaveProperty('deliveryOptions.shipmentOptions.requiresAgeVerification');
40
+ });
41
+
42
+ it('returns all values when no fields are disabled', () => {
43
+ const form = createMockForm([
44
+ createMockField('deliveryOptions.carrier', 'POSTNL', false),
45
+ createMockField('deliveryOptions.shipmentOptions.requiresSignature', true, false),
46
+ ]);
47
+
48
+ const values = getEnabledValues(form);
49
+
50
+ expect(values).toEqual({
51
+ 'deliveryOptions.carrier': 'POSTNL',
52
+ 'deliveryOptions.shipmentOptions.requiresSignature': true,
53
+ });
54
+ });
55
+
56
+ it('returns empty object when all fields are disabled', () => {
57
+ const form = createMockForm([
58
+ createMockField('deliveryOptions.shipmentOptions.requiresSignature', true, true),
59
+ createMockField('deliveryOptions.shipmentOptions.requiresAgeVerification', false, true),
60
+ ]);
61
+
62
+ const values = getEnabledValues(form);
63
+
64
+ expect(values).toEqual({});
65
+ });
66
+ });
@@ -0,0 +1,25 @@
1
+ import {toValue} from 'vue';
2
+ import {type FormInstance} from '@myparcel-dev/vue-form-builder';
3
+
4
+ type FormValues = Record<string, unknown>;
5
+
6
+ /**
7
+ * Returns form values excluding disabled fields.
8
+ *
9
+ * Works around a vue-form-builder bug where `getValues()` retains stale
10
+ * values from fields that became disabled after initialisation (e.g. when
11
+ * switching carriers hides unsupported shipment options).
12
+ */
13
+ export const getEnabledValues = <T extends FormValues = FormValues>(form: FormInstance): T => {
14
+ const values: FormValues = {};
15
+
16
+ for (const field of toValue(form.interactiveFields)) {
17
+ if (toValue(field.isDisabled)) {
18
+ continue;
19
+ }
20
+
21
+ values[field.name] = toValue(field.ref);
22
+ }
23
+
24
+ return values as T;
25
+ };
@@ -2,3 +2,4 @@ export * from './createFormElement';
2
2
  export * from './createShipmentFormName';
3
3
  export * from './formToBody';
4
4
  export * from './generateFieldId';
5
+ export * from './getEnabledValues';
@@ -3,5 +3,5 @@ export const getDynamicTranslation = (prefix: string, input?: string): string =>
3
3
  return prefix;
4
4
  }
5
5
 
6
- return `${prefix}_${input}`;
6
+ return `${prefix}_${input.toLowerCase()}`;
7
7
  };
@@ -1,13 +1,21 @@
1
1
  <template>
2
2
  <ShipmentOptionsBox />
3
3
 
4
- <ShipmentTableBox v-if="!orderMode && data?.shipments.some((item) => !item.deleted)" />
4
+ <!--
5
+ Shipments mode plus V2 hybrid both surface manual shipments here.
6
+ @TODO INT-1590: restrict to OrderMode.Shipments once V2 with an active sales
7
+ channel hides the manual paths again. Original gate preserved as a
8
+ comment below for easy restoration.
9
+ -->
10
+ <!-- <ShipmentTableBox v-if="orderMode === OrderMode.Shipments && data?.shipments.some((item) => !item.deleted)" /> -->
11
+ <ShipmentTableBox v-if="orderMode !== OrderMode.OrderV1 && data?.shipments.some((item) => !item.deleted)" />
5
12
  </template>
6
13
 
7
14
  <script lang="ts" setup>
8
15
  import {computed, defineAsyncComponent, toValue} from 'vue';
9
16
  import {useActionStore, useQueryStore} from '../stores';
10
- import {useOrderData, usePluginSettings} from '../composables';
17
+ import {OrderMode} from '../data';
18
+ import {useOrderData, useOrderMode} from '../composables';
11
19
  import ShipmentOptionsBox from '../components/OrderBox/ShipmentOptionsBox.vue';
12
20
 
13
21
  // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -22,11 +30,9 @@ const actionStore = useActionStore();
22
30
 
23
31
  actionStore.registerOrderActions();
24
32
 
25
- const pluginSettings = usePluginSettings();
33
+ const orderMode = useOrderMode();
26
34
 
27
35
  const {query} = useOrderData();
28
36
 
29
37
  const data = computed(() => toValue(query.data));
30
-
31
- const {orderMode} = pluginSettings.order;
32
38
  </script>