@shipengine/elements 2.26.4 → 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 (200) 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/components/shipment-not-found-error/shipment-not-found-error.cjs +2 -17
  10. package/dist/cjs/components/suspend-purchase/suspend-purchase.cjs +3 -3
  11. package/dist/cjs/data/insurance-provider-metadatas.json.cjs +10 -4
  12. package/dist/cjs/elements/customs-form/customs-form-element.cjs +294 -0
  13. package/dist/cjs/elements/customs-form/customs-form-element.stories.cjs +243 -0
  14. package/dist/cjs/elements/customs-form/customs-form-schema.cjs +59 -0
  15. package/dist/cjs/elements/customs-form/customs-form-types.cjs +63 -0
  16. package/dist/cjs/elements/customs-form/index.cjs +10 -0
  17. package/dist/cjs/elements/index.cjs +5 -0
  18. package/dist/cjs/elements/manage-carriers/manage-carriers.cjs +1 -1
  19. package/dist/cjs/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.cjs +1 -1
  20. package/dist/cjs/elements/purchase-label/components/index.cjs +2 -0
  21. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +1 -1
  22. package/dist/cjs/elements/purchase-label/components/shipment-form/shipment-form.cjs +4 -3
  23. package/dist/cjs/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.cjs +35 -11
  24. package/dist/cjs/elements/purchase-label/hooks/use-insurance-provider-options.cjs +2 -2
  25. package/dist/cjs/elements/purchase-label/purchase-label.cjs +1 -7
  26. package/dist/cjs/factories/shipengine/address.cjs +114 -0
  27. package/dist/cjs/factories/shipengine/money.cjs +21 -0
  28. package/dist/cjs/factories/shipengine/order-source.cjs +37 -0
  29. package/dist/cjs/factories/shipengine/package.cjs +41 -0
  30. package/dist/cjs/factories/shipengine/resource.cjs +23 -0
  31. package/dist/cjs/factories/shipengine/shipment.cjs +176 -0
  32. package/dist/cjs/factories/shipengine/weight.cjs +44 -0
  33. package/dist/cjs/factories/utils.cjs +19 -0
  34. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +4 -6
  35. package/dist/cjs/features/manage-carriers/manage-carriers.cjs +8 -6
  36. package/dist/cjs/hooks/use-configure-shipment.cjs +3 -80
  37. package/dist/cjs/hooks/use-get-funding-source-insurance-provider.cjs +7 -7
  38. package/dist/cjs/hooks/use-manage-funding-source-insurance.cjs +15 -23
  39. package/dist/cjs/index.cjs +5 -0
  40. package/dist/cjs/locales/en/common.json.cjs +2 -2
  41. package/dist/cjs/locales/en/purchase-label.json.cjs +9 -8
  42. package/dist/cjs/package.json.cjs +1 -1
  43. package/dist/cjs/utilities/feature-flags/feature-flags.cjs +1 -0
  44. package/dist/cjs/utilities/shipengine/carrier.cjs +4 -0
  45. package/dist/cjs/utilities/shipengine/index.cjs +3 -0
  46. package/dist/cjs/utilities/shipengine/insurance.cjs +63 -0
  47. package/dist/cjs/workflows/label-workflow/label-workflow.cjs +2 -26
  48. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +9 -9
  49. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +3 -2
  50. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +8 -6
  51. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +4 -19
  52. package/dist/esm/assets/xcover/logo.svg.js +23 -0
  53. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/index.js +1 -0
  54. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.js +54 -0
  55. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.js +25 -0
  56. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +52 -42
  57. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +4 -0
  58. package/dist/esm/components/field/rate-select/rate-select.js +80 -49
  59. package/dist/esm/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.js +1 -1
  60. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.js +2 -17
  61. package/dist/esm/components/suspend-purchase/suspend-purchase.js +3 -3
  62. package/dist/esm/data/insurance-provider-metadatas.json.js +9 -4
  63. package/dist/esm/elements/customs-form/customs-form-element.js +291 -0
  64. package/dist/esm/elements/customs-form/customs-form-element.stories.js +232 -0
  65. package/dist/esm/elements/customs-form/customs-form-schema.js +56 -0
  66. package/dist/esm/elements/customs-form/customs-form-types.js +60 -0
  67. package/dist/esm/elements/customs-form/index.js +3 -0
  68. package/dist/esm/elements/index.js +3 -0
  69. package/dist/esm/elements/manage-carriers/manage-carriers.js +1 -1
  70. package/dist/esm/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.js +1 -1
  71. package/dist/esm/elements/purchase-label/components/index.js +1 -0
  72. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +1 -1
  73. package/dist/esm/elements/purchase-label/components/shipment-form/shipment-form.js +4 -3
  74. package/dist/esm/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.js +35 -11
  75. package/dist/esm/elements/purchase-label/hooks/use-insurance-provider-options.js +2 -2
  76. package/dist/esm/elements/purchase-label/purchase-label.js +1 -7
  77. package/dist/esm/elements-provider/elements-context-provider.js +1 -1
  78. package/dist/esm/factories/shipengine/address.js +111 -0
  79. package/dist/esm/factories/shipengine/money.js +19 -0
  80. package/dist/esm/factories/shipengine/order-source.js +34 -0
  81. package/dist/esm/factories/shipengine/package.js +39 -0
  82. package/dist/esm/factories/shipengine/resource.js +21 -0
  83. package/dist/esm/factories/shipengine/shipment.js +168 -0
  84. package/dist/esm/factories/shipengine/weight.js +40 -0
  85. package/dist/esm/factories/utils.js +15 -0
  86. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +5 -7
  87. package/dist/esm/features/manage-carriers/manage-carriers.js +8 -6
  88. package/dist/esm/hooks/use-configure-shipment.js +3 -80
  89. package/dist/esm/hooks/use-get-funding-source-insurance-provider.js +7 -7
  90. package/dist/esm/hooks/use-manage-funding-source-insurance.js +15 -23
  91. package/dist/esm/index.js +3 -0
  92. package/dist/esm/locales/en/common.json.js +2 -2
  93. package/dist/esm/locales/en/purchase-label.json.js +9 -8
  94. package/dist/esm/package.json.js +1 -1
  95. package/dist/esm/utilities/feature-flags/feature-flags.js +1 -0
  96. package/dist/esm/utilities/shipengine/carrier.js +4 -0
  97. package/dist/esm/utilities/shipengine/index.js +1 -1
  98. package/dist/esm/utilities/shipengine/insurance.js +61 -1
  99. package/dist/esm/workflows/label-workflow/label-workflow.js +2 -26
  100. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +9 -9
  101. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +3 -2
  102. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +8 -6
  103. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +5 -20
  104. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts +2 -0
  105. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts.map +1 -0
  106. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts +8 -0
  107. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts.map +1 -0
  108. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts +22 -0
  109. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts.map +1 -0
  110. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +3 -2
  111. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  112. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +4 -0
  113. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  114. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  115. package/dist/types/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.d.ts.map +1 -1
  116. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts +2 -3
  117. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts.map +1 -1
  118. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts +2 -3
  119. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts.map +1 -1
  120. package/dist/types/elements/customs-form/customs-form-element.d.ts +1219 -0
  121. package/dist/types/elements/customs-form/customs-form-element.d.ts.map +1 -0
  122. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts +12 -0
  123. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts.map +1 -0
  124. package/dist/types/elements/customs-form/customs-form-schema.d.ts +398 -0
  125. package/dist/types/elements/customs-form/customs-form-schema.d.ts.map +1 -0
  126. package/dist/types/elements/customs-form/customs-form-types.d.ts +139 -0
  127. package/dist/types/elements/customs-form/customs-form-types.d.ts.map +1 -0
  128. package/dist/types/elements/customs-form/index.d.ts +4 -0
  129. package/dist/types/elements/customs-form/index.d.ts.map +1 -0
  130. package/dist/types/elements/index.d.ts +1 -0
  131. package/dist/types/elements/index.d.ts.map +1 -1
  132. package/dist/types/elements/labels-grid/labels-grid.d.ts +9 -8
  133. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  134. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +9 -8
  135. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  136. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +9 -8
  137. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  138. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +9 -8
  139. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  140. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +9 -8
  141. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  142. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +9 -8
  143. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  144. package/dist/types/elements/purchase-label/components/index.d.ts +1 -0
  145. package/dist/types/elements/purchase-label/components/index.d.ts.map +1 -1
  146. package/dist/types/elements/purchase-label/components/shipment-form/shipment-form.d.ts.map +1 -1
  147. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts +5 -1
  148. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts.map +1 -1
  149. package/dist/types/elements/purchase-label/hooks/use-insurance-provider-options.d.ts.map +1 -1
  150. package/dist/types/elements/purchase-label/purchase-label.d.ts +9 -8
  151. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  152. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +9 -8
  153. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  154. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +9 -8
  155. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  156. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +9 -8
  157. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  158. package/dist/types/elements/theme-creator/theme-creator.d.ts +9 -8
  159. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  160. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +9 -8
  161. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  162. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +9 -8
  163. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  164. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +9 -8
  165. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  166. package/dist/types/elements/void-label/void-label.d.ts +9 -8
  167. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  168. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  169. package/dist/types/features/manage-carriers/manage-carriers.d.ts.map +1 -1
  170. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  171. package/dist/types/hooks/use-get-funding-source-insurance-provider.d.ts.map +1 -1
  172. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts +3 -4
  173. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts.map +1 -1
  174. package/dist/types/locales/en/index.d.ts +9 -8
  175. package/dist/types/locales/en/index.d.ts.map +1 -1
  176. package/dist/types/types/insurance-metadata.d.ts +1 -1
  177. package/dist/types/types/insurance-metadata.d.ts.map +1 -1
  178. package/dist/types/types/rates.d.ts +1 -0
  179. package/dist/types/types/rates.d.ts.map +1 -1
  180. package/dist/types/utilities/feature-flags/feature-flags.d.ts.map +1 -1
  181. package/dist/types/utilities/feature-flags/types.d.ts +4 -0
  182. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  183. package/dist/types/utilities/shipengine/carrier.d.ts.map +1 -1
  184. package/dist/types/utilities/shipengine/insurance.d.ts +31 -0
  185. package/dist/types/utilities/shipengine/insurance.d.ts.map +1 -1
  186. package/dist/types/workflows/account-settings/account-settings.d.ts +9 -8
  187. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  188. package/dist/types/workflows/carrier-services/carrier-services.d.ts +9 -8
  189. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  190. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +9 -8
  191. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  192. package/dist/types/workflows/label-workflow/label-workflow.d.ts +9 -8
  193. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  194. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  195. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  196. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -5
  197. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  198. package/dist/types/workflows/onboarding/onboarding.d.ts +9 -8
  199. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  200. package/package.json +3 -3
@@ -8,6 +8,7 @@ import { useState, useMemo, useCallback } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
9
9
  import { styles } from './manage-carriers.styles.js';
10
10
  import { useListFundingSourceCarriers } from './hooks/use-list-funding-source-carriers.js';
11
+ import { getIsFundingSourceInsuranceProviderEnabledAndSupported } from '../../utilities/shipengine/insurance.js';
11
12
  import { SkeletonCarrierRow } from '../../components/skeleton/skeleton-carrier-row.js';
12
13
  import { ManageFunding } from '../manage-funding/manage-funding.js';
13
14
  import { ManageCarriersRow } from './manage-carriers-row/manage-carriers-row.js';
@@ -41,6 +42,7 @@ const ShipEngineCarriers = ({
41
42
  refetch: refetchCarriers,
42
43
  refetchInsuranceProviderAcceptedTerms
43
44
  } = useListFundingSourceCarriers();
45
+ const isInsuranceEnabled = getIsFundingSourceInsuranceProviderEnabledAndSupported(insuranceProviderProfiles, globalFeatures.enableXCover, globalFeatures.enableParcelGuard);
44
46
  const hasConnectedCarriers = useMemo(() => fundingSourceCarriers === null || fundingSourceCarriers === void 0 ? void 0 : fundingSourceCarriers.some(c => c.isConnected), [fundingSourceCarriers]);
45
47
  const {
46
48
  data: warehouses
@@ -101,10 +103,10 @@ const ShipEngineCarriers = ({
101
103
  const handleRegisterProvider = useCallback(p => __awaiter(void 0, void 0, void 0, function* () {
102
104
  return yield handleRegistration({
103
105
  insuranceProviders: [{
104
- acceptedTerms: [{
105
- termType: p.terms.termType,
106
- version: p.terms.version
107
- }],
106
+ acceptedTerms: [...p.terms.map(term => ({
107
+ termType: term.termType,
108
+ version: term.version
109
+ }))],
108
110
  agreeToTerms: true,
109
111
  fundingSourceId: fundingSourceId !== null && fundingSourceId !== void 0 ? fundingSourceId : "",
110
112
  provider: p.provider
@@ -176,12 +178,12 @@ const ShipEngineCarriers = ({
176
178
  }),
177
179
  setCarrierToConnect: setCarrierToConnect
178
180
  })
179
- }, carrier.carrier.carrierProfile.carrierCode)), globalFeatures.enableParcelGuard && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => jsx("li", {
181
+ }, carrier.carrier.carrierProfile.carrierCode)), isInsuranceEnabled && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => jsx("li", {
180
182
  children: jsx(ManageInsuranceProviderRow, {
181
183
  insuranceProviderProfile: p,
182
184
  registerProvider: handleRegisterProvider
183
185
  })
184
- }, p.terms.termType)))]
186
+ }, p.terms[0].termType)))]
185
187
  })
186
188
  })]
187
189
  });
@@ -219,83 +219,7 @@ const useConfigureShipment = ({
219
219
  if (isInitialLoadingCarriers || isFetchingCarriers) return;
220
220
  if ((carriers === null || carriers === void 0 ? void 0 : carriers.length) === 0) incompleteRequirementsKeys.push("no_carriers");
221
221
  }, [carriers, incompleteRequirementsKeys, isFetchingCarriers, isInitialLoadingCarriers]);
222
- const isConfigureShipmentLoading = useMemo(() => {
223
- if (isSalesOrderLoading) return true;
224
- if (listSalesOrderShipmentsInitiallyLoading) return true;
225
- if (listSalesOrderShipmentsIsFetching) return true;
226
- if (creatingSalesOrderShipment) return true;
227
- if (creatingV1Shipment) return true;
228
- // Include external shipment loading states to prevent premature error display
229
- // Only keep loading if we're actually fetching and don't have an error yet
230
- // Skip this check if we already have an error to avoid infinite loading
231
- if (externalShipmentId && isExternalShipmentFetching && !getExternalShipmentErrors && !isExternalShipmentInitialLoading) {
232
- return true;
233
- }
234
- // Check if this is a one-off flow (no identifiers provided)
235
- const isOneOffFlow = !salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId;
236
- // For one-off flow, keep loading until we have shipment data or V1 creation is complete
237
- if (isOneOffFlow && !pendingSalesOrderShipment && !labelPurchasedSalesOrderShipment) {
238
- return true;
239
- }
240
- // Only consider empty salesOrderShipments array as loading if we're not initially loading and have valid identifiers
241
- const shouldReturnTrueForEmptyShipments = (salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && !listSalesOrderShipmentsInitiallyLoading && !listSalesOrderShipmentsIsFetching;
242
- if (shouldReturnTrueForEmptyShipments) {
243
- return true;
244
- }
245
- return false;
246
- }, [isSalesOrderLoading, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching, creatingSalesOrderShipment, creatingV1Shipment, isExternalShipmentInitialLoading, isExternalShipmentFetching, getExternalShipmentErrors,
247
- // This was missing!
248
- salesOrderId, externalOrderId, externalOrderNumber, orderSourceCode, shipmentId, externalShipmentId, pendingSalesOrderShipment, labelPurchasedSalesOrderShipment, salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length]);
249
- // #region Custom Error Mapping
250
- const hasGetShipmentErrors = useMemo(() => {
251
- // Check for explicit API errors
252
- if (listSalesOrderShipmentsErrors) return true;
253
- if (getExternalShipmentErrors) return true;
254
- if (importSalesOrderErrors) return true;
255
- // Only treat empty results as error if we're not loading and have finished initial fetch
256
- if ((salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && shipmentId && !listSalesOrderShipmentsInitiallyLoading && !listSalesOrderShipmentsIsFetching) {
257
- return true;
258
- }
259
- return false;
260
- }, [listSalesOrderShipmentsErrors, getExternalShipmentErrors, importSalesOrderErrors, salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length, shipmentId, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching]);
261
- const hasValidShipmentData = useMemo(() => {
262
- if (manuallyCreatedShipmentId) return true;
263
- if (pendingSalesOrderShipment) return true;
264
- if (labelPurchasedSalesOrderShipment) return true;
265
- return false;
266
- }, [labelPurchasedSalesOrderShipment, manuallyCreatedShipmentId, pendingSalesOrderShipment]);
267
- const showShipmentNotFoundError = useMemo(() => {
268
- // Don't show error if we have a manually created shipment
269
- if (manuallyCreatedShipmentId) {
270
- return false;
271
- }
272
- // Don't show error if we're creating a V1 shipment
273
- if (creatingV1Shipment || newV1Shipment) {
274
- return false;
275
- }
276
- // For external shipment ID, show error if we're not in loading state
277
- // and we don't have valid shipment data
278
- if (externalShipmentId && !isConfigureShipmentLoading && !hasValidShipmentData) {
279
- return true;
280
- }
281
- // Don't show error if external shipment is still loading, unless we have explicit errors
282
- if (externalShipmentId && (isExternalShipmentInitialLoading || isExternalShipmentFetching) && !getExternalShipmentErrors) {
283
- return false;
284
- }
285
- // Show error immediately if we have shipment errors, even if still loading
286
- if (hasGetShipmentErrors) {
287
- return true;
288
- }
289
- // Check if this is a one-off flow (no identifiers provided)
290
- const isOneOffFlow = !salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId;
291
- // Don't show error for one-off flow until we've attempted shipment creation
292
- if (isOneOffFlow && !v1shipmentCreated) {
293
- return false;
294
- }
295
- // Otherwise, only show if not loading and no valid shipment data
296
- return !isConfigureShipmentLoading && !hasValidShipmentData;
297
- }, [manuallyCreatedShipmentId, creatingV1Shipment, newV1Shipment, hasGetShipmentErrors, isExternalShipmentInitialLoading, isExternalShipmentFetching, getExternalShipmentErrors, listSalesOrderShipmentsErrors, importSalesOrderErrors, salesOrderId, externalOrderId, externalOrderNumber, orderSourceCode, shipmentId, externalShipmentId, v1shipmentCreated, isConfigureShipmentLoading, hasValidShipmentData, pendingSalesOrderShipment, externalShipment]);
298
- const errors = [...(listWarehouseErrors !== null && listWarehouseErrors !== void 0 ? listWarehouseErrors : []), ...(createSalesOrderShipmentErrors !== null && createSalesOrderShipmentErrors !== void 0 ? createSalesOrderShipmentErrors : []), ...(createV1ShipmentErrors !== null && createV1ShipmentErrors !== void 0 ? createV1ShipmentErrors : []), ...(errorWhenShipmentCancelled && cancelledShipment ? [new CodedError("shipment_cancelled", {
222
+ const errors = [...(listWarehouseErrors !== null && listWarehouseErrors !== void 0 ? listWarehouseErrors : []), ...(createSalesOrderShipmentErrors !== null && createSalesOrderShipmentErrors !== void 0 ? createSalesOrderShipmentErrors : []), ...(createV1ShipmentErrors !== null && createV1ShipmentErrors !== void 0 ? createV1ShipmentErrors : []), ...(listSalesOrderShipmentsErrors !== null && listSalesOrderShipmentsErrors !== void 0 ? listSalesOrderShipmentsErrors : []), ...(getExternalShipmentErrors !== null && getExternalShipmentErrors !== void 0 ? getExternalShipmentErrors : []), ...(importSalesOrderErrors !== null && importSalesOrderErrors !== void 0 ? importSalesOrderErrors : []), ...(errorWhenShipmentCancelled && cancelledShipment ? [new CodedError("shipment_cancelled", {
299
223
  errorCode: "invalid_status",
300
224
  errorSource: "elements",
301
225
  errorType: "business_rules"
@@ -307,17 +231,16 @@ const useConfigureShipment = ({
307
231
  errorCode: "unknown",
308
232
  errorSource: "elements",
309
233
  errorType: "business_rules"
310
- })] : []), ...(showShipmentNotFoundError ? [new CodedError("shipment_not_found", {
234
+ })] : []), ...((salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && shipmentId ? [new CodedError("shipment_not_found", {
311
235
  errorCode: "invalid_status",
312
236
  errorSource: "elements",
313
237
  errorType: "business_rules"
314
238
  })] : [])];
315
- // #endregion
316
239
  return {
317
240
  carriers,
318
241
  createNewShipmentForNotFound,
319
242
  errors: errors.length > 0 ? errors : undefined,
320
- isLoading: isConfigureShipmentLoading && errors.length === 0,
243
+ isLoading: (isSalesOrderLoading || !(salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) || creatingSalesOrderShipment) && errors.length === 0,
321
244
  refetchPendingSalesOrderShipments,
322
245
  salesOrder,
323
246
  shipment: pendingSalesOrderShipment !== null && pendingSalesOrderShipment !== void 0 ? pendingSalesOrderShipment : labelPurchasedSalesOrderShipment,
@@ -14,14 +14,15 @@ import { useElements } from '../elements-provider/elements-context-provider.js';
14
14
  const useGetFundingSourceInsuranceProvider = () => {
15
15
  const {
16
16
  globalFeatures: {
17
- enableParcelGuard
17
+ enableParcelGuard,
18
+ enableXCover
18
19
  }
19
20
  } = useElements();
20
21
  const {
21
22
  data,
22
23
  refetch: refetchInsuranceAcceptedTerms
23
24
  } = useGetInsuranceFundingSourceAcceptedTerms({
24
- enabled: enableParcelGuard
25
+ enabled: enableParcelGuard || enableXCover
25
26
  });
26
27
  const fundingSourceInsuranceProvider = useMemo(() => {
27
28
  var _a;
@@ -30,13 +31,12 @@ const useGetFundingSourceInsuranceProvider = () => {
30
31
  if (enableParcelGuard && term.termType === "parcelguard_terms") {
31
32
  provider = "parcelguard";
32
33
  }
33
- // TODO: once x_cover is enabled, confirm the term type and uncomment
34
- // if (term.termType === "x_cover_terms") {
35
- // provider = "x_cover";
36
- // }
34
+ if (enableXCover && term.termType === "xcover_terms") {
35
+ provider = "x_cover";
36
+ }
37
37
  });
38
38
  return provider;
39
- }, [data, enableParcelGuard]);
39
+ }, [data === null || data === void 0 ? void 0 : data.acceptedTerms, enableParcelGuard, enableXCover]);
40
40
  return {
41
41
  fundingSourceInsuranceProvider,
42
42
  refetchInsuranceAcceptedTerms
@@ -1,13 +1,15 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
2
  import { useListFundingSources, useGetFundingSourceMetadata, useGetInsuranceFundingSourceAcceptedTerms, useRegisterCarrier } from '@shipengine/react-api';
3
+ import { groupTermsByProvider, getIsFundingSourceInsuranceProviderEnabledAndSupported } from '../utilities/shipengine/insurance.js';
3
4
  import { useMemo, useCallback } from 'react';
4
5
  import { useElements } from '../elements-provider/elements-context-provider.js';
5
6
 
6
7
  const useManageFundingSourceInsurance = () => {
7
- var _a;
8
+ var _a, _b;
8
9
  const {
9
10
  globalFeatures: {
10
- enableParcelGuard
11
+ enableParcelGuard,
12
+ enableXCover
11
13
  }
12
14
  } = useElements();
13
15
  const {
@@ -19,25 +21,12 @@ const useManageFundingSourceInsurance = () => {
19
21
  data: insuranceAcceptedTerms,
20
22
  isLoading: loadingInsuranceAcceptedTerms
21
23
  } = useGetInsuranceFundingSourceAcceptedTerms({
22
- enabled: enableParcelGuard
24
+ enabled: enableParcelGuard || enableXCover
23
25
  });
24
26
  const insuranceProviderProfiles = useMemo(() => {
25
27
  var _a;
26
- return (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.optionalTerms.map(terms => {
27
- const providerLookup = {
28
- parcelguard_terms: "parcelguard"
29
- };
30
- const friendlyNameLookup = {
31
- parcelguard_terms: "ParcelGuard"
32
- };
33
- const provider = providerLookup[terms.termType];
34
- const friendlyName = friendlyNameLookup[terms.termType];
35
- return {
36
- friendlyName,
37
- provider,
38
- terms
39
- };
40
- });
28
+ const optionalTerms = (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.optionalTerms;
29
+ return groupTermsByProvider(optionalTerms);
41
30
  }, [fundingSourceMetadata]);
42
31
  const {
43
32
  mutateAsync: registerCarrier
@@ -77,12 +66,15 @@ const useManageFundingSourceInsurance = () => {
77
66
  }
78
67
  }), [fundingSources, insuranceProviderProfiles, registerCarrier]);
79
68
  const hasInsuranceToRegister = useMemo(() => {
80
- return enableParcelGuard &&
81
- // has insurance provider profiles but none have been accepted AND has a funding source
82
- !!(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);
83
- }, [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]);
69
+ var _a, _b;
70
+ const isProviderEnabled = getIsFundingSourceInsuranceProviderEnabledAndSupported(insuranceProviderProfiles, enableXCover, enableParcelGuard);
71
+ const hasProfiles = Boolean(insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length);
72
+ 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;
73
+ const hasFundingSources = Boolean(fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources.length);
74
+ return isProviderEnabled && hasProfiles && hasNoAcceptedTerms && hasFundingSources;
75
+ }, [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]);
84
76
  return {
85
- fundingSourceCountryCode: (_a = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _a === void 0 ? void 0 : _a.defaultFundingSourceProfile.countryCode,
77
+ fundingSourceCountryCode: (_b = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.data) === null || _b === void 0 ? void 0 : _b.defaultFundingSourceProfile.countryCode,
86
78
  hasInsuranceToRegister,
87
79
  insuranceAcceptedTerms: insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms,
88
80
  insuranceProviderProfiles,
package/dist/esm/index.js CHANGED
@@ -35,6 +35,9 @@ import * as carrierServices from './workflows/carrier-services/carrier-services.
35
35
  export { carrierServices as CarrierServices };
36
36
  import * as transactionHistoryElement from './elements/transaction-history/transaction-history-element.js';
37
37
  export { transactionHistoryElement as TransactionHistory };
38
+ import * as customsFormElement from './elements/customs-form/customs-form-element.js';
39
+ export { customsFormElement as CustomsForm };
40
+ export { extractCustomsFormData, getDefaultCustomsFormValues } from './elements/customs-form/customs-form-types.js';
38
41
  export { useAddressValidation } from './hooks/use-address-validation.js';
39
42
  export { useHelpers } from './hooks/use-helpers.js';
40
43
  export { useConfigureShipment } from './hooks/use-configure-shipment.js';
@@ -166,7 +166,7 @@ var common = {
166
166
  invalidNameOrCompany: "Recipient name and company name (if provided) must have two characters in first and last name.",
167
167
  parsingFailure: "Parsing failed. Please check address and try again.",
168
168
  incompleteLabelPurchaseRequirements: "Please add your {{requirements}} to continue purchasing a label.",
169
- shipmentNotFound: "Cannot find {{identifierType}}: {{identifierNumber}}",
169
+ shipmentNotFound: "Cannot find shipment with ID: {{id}}.",
170
170
  shipmentCancelled: "This shipment is Cancelled in ShipStation. Log into ShipStation to restore the order to Awaiting Shipment status.",
171
171
  unableToLoad: {
172
172
  accountSettings: "Unable to load account settings",
@@ -244,7 +244,7 @@ var common = {
244
244
  parcelguard: "ParcelGuard",
245
245
  shipsurance: "Shipsurance",
246
246
  thirdParty: "Third Party",
247
- x_cover: "XCover"
247
+ xCover: "XCover"
248
248
  },
249
249
  loading: {
250
250
  accountSettings: "Loading account settings...",
@@ -30,13 +30,6 @@ var purchaseLabel = {
30
30
  saveRateFailedMessage: "Saving DHL Express Worldwide rates is temporarily unavailable. Please try again later.",
31
31
  saveRateFailedTitle: "Unable To Save Rate"
32
32
  },
33
- identifierTypes: {
34
- externalOrderId: "External Order ID",
35
- externalOrderNumber: "External Order Number",
36
- externalShipmentId: "External Shipment ID",
37
- salesOrderId: "Sales Order ID",
38
- shipmentId: "Shipment ID"
39
- },
40
33
  errorTypes: {
41
34
  results: "No results returned"
42
35
  },
@@ -98,7 +91,15 @@ var purchaseLabel = {
98
91
  rateSavings: "Save ${{amount}}",
99
92
  upsGroundSaverTermsAcknowledgement: "To start shipping with UPS Ground Saver, you are confirming that you have agreed to the <1>terms and conditions</1>",
100
93
  dhlExpressTermsAcknowledgement: "To start shipping with DHL, you are confirming that you have agreed to the <1>terms and conditions</1>",
101
- noRateService: "Rate and services will be billed based on carrier."
94
+ noRateService: "Rate and services will be billed based on carrier.",
95
+ rateAttributes: {
96
+ bestValue: "Best Value",
97
+ cheapest: "Cheapest",
98
+ fastest: "Fastest",
99
+ bestValueTooltip: "Lowest cost option arriving on a specified date within 4 days, with free carrier coverage up to $100 and a free dropoff option.",
100
+ cheapestTooltip: "Lowest cost option.",
101
+ fastestTooltip: "Fastest delivery option."
102
+ }
102
103
  },
103
104
  windsorFramework: {
104
105
  movementIndicator: "Movement Indicator",
@@ -1,3 +1,3 @@
1
- var version = "2.26.4";
1
+ var version = "2.27.0";
2
2
 
3
3
  export { version };
@@ -26,6 +26,7 @@ const defaultFeatureFlags = {
26
26
  globalFeatures: {
27
27
  disableShadowDOM: false,
28
28
  enableParcelGuard: true,
29
+ enableXCover: false,
29
30
  isSandbox: false,
30
31
  poweredByShipEngine: true,
31
32
  showVatSettings: false,
@@ -1,5 +1,6 @@
1
1
  import SvgIcon from '../../assets/parcelguard/icon.svg.js';
2
2
  import SvgLogo from '../../assets/parcelguard/logo.svg.js';
3
+ import SvgLogo$1 from '../../assets/xcover/logo.svg.js';
3
4
 
4
5
  const USPS_CARRIER_CODES = ["usps", "stamps_com"];
5
6
  /**
@@ -57,6 +58,9 @@ const getLogoOrIconByCarrierCode = (carrierCode, type) => {
57
58
  if (carrierCode === "parcelguard") {
58
59
  return type === "logo" ? SvgLogo : SvgIcon;
59
60
  }
61
+ if (carrierCode === "xcover") {
62
+ return SvgLogo$1;
63
+ }
60
64
  const carrierCodeOverrides = {
61
65
  stamps_com: "stamps_com_wl",
62
66
  usps: "stamps_com_wl"
@@ -6,4 +6,4 @@ export { getCancelledShipment, getIsCustomsRequiredForShipment, getIsInternation
6
6
  export { convertDecimalWeightToFractionalWeight, convertFractionalWeightToDecimalWeight, convertPoundsAndOuncesToOunces, convertWeight, formatFractionalWeight, isDecimalWeight, isMetricWeightUnit } from './weight.js';
7
7
  export { isFlatRatePackageCode } from './package.js';
8
8
  export { getDefaultWarehouse, getWarehouseById } from './warehouses.js';
9
- export { getInsuranceProviderWithFriendlyName, getIsInsuraceProviderAccepted } from './insurance.js';
9
+ export { filterProfilesByAcceptedTerms, getInsuranceProviderWithFriendlyName, getIsFundingSourceInsuranceProviderEnabledAndSupported, getIsInsuraceProviderAccepted, groupTermsByProvider } from './insurance.js';
@@ -10,6 +10,22 @@ import _insuranceProviderMetadata from '../../data/insurance-provider-metadatas.
10
10
  const getInsuranceProviderWithFriendlyName = termType => {
11
11
  return _insuranceProviderMetadata[termType];
12
12
  };
13
+ /**
14
+ * @internal
15
+ *
16
+ * # Insurance Utilities - getIsFundingSourceInsuranceProviderEnabledAndSupported
17
+ *
18
+ * Determines if any insurance providers are enabled and supported based on feature flags and funding source data.
19
+ *
20
+ * @category Utilities
21
+ */
22
+ const getIsFundingSourceInsuranceProviderEnabledAndSupported = (insuranceProviders, xcoverEnabled, parcelguardEnabled) => {
23
+ if (!(insuranceProviders === null || insuranceProviders === void 0 ? void 0 : insuranceProviders.length)) return false;
24
+ const supportedProviders = insuranceProviders.map(p => p.provider);
25
+ if (xcoverEnabled && supportedProviders.includes("xcover")) return true;
26
+ if (parcelguardEnabled && supportedProviders.includes("parcelguard")) return true;
27
+ return false;
28
+ };
13
29
  /**
14
30
  * @internal
15
31
  *
@@ -20,5 +36,49 @@ const getInsuranceProviderWithFriendlyName = termType => {
20
36
  const getIsInsuraceProviderAccepted = (termType, acceptedTerms) => {
21
37
  return !!(acceptedTerms === null || acceptedTerms === void 0 ? void 0 : acceptedTerms.map(t => t.termType).includes(termType));
22
38
  };
39
+ /**
40
+ * @internal
41
+ *
42
+ * # Insurance Utilities - groupTermsByProvider
43
+ *
44
+ * Groups optional terms by insurance provider, creating InsuranceProviderProfile objects.
45
+ *
46
+ * @category Utilities
47
+ */
48
+ const groupTermsByProvider = optionalTerms => {
49
+ if (!optionalTerms) return [];
50
+ // Group terms by provider
51
+ const providerTermsMap = new Map();
52
+ optionalTerms.forEach(term => {
53
+ const providerInfo = getInsuranceProviderWithFriendlyName(term.termType);
54
+ if (providerInfo === null || providerInfo === void 0 ? void 0 : providerInfo.provider) {
55
+ const existingTerms = providerTermsMap.get(providerInfo.provider) || [];
56
+ providerTermsMap.set(providerInfo.provider, [...existingTerms, term]);
57
+ }
58
+ });
59
+ // Convert Map to InsuranceProviderProfile array
60
+ return Array.from(providerTermsMap.entries()).map(([, terms]) => {
61
+ const providerInfo = getInsuranceProviderWithFriendlyName(terms[0].termType);
62
+ return Object.assign(Object.assign({}, providerInfo), {
63
+ terms
64
+ });
65
+ });
66
+ };
67
+ /**
68
+ * @internal
69
+ *
70
+ * # Insurance Utilities - filterProfilesByAcceptedTerms
71
+ *
72
+ * Filters insurance provider profiles to exclude those that have already been accepted.
73
+ *
74
+ * @category Utilities
75
+ */
76
+ const filterProfilesByAcceptedTerms = (profiles, acceptedTerms) => {
77
+ if (!(acceptedTerms === null || acceptedTerms === void 0 ? void 0 : acceptedTerms.length)) return profiles;
78
+ const connectedTermTypes = new Set(acceptedTerms.map(t => t.termType));
79
+ return profiles.filter(profile => {
80
+ return !profile.terms.some(term => connectedTermTypes.has(term.termType));
81
+ });
82
+ };
23
83
 
24
- export { getInsuranceProviderWithFriendlyName, getIsInsuraceProviderAccepted };
84
+ export { filterProfilesByAcceptedTerms, getInsuranceProviderWithFriendlyName, getIsFundingSourceInsuranceProviderEnabledAndSupported, getIsInsuraceProviderAccepted, groupTermsByProvider };
@@ -60,31 +60,7 @@ const Component = _a => {
60
60
  }));
61
61
  // Track if we have a shipment_not_found error to avoid reusing the bad shipment ID
62
62
  const hasShipmentNotFoundError = configureShipmentErrors === null || configureShipmentErrors === void 0 ? void 0 : configureShipmentErrors.some(error => error.message === "shipment_not_found");
63
- const getMultiplexedIdentifier = useCallback(() => {
64
- if (_multiplexedId && "shipmentId" in _multiplexedId) {
65
- return {
66
- shipmentId: _multiplexedId.shipmentId
67
- };
68
- } else if (_multiplexedId && "externalShipmentId" in _multiplexedId) {
69
- return {
70
- externalShipmentId: _multiplexedId.externalShipmentId
71
- };
72
- } else if (_multiplexedId && "salesOrderId" in _multiplexedId) {
73
- return {
74
- salesOrderId: _multiplexedId.salesOrderId
75
- };
76
- } else if (_multiplexedId && "externalOrderNumber" in _multiplexedId) {
77
- return {
78
- externalOrderNumber: _multiplexedId.externalOrderNumber
79
- };
80
- } else if (_multiplexedId && "externalOrderId" in _multiplexedId) {
81
- return {
82
- externalOrderId: _multiplexedId.externalOrderId
83
- };
84
- }
85
- return {};
86
- }, [_multiplexedId]);
87
- const shipmentId = getMultiplexedIdentifier().shipmentId;
63
+ const shipmentId = _multiplexedId && "shipmentId" in _multiplexedId ? _multiplexedId.shipmentId : undefined;
88
64
  const {
89
65
  data: insuranceAccount,
90
66
  isInitialLoading: insuranceIsLoading
@@ -202,9 +178,9 @@ const Component = _a => {
202
178
  return jsx(SuspendPurchase, {
203
179
  data: shipment || salesOrder,
204
180
  errors: errors.length ? errors : undefined,
205
- identifier: getMultiplexedIdentifier(),
206
181
  isLoading: isLabelsLoading || isConfiguringShipment || insuranceIsLoading,
207
182
  onCreateNewShipment: createNewShipmentForNotFound,
183
+ shipmentId: shipmentId,
208
184
  children: element && getElement(element)
209
185
  });
210
186
  };
@@ -105,12 +105,12 @@ const useConfirmationAndSubmissionStep = ({
105
105
  iovationBlackbox
106
106
  }) {
107
107
  const addressToRegister = address !== null && address !== void 0 ? address : defaultWarehouse.originAddress;
108
- // parcel guard check
109
- const insuranceProviders = globalFeatures.enableParcelGuard ? insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => ({
110
- acceptedTerms: [{
111
- termType: p.terms.termType,
112
- version: p.terms.version
113
- }],
108
+ // funding source insurance check
109
+ const insuranceProviders = globalFeatures.enableParcelGuard || globalFeatures.enableXCover ? insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.map(p => ({
110
+ acceptedTerms: p.terms.map(term => ({
111
+ termType: term.termType,
112
+ version: term.version
113
+ })),
114
114
  agreeToTerms: true,
115
115
  fundingSourceId,
116
116
  provider: p.provider
@@ -144,7 +144,7 @@ const useConfirmationAndSubmissionStep = ({
144
144
  console.error(error);
145
145
  throw error;
146
146
  }
147
- }), [registerCarrier, globalFeatures.enableParcelGuard]);
147
+ }), [globalFeatures.enableParcelGuard, globalFeatures.enableXCover, registerCarrier]);
148
148
  const onboardSeller = useCallback(({
149
149
  carrierProfiles,
150
150
  fundingSourceRequiredTerms,
@@ -203,7 +203,7 @@ const useConfirmationAndSubmissionStep = ({
203
203
  yield createHandleCarrierConnections({
204
204
  carrierProfiles,
205
205
  defaultWarehouse: warehouse,
206
- insuranceProviderProfiles: globalFeatures.enableParcelGuard ? insuranceProviderProfiles : undefined
206
+ insuranceProviderProfiles
207
207
  })(fundingSource.fundingSource.fundingSourceId, {
208
208
  iovationBlackbox
209
209
  });
@@ -213,7 +213,7 @@ const useConfirmationAndSubmissionStep = ({
213
213
  }
214
214
  }
215
215
  }
216
- }), [addSandboxCarriers, createFundingSource, createHandleCarrierConnections, createOrUpdateWarehouse, getToken, globalFeatures.enableParcelGuard, globalFeatures.isSandbox]);
216
+ }), [addSandboxCarriers, createFundingSource, createHandleCarrierConnections, createOrUpdateWarehouse, getToken, globalFeatures.isSandbox]);
217
217
  const updateExistingFundingSource = useCallback(({
218
218
  carrierProfiles,
219
219
  fundingSource,
@@ -28,7 +28,8 @@ const TermsAgreementForm = ({
28
28
  } = useTranslation();
29
29
  const {
30
30
  globalFeatures: {
31
- enableParcelGuard
31
+ enableParcelGuard,
32
+ enableXCover
32
33
  }
33
34
  } = useElements();
34
35
  const [showTerms, setShowTerms] = useState(false);
@@ -107,7 +108,7 @@ const TermsAgreementForm = ({
107
108
  }), carrierTerms.map((term, idx) => jsx(DisplayTerm, {
108
109
  terms: term
109
110
  }, idx))]
110
- }), enableParcelGuard && !!insuranceProviderTerms.length && jsxs(Fragment, {
111
+ }), (enableParcelGuard || enableXCover) && !!insuranceProviderTerms.length && jsxs(Fragment, {
111
112
  children: [jsx(Spacer, {}), jsx(Typography, {
112
113
  bold: true,
113
114
  variant: "body1",
@@ -20,13 +20,14 @@ const TermsAgreementStep = ({
20
20
  fundingSourceRequiredTerms,
21
21
  showStampsLogo = false
22
22
  }) => {
23
- var _a, _b, _c, _d, _e;
23
+ var _a, _b, _c, _d, _e, _f;
24
24
  const {
25
25
  t
26
26
  } = useTranslation("onboarding");
27
27
  const {
28
28
  globalFeatures: {
29
- enableParcelGuard
29
+ enableParcelGuard,
30
+ enableXCover
30
31
  }
31
32
  } = useElements();
32
33
  const carrierFriendlyNames = useCarrierMetadata();
@@ -39,11 +40,12 @@ const TermsAgreementStep = ({
39
40
  };
40
41
  });
41
42
  const insuranceProviderTerms = (_a = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.flatMap(p => p.terms)) !== null && _a !== void 0 ? _a : [];
42
- const showParcelGuard = enableParcelGuard && ((_b = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _b !== void 0 ? _b : 0) > 0;
43
- const hasInsuranceToRegister = showParcelGuard && ((_c = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _c !== void 0 ? _c : 0) > 0;
43
+ const showParcelGuard = enableParcelGuard && ((_b = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0]) === null || _b === void 0 ? void 0 : _b.friendlyName) === "ParcelGuard";
44
+ const showXCover = enableXCover && ((_c = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0]) === null || _c === void 0 ? void 0 : _c.friendlyName) === "XCover";
45
+ const hasInsuranceToRegister = (showParcelGuard || showXCover) && ((_d = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) !== null && _d !== void 0 ? _d : 0) > 0;
44
46
  const hasEnabledCarriersConfigurationError = !showStampsLogo && (!enabledCarrierProfiles || (enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) === 0);
45
- const hasAlreadyConnectedCarriers = ((_d = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _d !== void 0 ? _d : 0) > 0 && carrierProfilesToRegister.length === 0 && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) === 0;
46
- const hasCarriersToRegister = ((_e = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _e !== void 0 ? _e : 0) > 0 && carrierProfilesToRegister.length > 0;
47
+ const hasAlreadyConnectedCarriers = ((_e = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _e !== void 0 ? _e : 0) > 0 && carrierProfilesToRegister.length === 0 && (insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles.length) === 0;
48
+ const hasCarriersToRegister = ((_f = enabledCarrierProfiles === null || enabledCarrierProfiles === void 0 ? void 0 : enabledCarrierProfiles.length) !== null && _f !== void 0 ? _f : 0) > 0 && carrierProfilesToRegister.length > 0;
47
49
  // Handle case where partner has not correctly enabled carriers and there is no insurance to register
48
50
  // Insurance does not get set in the same enabled carriers list and should bypass this check
49
51
  if (hasEnabledCarriersConfigurationError && !hasInsuranceToRegister) {
@@ -1,6 +1,6 @@
1
1
  import { useListFundingSources, useListCarriers, useGetFundingSourceMetadata, useGetInsuranceFundingSourceAcceptedTerms } from '@shipengine/react-api';
2
2
  import { filterFundingSourceCarriers } from '../../../../utilities/shipengine/carrier.js';
3
- import { getInsuranceProviderWithFriendlyName } from '../../../../utilities/shipengine/insurance.js';
3
+ import { groupTermsByProvider, filterProfilesByAcceptedTerms } from '../../../../utilities/shipengine/insurance.js';
4
4
  import { useMemo, useCallback } from 'react';
5
5
 
6
6
  const useTermsAgreementStep = ({
@@ -67,25 +67,10 @@ const useTermsAgreementStep = ({
67
67
  });
68
68
  }, [fundingSourceRequiredTerms, fundingSources, carriers, enabledCarrierProfiles]);
69
69
  const insuranceProviderProfiles = useMemo(() => {
70
- const insuranceProfiles = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.defaultFundingSourceProfile.optionalTerms.map(terms => {
71
- return Object.assign(Object.assign({}, getInsuranceProviderWithFriendlyName(terms.termType)), {
72
- terms
73
- });
74
- });
75
- if (!insuranceProfiles) return [];
76
- // filter out insurance profiles that are already connected from insurance accepted terms
77
- const connectedInsuranceProfiles = insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms.map(terms => {
78
- return Object.assign(Object.assign({}, getInsuranceProviderWithFriendlyName(terms.termType)), {
79
- terms
80
- });
81
- });
82
- return insuranceProfiles.filter(profile => {
83
- const isConnected = connectedInsuranceProfiles === null || connectedInsuranceProfiles === void 0 ? void 0 : connectedInsuranceProfiles.some(c => c.terms.termType === profile.terms.termType);
84
- if (isConnected) {
85
- return false;
86
- }
87
- return true;
88
- });
70
+ const optionalTerms = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.defaultFundingSourceProfile.optionalTerms;
71
+ const acceptedTerms = insuranceAcceptedTerms === null || insuranceAcceptedTerms === void 0 ? void 0 : insuranceAcceptedTerms.acceptedTerms;
72
+ const profiles = groupTermsByProvider(optionalTerms);
73
+ return filterProfilesByAcceptedTerms(profiles, acceptedTerms);
89
74
  }, [fundingSourceMetadata, insuranceAcceptedTerms]);
90
75
  const handleSubmitTermsAgreement = useCallback(() => {
91
76
  onStepComplete();
@@ -0,0 +1,2 @@
1
+ export { RateAttributeItem } from "./rate-attribute-item";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/field/rate-select/rate-card/rate-attribute-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SE } from "@shipengine/react-api";
2
+ type RateAttributeItemProps = {
3
+ attribute: SE.RateAttributes;
4
+ tooltipId: string;
5
+ };
6
+ export declare const RateAttributeItem: ({ attribute, tooltipId }: RateAttributeItemProps) => import("@emotion/react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=rate-attribute-item.d.ts.map