@shipengine/elements 2.26.5 → 2.27.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 (192) hide show
  1. package/dist/cjs/assets/xcover/logo.svg.cjs +44 -0
  2. package/dist/cjs/components/field/rate-select/rate-card/rate-attribute-item/index.cjs +7 -0
  3. package/dist/cjs/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.cjs +56 -0
  4. package/dist/cjs/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.cjs +27 -0
  5. package/dist/cjs/components/field/rate-select/rate-card/rate-card.cjs +52 -42
  6. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +4 -0
  7. package/dist/cjs/components/field/rate-select/rate-select.cjs +80 -49
  8. package/dist/cjs/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.cjs +1 -1
  9. package/dist/cjs/data/insurance-provider-metadatas.json.cjs +10 -4
  10. package/dist/cjs/elements/customs-form/customs-form-element.cjs +294 -0
  11. package/dist/cjs/elements/customs-form/customs-form-element.stories.cjs +243 -0
  12. package/dist/cjs/elements/customs-form/customs-form-schema.cjs +59 -0
  13. package/dist/cjs/elements/customs-form/customs-form-types.cjs +63 -0
  14. package/dist/cjs/elements/customs-form/index.cjs +10 -0
  15. package/dist/cjs/elements/index.cjs +5 -0
  16. package/dist/cjs/elements/manage-carriers/manage-carriers.cjs +1 -1
  17. package/dist/cjs/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.cjs +1 -1
  18. package/dist/cjs/elements/purchase-label/components/index.cjs +2 -0
  19. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +1 -1
  20. package/dist/cjs/elements/purchase-label/components/shipment-form/shipment-form.cjs +4 -3
  21. package/dist/cjs/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.cjs +35 -11
  22. package/dist/cjs/elements/purchase-label/hooks/use-insurance-provider-options.cjs +2 -2
  23. package/dist/cjs/factories/shipengine/address.cjs +114 -0
  24. package/dist/cjs/factories/shipengine/money.cjs +21 -0
  25. package/dist/cjs/factories/shipengine/order-source.cjs +37 -0
  26. package/dist/cjs/factories/shipengine/package.cjs +41 -0
  27. package/dist/cjs/factories/shipengine/resource.cjs +23 -0
  28. package/dist/cjs/factories/shipengine/shipment.cjs +176 -0
  29. package/dist/cjs/factories/shipengine/weight.cjs +44 -0
  30. package/dist/cjs/factories/utils.cjs +19 -0
  31. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +4 -6
  32. package/dist/cjs/features/manage-carriers/manage-carriers.cjs +8 -6
  33. package/dist/cjs/hooks/use-configure-shipment.cjs +47 -14
  34. package/dist/cjs/hooks/use-get-funding-source-insurance-provider.cjs +7 -7
  35. package/dist/cjs/hooks/use-import-sales-order.cjs +45 -20
  36. package/dist/cjs/hooks/use-manage-funding-source-insurance.cjs +15 -23
  37. package/dist/cjs/index.cjs +5 -0
  38. package/dist/cjs/locales/en/common.json.cjs +1 -1
  39. package/dist/cjs/locales/en/purchase-label.json.cjs +9 -1
  40. package/dist/cjs/package.json.cjs +1 -1
  41. package/dist/cjs/utilities/feature-flags/feature-flags.cjs +1 -0
  42. package/dist/cjs/utilities/shipengine/carrier.cjs +4 -0
  43. package/dist/cjs/utilities/shipengine/index.cjs +3 -0
  44. package/dist/cjs/utilities/shipengine/insurance.cjs +63 -0
  45. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +9 -9
  46. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +3 -2
  47. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +8 -6
  48. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +4 -19
  49. package/dist/esm/assets/xcover/logo.svg.js +23 -0
  50. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/index.js +1 -0
  51. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.js +54 -0
  52. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.js +25 -0
  53. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +52 -42
  54. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +4 -0
  55. package/dist/esm/components/field/rate-select/rate-select.js +80 -49
  56. package/dist/esm/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.js +1 -1
  57. package/dist/esm/data/insurance-provider-metadatas.json.js +9 -4
  58. package/dist/esm/elements/customs-form/customs-form-element.js +291 -0
  59. package/dist/esm/elements/customs-form/customs-form-element.stories.js +232 -0
  60. package/dist/esm/elements/customs-form/customs-form-schema.js +56 -0
  61. package/dist/esm/elements/customs-form/customs-form-types.js +60 -0
  62. package/dist/esm/elements/customs-form/index.js +3 -0
  63. package/dist/esm/elements/index.js +3 -0
  64. package/dist/esm/elements/manage-carriers/manage-carriers.js +1 -1
  65. package/dist/esm/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.js +1 -1
  66. package/dist/esm/elements/purchase-label/components/index.js +1 -0
  67. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +1 -1
  68. package/dist/esm/elements/purchase-label/components/shipment-form/shipment-form.js +4 -3
  69. package/dist/esm/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.js +35 -11
  70. package/dist/esm/elements/purchase-label/hooks/use-insurance-provider-options.js +2 -2
  71. package/dist/esm/elements-provider/elements-context-provider.js +1 -1
  72. package/dist/esm/factories/shipengine/address.js +111 -0
  73. package/dist/esm/factories/shipengine/money.js +19 -0
  74. package/dist/esm/factories/shipengine/order-source.js +34 -0
  75. package/dist/esm/factories/shipengine/package.js +39 -0
  76. package/dist/esm/factories/shipengine/resource.js +21 -0
  77. package/dist/esm/factories/shipengine/shipment.js +168 -0
  78. package/dist/esm/factories/shipengine/weight.js +40 -0
  79. package/dist/esm/factories/utils.js +15 -0
  80. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +5 -7
  81. package/dist/esm/features/manage-carriers/manage-carriers.js +8 -6
  82. package/dist/esm/hooks/use-configure-shipment.js +47 -14
  83. package/dist/esm/hooks/use-get-funding-source-insurance-provider.js +7 -7
  84. package/dist/esm/hooks/use-import-sales-order.js +47 -22
  85. package/dist/esm/hooks/use-manage-funding-source-insurance.js +15 -23
  86. package/dist/esm/index.js +3 -0
  87. package/dist/esm/locales/en/common.json.js +1 -1
  88. package/dist/esm/locales/en/purchase-label.json.js +9 -1
  89. package/dist/esm/package.json.js +1 -1
  90. package/dist/esm/utilities/feature-flags/feature-flags.js +1 -0
  91. package/dist/esm/utilities/shipengine/carrier.js +4 -0
  92. package/dist/esm/utilities/shipengine/index.js +1 -1
  93. package/dist/esm/utilities/shipengine/insurance.js +61 -1
  94. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +9 -9
  95. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +3 -2
  96. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +8 -6
  97. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +5 -20
  98. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts +2 -0
  99. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts.map +1 -0
  100. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts +8 -0
  101. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts.map +1 -0
  102. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts +22 -0
  103. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts.map +1 -0
  104. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +3 -2
  105. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  106. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +4 -0
  107. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  108. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  109. package/dist/types/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.d.ts.map +1 -1
  110. package/dist/types/elements/customs-form/customs-form-element.d.ts +1219 -0
  111. package/dist/types/elements/customs-form/customs-form-element.d.ts.map +1 -0
  112. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts +12 -0
  113. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts.map +1 -0
  114. package/dist/types/elements/customs-form/customs-form-schema.d.ts +398 -0
  115. package/dist/types/elements/customs-form/customs-form-schema.d.ts.map +1 -0
  116. package/dist/types/elements/customs-form/customs-form-types.d.ts +139 -0
  117. package/dist/types/elements/customs-form/customs-form-types.d.ts.map +1 -0
  118. package/dist/types/elements/customs-form/index.d.ts +4 -0
  119. package/dist/types/elements/customs-form/index.d.ts.map +1 -0
  120. package/dist/types/elements/index.d.ts +1 -0
  121. package/dist/types/elements/index.d.ts.map +1 -1
  122. package/dist/types/elements/labels-grid/labels-grid.d.ts +9 -1
  123. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  124. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +9 -1
  125. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  126. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +9 -1
  127. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  128. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +9 -1
  129. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  130. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +9 -1
  131. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  132. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +9 -1
  133. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  134. package/dist/types/elements/purchase-label/components/index.d.ts +1 -0
  135. package/dist/types/elements/purchase-label/components/index.d.ts.map +1 -1
  136. package/dist/types/elements/purchase-label/components/shipment-form/shipment-form.d.ts.map +1 -1
  137. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts +5 -1
  138. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts.map +1 -1
  139. package/dist/types/elements/purchase-label/hooks/use-insurance-provider-options.d.ts.map +1 -1
  140. package/dist/types/elements/purchase-label/purchase-label.d.ts +9 -1
  141. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  142. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +9 -1
  143. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  144. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +9 -1
  145. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  146. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +9 -1
  147. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  148. package/dist/types/elements/theme-creator/theme-creator.d.ts +9 -1
  149. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  150. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +9 -1
  151. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  152. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +9 -1
  153. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  154. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +9 -1
  155. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  156. package/dist/types/elements/void-label/void-label.d.ts +9 -1
  157. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  158. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  159. package/dist/types/features/manage-carriers/manage-carriers.d.ts.map +1 -1
  160. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  161. package/dist/types/hooks/use-get-funding-source-insurance-provider.d.ts.map +1 -1
  162. package/dist/types/hooks/use-import-sales-order.d.ts +20 -1
  163. package/dist/types/hooks/use-import-sales-order.d.ts.map +1 -1
  164. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts +3 -4
  165. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts.map +1 -1
  166. package/dist/types/locales/en/index.d.ts +9 -1
  167. package/dist/types/locales/en/index.d.ts.map +1 -1
  168. package/dist/types/types/insurance-metadata.d.ts +1 -1
  169. package/dist/types/types/insurance-metadata.d.ts.map +1 -1
  170. package/dist/types/types/rates.d.ts +1 -0
  171. package/dist/types/types/rates.d.ts.map +1 -1
  172. package/dist/types/utilities/feature-flags/feature-flags.d.ts.map +1 -1
  173. package/dist/types/utilities/feature-flags/types.d.ts +4 -0
  174. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  175. package/dist/types/utilities/shipengine/carrier.d.ts.map +1 -1
  176. package/dist/types/utilities/shipengine/insurance.d.ts +31 -0
  177. package/dist/types/utilities/shipengine/insurance.d.ts.map +1 -1
  178. package/dist/types/workflows/account-settings/account-settings.d.ts +9 -1
  179. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  180. package/dist/types/workflows/carrier-services/carrier-services.d.ts +9 -1
  181. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  182. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +9 -1
  183. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  184. package/dist/types/workflows/label-workflow/label-workflow.d.ts +9 -1
  185. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  186. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  187. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  188. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -5
  189. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  190. package/dist/types/workflows/onboarding/onboarding.d.ts +9 -1
  191. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  192. package/package.json +3 -3
@@ -10,6 +10,7 @@ var React = require('react');
10
10
  var reactI18next = require('react-i18next');
11
11
  var manageCarriers_styles = require('./manage-carriers.styles.cjs');
12
12
  var useListFundingSourceCarriers = require('./hooks/use-list-funding-source-carriers.cjs');
13
+ var insurance = require('../../utilities/shipengine/insurance.cjs');
13
14
  var skeletonCarrierRow = require('../../components/skeleton/skeleton-carrier-row.cjs');
14
15
  var manageFunding = require('../manage-funding/manage-funding.cjs');
15
16
  var manageCarriersRow = require('./manage-carriers-row/manage-carriers-row.cjs');
@@ -43,6 +44,7 @@ const ShipEngineCarriers = ({
43
44
  refetch: refetchCarriers,
44
45
  refetchInsuranceProviderAcceptedTerms
45
46
  } = useListFundingSourceCarriers.useListFundingSourceCarriers();
47
+ const isInsuranceEnabled = insurance.getIsFundingSourceInsuranceProviderEnabledAndSupported(insuranceProviderProfiles, globalFeatures.enableXCover, globalFeatures.enableParcelGuard);
46
48
  const hasConnectedCarriers = React.useMemo(() => fundingSourceCarriers === null || fundingSourceCarriers === void 0 ? void 0 : fundingSourceCarriers.some(c => c.isConnected), [fundingSourceCarriers]);
47
49
  const {
48
50
  data: warehouses
@@ -103,10 +105,10 @@ const ShipEngineCarriers = ({
103
105
  const handleRegisterProvider = React.useCallback(p => _tslib.__awaiter(void 0, void 0, void 0, function* () {
104
106
  return yield handleRegistration({
105
107
  insuranceProviders: [{
106
- acceptedTerms: [{
107
- termType: p.terms.termType,
108
- version: p.terms.version
109
- }],
108
+ acceptedTerms: [...p.terms.map(term => ({
109
+ termType: term.termType,
110
+ version: term.version
111
+ }))],
110
112
  agreeToTerms: true,
111
113
  fundingSourceId: fundingSourceId !== null && fundingSourceId !== void 0 ? fundingSourceId : "",
112
114
  provider: p.provider
@@ -178,12 +180,12 @@ const ShipEngineCarriers = ({
178
180
  }),
179
181
  setCarrierToConnect: setCarrierToConnect
180
182
  })
181
- }, carrier.carrier.carrierProfile.carrierCode)), globalFeatures.enableParcelGuard && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => jsxRuntime.jsx("li", {
183
+ }, carrier.carrier.carrierProfile.carrierCode)), isInsuranceEnabled && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => jsxRuntime.jsx("li", {
182
184
  children: jsxRuntime.jsx(manageInsuranceProviderRow.ManageInsuranceProviderRow, {
183
185
  insuranceProviderProfile: p,
184
186
  registerProvider: handleRegisterProvider
185
187
  })
186
- }, p.terms.termType)))]
188
+ }, p.terms[0].termType)))]
187
189
  })
188
190
  })]
189
191
  });
@@ -22,8 +22,8 @@ const useConfigureShipment = ({
22
22
  warehouseId,
23
23
  useWarehouses = true
24
24
  }) => {
25
- // Track when we've created a replacement shipment for a "not found" case
26
- const [replacementShipmentId, setReplacementShipmentId] = React.useState();
25
+ // Track when user manually created a shipment for a "not found" case
26
+ const [manuallyCreatedShipmentId, setManuallyCreatedShipmentId] = React.useState();
27
27
  // Queue of incomplete requirement keys (i.e., Ship From addresses, Warehouses, Carriers)
28
28
  const incompleteRequirementsKeys = React.useMemo(() => [], []);
29
29
  const {
@@ -47,6 +47,7 @@ const useConfigureShipment = ({
47
47
  // Dont run Sales Order Import unless the Sales order info is present
48
48
  enabled: !!externalOrderNumber || !!orderSourceCode || !!salesOrderId || !!externalOrderId,
49
49
  externalOrderId,
50
+ externalOrderNumber,
50
51
  orderSourceCode,
51
52
  salesOrderId
52
53
  });
@@ -63,24 +64,49 @@ const useConfigureShipment = ({
63
64
  isInitialLoading: isExternalShipmentInitialLoading,
64
65
  isFetching: isExternalShipmentFetching
65
66
  } = reactApi.useGetShipmentByExternalId({
66
- enabled: !!externalShipmentId && !shipmentId,
67
+ enabled: !!externalShipmentId && !shipmentId && !manuallyCreatedShipmentId,
67
68
  queryFnParams: {
68
69
  externalId: externalShipmentId !== null && externalShipmentId !== void 0 ? externalShipmentId : ""
69
70
  }
71
+ // TODO: weird refetch on focus behavior
70
72
  });
73
+ // #region List Sales Order Shipments
74
+ const externalOrderIds = React.useMemo(() => {
75
+ return externalOrderId ? [externalOrderId] : undefined;
76
+ }, [externalOrderId]);
77
+ const salesOrderIds = React.useMemo(() => {
78
+ return salesOrderId ? [salesOrderId] : salesOrder$1 ? [salesOrder$1.salesOrderId] :
79
+ // TODO: current workaround - revert to being undefined rather than empty list
80
+ [];
81
+ }, [salesOrderId, salesOrder$1]);
82
+ const shipmentIds = React.useMemo(() => {
83
+ return manuallyCreatedShipmentId ? [manuallyCreatedShipmentId] : shipmentId ? [shipmentId] : externalShipment ? [externalShipment.shipmentId] : newV1Shipment ? [newV1Shipment.shipments[0].shipmentId] : undefined;
84
+ }, [manuallyCreatedShipmentId, shipmentId, externalShipment, newV1Shipment]);
85
+ const listSalesOrderShipmentsParams = React.useMemo(() => {
86
+ // TODO: useListSalesOrderShipments needs to be able to use the enabled prop, this is a workaround
87
+ // Prevent query with stale params during shipment creation or when V1 shipment exists but manuallyCreatedShipmentId not set
88
+ if (creatingV1Shipment && !manuallyCreatedShipmentId || newV1Shipment && !manuallyCreatedShipmentId) {
89
+ return {};
90
+ }
91
+ if (manuallyCreatedShipmentId) {
92
+ return {
93
+ shipmentIds
94
+ };
95
+ }
96
+ return {
97
+ externalOrderIds,
98
+ salesOrderIds,
99
+ shipmentIds
100
+ };
101
+ }, [manuallyCreatedShipmentId, externalOrderIds, salesOrderIds, shipmentIds, creatingV1Shipment, newV1Shipment]);
71
102
  const {
72
103
  data: salesOrderShipments,
73
104
  error: listSalesOrderShipmentsErrors,
74
105
  refetch: refetchSalesOrderShipments,
75
106
  isInitialLoading: listSalesOrderShipmentsInitiallyLoading,
76
107
  isFetching: listSalesOrderShipmentsIsFetching
77
- } = reactApi.useListSalesOrderShipments({
78
- externalOrderIds: externalOrderId ? [externalOrderId] : undefined,
79
- salesOrderIds: salesOrderId ? [salesOrderId] : salesOrder$1 ? [salesOrder$1.salesOrderId] :
80
- // TODO: current workaround - revert to being undefined rather than empty list
81
- [],
82
- shipmentIds: replacementShipmentId ? [replacementShipmentId] : shipmentId ? [shipmentId] : externalShipment ? [externalShipment.shipmentId] : newV1Shipment ? [newV1Shipment.shipments[0].shipmentId] : undefined
83
- });
108
+ } = reactApi.useListSalesOrderShipments(listSalesOrderShipmentsParams);
109
+ // #endregion
84
110
  const {
85
111
  error: createSalesOrderShipmentErrors,
86
112
  mutateAsync: createSalesOrderShipment,
@@ -105,6 +131,7 @@ const useConfigureShipment = ({
105
131
  }
106
132
  return null;
107
133
  }), [createV1Shipment, defaultShipFromAddress, defaultWarehouse, warehouseId, refetchSalesOrderShipments]);
134
+ // #region Create Sales Order Shipment
108
135
  // Handles the creation of new shipments for the sales order flow and one-off flow
109
136
  const handleShipmentCreation = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
110
137
  var _a, _b, _c;
@@ -154,17 +181,23 @@ const useConfigureShipment = ({
154
181
  }
155
182
  // Create a Shipment for one-off flow
156
183
  if (!salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId) {
157
- yield createV1ShipmentWithDefaults();
184
+ const v1Shipment = yield createV1ShipmentWithDefaults();
185
+ // Set manuallyCreatedShipmentId to ensure proper query parameter handling
186
+ if (v1Shipment) {
187
+ setManuallyCreatedShipmentId(v1Shipment.shipments[0].shipmentId);
188
+ }
158
189
  }
159
190
  }), [createSalesOrderShipment, createV1ShipmentWithDefaults, creatingSalesOrderShipment, creatingV1Shipment, defaultShipFromAddress, defaultWarehouse, externalOrderId, externalOrderNumber, externalShipmentId, incompleteRequirementsKeys, isExternalShipmentFetching, isExternalShipmentInitialLoading, isFetchingWarehouses, isInitialLoadingWarehouses, labelPurchasedSalesOrderShipment, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching, orderSourceCode, pendingSalesOrderShipment, salesOrder$1, salesOrderId, salesOrderShipmentCreated, shipFromAddresses === null || shipFromAddresses === void 0 ? void 0 : shipFromAddresses.length, shipmentId, useWarehouses, v1shipmentCreated, warehouseId, warehouses$1]);
191
+ // #endregion
160
192
  const createNewShipmentForNotFound = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
161
193
  // Force create a new shipment even if shipmentId exists (for shipment_not_found case)
162
194
  const v1Shipment = yield createV1ShipmentWithDefaults();
163
195
  if (v1Shipment) {
164
- // Store the new shipment ID to override the stale one
165
- setReplacementShipmentId(v1Shipment.shipments[0].shipmentId);
196
+ setManuallyCreatedShipmentId(v1Shipment.shipments[0].shipmentId);
197
+ // Refetch to ensure we have the latest shipment data
198
+ yield refetchSalesOrderShipments();
166
199
  }
167
- }), [createV1ShipmentWithDefaults]);
200
+ }), [createV1ShipmentWithDefaults, refetchSalesOrderShipments]);
168
201
  const refetchPendingSalesOrderShipments = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
169
202
  const {
170
203
  data: shipments
@@ -16,14 +16,15 @@ var elementsContextProvider = require('../elements-provider/elements-context-pro
16
16
  const useGetFundingSourceInsuranceProvider = () => {
17
17
  const {
18
18
  globalFeatures: {
19
- enableParcelGuard
19
+ enableParcelGuard,
20
+ enableXCover
20
21
  }
21
22
  } = elementsContextProvider.useElements();
22
23
  const {
23
24
  data,
24
25
  refetch: refetchInsuranceAcceptedTerms
25
26
  } = reactApi.useGetInsuranceFundingSourceAcceptedTerms({
26
- enabled: enableParcelGuard
27
+ enabled: enableParcelGuard || enableXCover
27
28
  });
28
29
  const fundingSourceInsuranceProvider = React.useMemo(() => {
29
30
  var _a;
@@ -32,13 +33,12 @@ const useGetFundingSourceInsuranceProvider = () => {
32
33
  if (enableParcelGuard && term.termType === "parcelguard_terms") {
33
34
  provider = "parcelguard";
34
35
  }
35
- // TODO: once x_cover is enabled, confirm the term type and uncomment
36
- // if (term.termType === "x_cover_terms") {
37
- // provider = "x_cover";
38
- // }
36
+ if (enableXCover && term.termType === "xcover_terms") {
37
+ provider = "x_cover";
38
+ }
39
39
  });
40
40
  return provider;
41
- }, [data, enableParcelGuard]);
41
+ }, [data === null || data === void 0 ? void 0 : data.acceptedTerms, enableParcelGuard, enableXCover]);
42
42
  return {
43
43
  fundingSourceInsuranceProvider,
44
44
  refetchInsuranceAcceptedTerms
@@ -5,26 +5,49 @@ var reactApi = require('@shipengine/react-api');
5
5
  var reactQuery = require('@tanstack/react-query');
6
6
  var React = require('react');
7
7
 
8
+ /**
9
+ * Imports and retrieves sales orders by either:
10
+ * - Sales order ID lookup
11
+ * - External order ID/number search
12
+ *
13
+ * 1. First attempts to find the sales order using provided identifiers
14
+ * 2. If no order is found and initial fetches have run, automatically refreshes order sources
15
+ * 3. Invalidates relevant queries after successful refresh to refetch updated data
16
+ *
17
+ * @returns Object:
18
+ * - `salesOrder`: The found sales order, or undefined
19
+ * - `isLoading`: Boolean indicating if the hook is currently loading data
20
+ * - `errors`: Array of errors from failed queries, or undefined
21
+ */
8
22
  const useImportSalesOrder = ({
9
23
  enabled,
10
24
  externalOrderId,
25
+ externalOrderNumber,
11
26
  orderSourceCode,
12
27
  salesOrderId
13
28
  }) => {
14
29
  var _a, _b, _c;
15
30
  const queryClient = reactQuery.useQueryClient();
16
31
  const [refreshAttempted, setRefreshAttempted] = React.useState(false);
17
- // attempt to get sales order through external id means
18
- const orderByExternalIdQuery = reactApi.useGetSalesOrderByExternalOrderId(externalOrderId, {
19
- enabled: enabled && !!externalOrderId && !salesOrderId
32
+ // Fetch sales order by External Order ID or External Order Number
33
+ const salesOrderByExternalIdQuery = reactApi.useListSalesOrders({
34
+ externalOrderId,
35
+ externalOrderNumber
20
36
  });
21
37
  // if an order was found through external search disable this query
22
- const orderByIdQuery = reactApi.useGetSalesOrder(salesOrderId, {
38
+ const salesOrderByIdQuery = reactApi.useGetSalesOrder(salesOrderId, {
23
39
  enabled: enabled && !!salesOrderId
24
40
  });
25
- const salesOrder = React.useMemo(() => salesOrderId ? orderByIdQuery.data : orderByExternalIdQuery.data, [salesOrderId, orderByIdQuery.data, orderByExternalIdQuery.data]);
41
+ const salesOrder = React.useMemo(() => {
42
+ if (salesOrderId) {
43
+ return salesOrderByIdQuery.data;
44
+ } else if (salesOrderByExternalIdQuery.data && salesOrderByExternalIdQuery.data.length > 0) {
45
+ return salesOrderByExternalIdQuery.data[0];
46
+ }
47
+ return undefined;
48
+ }, [salesOrderId, salesOrderByIdQuery.data, salesOrderByExternalIdQuery.data]);
26
49
  // Determine if the initial fetch attempts (if applicable) have settled without finding data
27
- const initialFetchSettled = (salesOrderId ? !orderByIdQuery.isInitialLoading && !orderByIdQuery.isFetching : true) && (externalOrderId && !salesOrderId ? !orderByExternalIdQuery.isLoading && !orderByExternalIdQuery.isFetching : true);
50
+ const initialFetchSettled = (salesOrderId ? !salesOrderByIdQuery.isInitialLoading && !salesOrderByIdQuery.isFetching : true) && ((externalOrderNumber || externalOrderId) && !salesOrderId ? !salesOrderByExternalIdQuery.isLoading && !salesOrderByExternalIdQuery.isFetching : true);
28
51
  const shouldAttemptRefresh = enabled && initialFetchSettled && !salesOrder && !refreshAttempted;
29
52
  const listOrderSourcesQuery = reactApi.useListOrderSources({
30
53
  enabled: shouldAttemptRefresh
@@ -34,6 +57,17 @@ const useImportSalesOrder = ({
34
57
  isLoading: isRefreshingOrderSource,
35
58
  mutateAsync: refreshOrderSource
36
59
  } = reactApi.useRefreshOrderSource();
60
+ const invalidateSalesOrderQueries = React.useCallback(() => {
61
+ if (salesOrderId) {
62
+ void queryClient.invalidateQueries({
63
+ queryKey: ["useGetSalesOrder", salesOrderId]
64
+ });
65
+ } else if (externalOrderId || externalOrderNumber) {
66
+ void queryClient.invalidateQueries({
67
+ queryKey: ["useListSalesOrders", externalOrderId, externalOrderNumber]
68
+ });
69
+ }
70
+ }, [queryClient, salesOrderId, externalOrderId, externalOrderNumber]);
37
71
  React.useEffect(() => {
38
72
  if (listOrderSourcesQuery.isSuccess && listOrderSourcesQuery.data && shouldAttemptRefresh && !isRefreshingOrderSource) {
39
73
  const orderSourcesToRefresh = orderSourceCode ? listOrderSourcesQuery.data.filter(o => o.orderSourceCode.includes(orderSourceCode) && o.active) : listOrderSourcesQuery.data.filter(o => o.active);
@@ -41,29 +75,20 @@ const useImportSalesOrder = ({
41
75
  setRefreshAttempted(true);
42
76
  void (() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
43
77
  yield Promise.all(orderSourcesToRefresh.map(o => refreshOrderSource(o.orderSourceId, {
44
- // Invalidate relevant queries on successful refresh
78
+ // Invalidate relevant queries
45
79
  onSuccess: () => {
46
- if (salesOrderId) {
47
- void queryClient.invalidateQueries({
48
- queryKey: ["useGetSalesOrder", salesOrderId]
49
- });
50
- }
51
- if (externalOrderId && !salesOrderId) {
52
- void queryClient.invalidateQueries({
53
- queryKey: ["useGetSalesOrderByExternalOrderId", externalOrderId]
54
- });
55
- }
80
+ invalidateSalesOrderQueries();
56
81
  }
57
82
  })));
58
83
  }))();
59
84
  }
60
85
  }
61
86
  }, [externalOrderId, isRefreshingOrderSource, listOrderSourcesQuery.data, listOrderSourcesQuery.isSuccess, orderSourceCode, queryClient, refreshOrderSource, salesOrderId, shouldAttemptRefresh]);
62
- const isLoading = orderByIdQuery.isInitialLoading || orderByExternalIdQuery.isInitialLoading || listOrderSourcesQuery.isInitialLoading || isRefreshingOrderSource;
63
- const errors = [...((_a = orderByIdQuery.error) !== null && _a !== void 0 ? _a : []), ...((_b = orderByExternalIdQuery.error) !== null && _b !== void 0 ? _b : []), ...((_c = listOrderSourcesQuery.error) !== null && _c !== void 0 ? _c : []), ...(refreshOrderSourceErrors !== null && refreshOrderSourceErrors !== void 0 ? refreshOrderSourceErrors : [])];
87
+ const isLoading = salesOrderByIdQuery.isInitialLoading || salesOrderByExternalIdQuery.isInitialLoading || listOrderSourcesQuery.isInitialLoading || isRefreshingOrderSource;
88
+ const errors = [...((_a = salesOrderByIdQuery.error) !== null && _a !== void 0 ? _a : []), ...((_b = salesOrderByExternalIdQuery.error) !== null && _b !== void 0 ? _b : []), ...((_c = listOrderSourcesQuery.error) !== null && _c !== void 0 ? _c : []), ...(refreshOrderSourceErrors !== null && refreshOrderSourceErrors !== void 0 ? refreshOrderSourceErrors : [])];
64
89
  return {
65
90
  errors: errors.length > 0 ? errors : undefined,
66
- isLoading,
91
+ isLoading: isLoading && errors.length === 0,
67
92
  salesOrder
68
93
  };
69
94
  };
@@ -2,14 +2,16 @@
2
2
 
3
3
  var _tslib = require('../_virtual/_tslib.cjs');
4
4
  var reactApi = require('@shipengine/react-api');
5
+ var insurance = require('../utilities/shipengine/insurance.cjs');
5
6
  var React = require('react');
6
7
  var elementsContextProvider = require('../elements-provider/elements-context-provider.cjs');
7
8
 
8
9
  const useManageFundingSourceInsurance = () => {
9
- var _a;
10
+ var _a, _b;
10
11
  const {
11
12
  globalFeatures: {
12
- enableParcelGuard
13
+ enableParcelGuard,
14
+ enableXCover
13
15
  }
14
16
  } = elementsContextProvider.useElements();
15
17
  const {
@@ -21,25 +23,12 @@ const useManageFundingSourceInsurance = () => {
21
23
  data: insuranceAcceptedTerms,
22
24
  isLoading: loadingInsuranceAcceptedTerms
23
25
  } = reactApi.useGetInsuranceFundingSourceAcceptedTerms({
24
- enabled: enableParcelGuard
26
+ enabled: enableParcelGuard || enableXCover
25
27
  });
26
28
  const insuranceProviderProfiles = React.useMemo(() => {
27
29
  var _a;
28
- return (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.optionalTerms.map(terms => {
29
- const providerLookup = {
30
- parcelguard_terms: "parcelguard"
31
- };
32
- const friendlyNameLookup = {
33
- parcelguard_terms: "ParcelGuard"
34
- };
35
- const provider = providerLookup[terms.termType];
36
- const friendlyName = friendlyNameLookup[terms.termType];
37
- return {
38
- friendlyName,
39
- provider,
40
- terms
41
- };
42
- });
30
+ const optionalTerms = (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.optionalTerms;
31
+ return insurance.groupTermsByProvider(optionalTerms);
43
32
  }, [fundingSourceMetadata]);
44
33
  const {
45
34
  mutateAsync: registerCarrier
@@ -79,12 +68,15 @@ const useManageFundingSourceInsurance = () => {
79
68
  }
80
69
  }), [fundingSources, insuranceProviderProfiles, registerCarrier]);
81
70
  const hasInsuranceToRegister = React.useMemo(() => {
82
- return enableParcelGuard &&
83
- // has insurance provider profiles but none have been accepted AND has a funding source
84
- !!(insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) && (insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms.length) === 0 && !!(fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length);
85
- }, [enableParcelGuard, insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length, insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms.length, fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length]);
71
+ var _a, _b;
72
+ const isProviderEnabled = insurance.getIsFundingSourceInsuranceProviderEnabledAndSupported(insuranceProviderProfiles, enableXCover, enableParcelGuard);
73
+ const hasProfiles = Boolean(insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length);
74
+ const hasNoAcceptedTerms = ((_b = (_a = insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) === 0;
75
+ const hasFundingSources = Boolean(fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length);
76
+ return isProviderEnabled && hasProfiles && hasNoAcceptedTerms && hasFundingSources;
77
+ }, [insuranceProviderProfiles, enableXCover, enableParcelGuard, (_a = insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms) === null || _a === void 0 ? void 0 : _a.length, fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length]);
86
78
  return {
87
- fundingSourceCountryCode: (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.countryCode,
79
+ fundingSourceCountryCode: (_b = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _b === void 0 ? void 0 : _b.defaultFundingSourceProfile.countryCode,
88
80
  hasInsuranceToRegister,
89
81
  insuranceAcceptedTerms: insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms,
90
82
  insuranceProviderProfiles,
@@ -22,6 +22,8 @@ var selectLabelLayoutElement = require('./elements/select-label-layout/select-la
22
22
  var paymentMethodSettingsElement = require('./elements/payment-method-settings/payment-method-settings-element.cjs');
23
23
  var carrierServices = require('./workflows/carrier-services/carrier-services.cjs');
24
24
  var transactionHistoryElement = require('./elements/transaction-history/transaction-history-element.cjs');
25
+ var customsFormElement = require('./elements/customs-form/customs-form-element.cjs');
26
+ var customsFormTypes = require('./elements/customs-form/customs-form-types.cjs');
25
27
  var useAddressValidation = require('./hooks/use-address-validation.cjs');
26
28
  var useHelpers = require('./hooks/use-helpers.cjs');
27
29
  var useConfigureShipment = require('./hooks/use-configure-shipment.cjs');
@@ -77,6 +79,9 @@ exports.SelectLabelLayout = selectLabelLayoutElement;
77
79
  exports.PaymentMethodSettings = paymentMethodSettingsElement;
78
80
  exports.CarrierServices = carrierServices;
79
81
  exports.TransactionHistory = transactionHistoryElement;
82
+ exports.CustomsForm = customsFormElement;
83
+ exports.extractCustomsFormData = customsFormTypes.extractCustomsFormData;
84
+ exports.getDefaultCustomsFormValues = customsFormTypes.getDefaultCustomsFormValues;
80
85
  exports.useAddressValidation = useAddressValidation.useAddressValidation;
81
86
  exports.useHelpers = useHelpers.useHelpers;
82
87
  exports.useConfigureShipment = useConfigureShipment.useConfigureShipment;
@@ -248,7 +248,7 @@ var common = {
248
248
  parcelguard: "ParcelGuard",
249
249
  shipsurance: "Shipsurance",
250
250
  thirdParty: "Third Party",
251
- x_cover: "XCover"
251
+ xCover: "XCover"
252
252
  },
253
253
  loading: {
254
254
  accountSettings: "Loading account settings...",
@@ -93,7 +93,15 @@ var purchaseLabel = {
93
93
  rateSavings: "Save ${{amount}}",
94
94
  upsGroundSaverTermsAcknowledgement: "To start shipping with UPS Ground Saver, you are confirming that you have agreed to the <1>terms and conditions</1>",
95
95
  dhlExpressTermsAcknowledgement: "To start shipping with DHL, you are confirming that you have agreed to the <1>terms and conditions</1>",
96
- noRateService: "Rate and services will be billed based on carrier."
96
+ noRateService: "Rate and services will be billed based on carrier.",
97
+ rateAttributes: {
98
+ bestValue: "Best Value",
99
+ cheapest: "Cheapest",
100
+ fastest: "Fastest",
101
+ bestValueTooltip: "Lowest cost option arriving on a specified date within 4 days, with free carrier coverage up to $100 and a free dropoff option.",
102
+ cheapestTooltip: "Lowest cost option.",
103
+ fastestTooltip: "Fastest delivery option."
104
+ }
97
105
  },
98
106
  windsorFramework: {
99
107
  movementIndicator: "Movement Indicator",
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var version = "2.26.5";
3
+ var version = "2.27.0";
4
4
 
5
5
  exports.version = version;
@@ -28,6 +28,7 @@ const defaultFeatureFlags = {
28
28
  globalFeatures: {
29
29
  disableShadowDOM: false,
30
30
  enableParcelGuard: true,
31
+ enableXCover: false,
31
32
  isSandbox: false,
32
33
  poweredByShipEngine: true,
33
34
  showVatSettings: false,
@@ -2,6 +2,7 @@
2
2
 
3
3
  var icon = require('../../assets/parcelguard/icon.svg.cjs');
4
4
  var logo = require('../../assets/parcelguard/logo.svg.cjs');
5
+ var logo$1 = require('../../assets/xcover/logo.svg.cjs');
5
6
 
6
7
  const USPS_CARRIER_CODES = ["usps", "stamps_com"];
7
8
  /**
@@ -59,6 +60,9 @@ const getLogoOrIconByCarrierCode = (carrierCode, type) => {
59
60
  if (carrierCode === "parcelguard") {
60
61
  return type === "logo" ? logo : icon;
61
62
  }
63
+ if (carrierCode === "xcover") {
64
+ return logo$1;
65
+ }
62
66
  const carrierCodeOverrides = {
63
67
  stamps_com: "stamps_com_wl",
64
68
  usps: "stamps_com_wl"
@@ -54,5 +54,8 @@ exports.isMetricWeightUnit = weight.isMetricWeightUnit;
54
54
  exports.isFlatRatePackageCode = _package.isFlatRatePackageCode;
55
55
  exports.getDefaultWarehouse = warehouses.getDefaultWarehouse;
56
56
  exports.getWarehouseById = warehouses.getWarehouseById;
57
+ exports.filterProfilesByAcceptedTerms = insurance.filterProfilesByAcceptedTerms;
57
58
  exports.getInsuranceProviderWithFriendlyName = insurance.getInsuranceProviderWithFriendlyName;
59
+ exports.getIsFundingSourceInsuranceProviderEnabledAndSupported = insurance.getIsFundingSourceInsuranceProviderEnabledAndSupported;
58
60
  exports.getIsInsuraceProviderAccepted = insurance.getIsInsuraceProviderAccepted;
61
+ exports.groupTermsByProvider = insurance.groupTermsByProvider;
@@ -12,6 +12,22 @@ var insuranceProviderMetadatas = require('../../data/insurance-provider-metadata
12
12
  const getInsuranceProviderWithFriendlyName = termType => {
13
13
  return insuranceProviderMetadatas.default[termType];
14
14
  };
15
+ /**
16
+ * @internal
17
+ *
18
+ * # Insurance Utilities - getIsFundingSourceInsuranceProviderEnabledAndSupported
19
+ *
20
+ * Determines if any insurance providers are enabled and supported based on feature flags and funding source data.
21
+ *
22
+ * @category Utilities
23
+ */
24
+ const getIsFundingSourceInsuranceProviderEnabledAndSupported = (insuranceProviders, xcoverEnabled, parcelguardEnabled) => {
25
+ if (!(insuranceProviders === null || insuranceProviders === void 0 ? void 0 : insuranceProviders.length)) return false;
26
+ const supportedProviders = insuranceProviders.map(p => p.provider);
27
+ if (xcoverEnabled && supportedProviders.includes("xcover")) return true;
28
+ if (parcelguardEnabled && supportedProviders.includes("parcelguard")) return true;
29
+ return false;
30
+ };
15
31
  /**
16
32
  * @internal
17
33
  *
@@ -22,6 +38,53 @@ const getInsuranceProviderWithFriendlyName = termType => {
22
38
  const getIsInsuraceProviderAccepted = (termType, acceptedTerms) => {
23
39
  return !!(acceptedTerms === null || acceptedTerms === void 0 ? void 0 : acceptedTerms.map(t => t.termType).includes(termType));
24
40
  };
41
+ /**
42
+ * @internal
43
+ *
44
+ * # Insurance Utilities - groupTermsByProvider
45
+ *
46
+ * Groups optional terms by insurance provider, creating InsuranceProviderProfile objects.
47
+ *
48
+ * @category Utilities
49
+ */
50
+ const groupTermsByProvider = optionalTerms => {
51
+ if (!optionalTerms) return [];
52
+ // Group terms by provider
53
+ const providerTermsMap = new Map();
54
+ optionalTerms.forEach(term => {
55
+ const providerInfo = getInsuranceProviderWithFriendlyName(term.termType);
56
+ if (providerInfo === null || providerInfo === void 0 ? void 0 : providerInfo.provider) {
57
+ const existingTerms = providerTermsMap.get(providerInfo.provider) || [];
58
+ providerTermsMap.set(providerInfo.provider, [...existingTerms, term]);
59
+ }
60
+ });
61
+ // Convert Map to InsuranceProviderProfile array
62
+ return Array.from(providerTermsMap.entries()).map(([, terms]) => {
63
+ const providerInfo = getInsuranceProviderWithFriendlyName(terms[0].termType);
64
+ return Object.assign(Object.assign({}, providerInfo), {
65
+ terms
66
+ });
67
+ });
68
+ };
69
+ /**
70
+ * @internal
71
+ *
72
+ * # Insurance Utilities - filterProfilesByAcceptedTerms
73
+ *
74
+ * Filters insurance provider profiles to exclude those that have already been accepted.
75
+ *
76
+ * @category Utilities
77
+ */
78
+ const filterProfilesByAcceptedTerms = (profiles, acceptedTerms) => {
79
+ if (!(acceptedTerms === null || acceptedTerms === void 0 ? void 0 : acceptedTerms.length)) return profiles;
80
+ const connectedTermTypes = new Set(acceptedTerms.map(t => t.termType));
81
+ return profiles.filter(profile => {
82
+ return !profile.terms.some(term => connectedTermTypes.has(term.termType));
83
+ });
84
+ };
25
85
 
86
+ exports.filterProfilesByAcceptedTerms = filterProfilesByAcceptedTerms;
26
87
  exports.getInsuranceProviderWithFriendlyName = getInsuranceProviderWithFriendlyName;
88
+ exports.getIsFundingSourceInsuranceProviderEnabledAndSupported = getIsFundingSourceInsuranceProviderEnabledAndSupported;
27
89
  exports.getIsInsuraceProviderAccepted = getIsInsuraceProviderAccepted;
90
+ exports.groupTermsByProvider = groupTermsByProvider;
@@ -107,12 +107,12 @@ const useConfirmationAndSubmissionStep = ({
107
107
  iovationBlackbox
108
108
  }) {
109
109
  const addressToRegister = address !== null && address !== void 0 ? address : defaultWarehouse.originAddress;
110
- // parcel guard check
111
- const insuranceProviders = globalFeatures.enableParcelGuard ? insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => ({
112
- acceptedTerms: [{
113
- termType: p.terms.termType,
114
- version: p.terms.version
115
- }],
110
+ // funding source insurance check
111
+ const insuranceProviders = globalFeatures.enableParcelGuard || globalFeatures.enableXCover ? insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => ({
112
+ acceptedTerms: p.terms.map(term => ({
113
+ termType: term.termType,
114
+ version: term.version
115
+ })),
116
116
  agreeToTerms: true,
117
117
  fundingSourceId,
118
118
  provider: p.provider
@@ -146,7 +146,7 @@ const useConfirmationAndSubmissionStep = ({
146
146
  console.error(error);
147
147
  throw error;
148
148
  }
149
- }), [registerCarrier, globalFeatures.enableParcelGuard]);
149
+ }), [globalFeatures.enableParcelGuard, globalFeatures.enableXCover, registerCarrier]);
150
150
  const onboardSeller = React.useCallback(({
151
151
  carrierProfiles,
152
152
  fundingSourceRequiredTerms,
@@ -205,7 +205,7 @@ const useConfirmationAndSubmissionStep = ({
205
205
  yield createHandleCarrierConnections({
206
206
  carrierProfiles,
207
207
  defaultWarehouse: warehouse,
208
- insuranceProviderProfiles: globalFeatures.enableParcelGuard ? insuranceProviderProfiles : undefined
208
+ insuranceProviderProfiles
209
209
  })(fundingSource.fundingSource.fundingSourceId, {
210
210
  iovationBlackbox
211
211
  });
@@ -215,7 +215,7 @@ const useConfirmationAndSubmissionStep = ({
215
215
  }
216
216
  }
217
217
  }
218
- }), [addSandboxCarriers, createFundingSource, createHandleCarrierConnections, createOrUpdateWarehouse, getToken, globalFeatures.enableParcelGuard, globalFeatures.isSandbox]);
218
+ }), [addSandboxCarriers, createFundingSource, createHandleCarrierConnections, createOrUpdateWarehouse, getToken, globalFeatures.isSandbox]);
219
219
  const updateExistingFundingSource = React.useCallback(({
220
220
  carrierProfiles,
221
221
  fundingSource,
@@ -30,7 +30,8 @@ const TermsAgreementForm = ({
30
30
  } = reactI18next.useTranslation();
31
31
  const {
32
32
  globalFeatures: {
33
- enableParcelGuard
33
+ enableParcelGuard,
34
+ enableXCover
34
35
  }
35
36
  } = elementsContextProvider.useElements();
36
37
  const [showTerms, setShowTerms] = React.useState(false);
@@ -109,7 +110,7 @@ const TermsAgreementForm = ({
109
110
  }), carrierTerms.map((term, idx) => jsxRuntime.jsx(displayTerm.DisplayTerm, {
110
111
  terms: term
111
112
  }, idx))]
112
- }), enableParcelGuard && !!insuranceProviderTerms.length && jsxRuntime.jsxs(jsxRuntime.Fragment, {
113
+ }), (enableParcelGuard || enableXCover) && !!insuranceProviderTerms.length && jsxRuntime.jsxs(jsxRuntime.Fragment, {
113
114
  children: [jsxRuntime.jsx(spacer.Spacer, {}), jsxRuntime.jsx(giger.Typography, {
114
115
  bold: true,
115
116
  variant: "body1",