@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
@@ -20,8 +20,8 @@ const useConfigureShipment = ({
20
20
  warehouseId,
21
21
  useWarehouses = true
22
22
  }) => {
23
- // Track when we've created a replacement shipment for a "not found" case
24
- const [replacementShipmentId, setReplacementShipmentId] = useState();
23
+ // Track when user manually created a shipment for a "not found" case
24
+ const [manuallyCreatedShipmentId, setManuallyCreatedShipmentId] = useState();
25
25
  // Queue of incomplete requirement keys (i.e., Ship From addresses, Warehouses, Carriers)
26
26
  const incompleteRequirementsKeys = useMemo(() => [], []);
27
27
  const {
@@ -45,6 +45,7 @@ const useConfigureShipment = ({
45
45
  // Dont run Sales Order Import unless the Sales order info is present
46
46
  enabled: !!externalOrderNumber || !!orderSourceCode || !!salesOrderId || !!externalOrderId,
47
47
  externalOrderId,
48
+ externalOrderNumber,
48
49
  orderSourceCode,
49
50
  salesOrderId
50
51
  });
@@ -61,24 +62,49 @@ const useConfigureShipment = ({
61
62
  isInitialLoading: isExternalShipmentInitialLoading,
62
63
  isFetching: isExternalShipmentFetching
63
64
  } = useGetShipmentByExternalId({
64
- enabled: !!externalShipmentId && !shipmentId,
65
+ enabled: !!externalShipmentId && !shipmentId && !manuallyCreatedShipmentId,
65
66
  queryFnParams: {
66
67
  externalId: externalShipmentId !== null && externalShipmentId !== void 0 ? externalShipmentId : ""
67
68
  }
69
+ // TODO: weird refetch on focus behavior
68
70
  });
71
+ // #region List Sales Order Shipments
72
+ const externalOrderIds = useMemo(() => {
73
+ return externalOrderId ? [externalOrderId] : undefined;
74
+ }, [externalOrderId]);
75
+ const salesOrderIds = useMemo(() => {
76
+ return salesOrderId ? [salesOrderId] : salesOrder ? [salesOrder.salesOrderId] :
77
+ // TODO: current workaround - revert to being undefined rather than empty list
78
+ [];
79
+ }, [salesOrderId, salesOrder]);
80
+ const shipmentIds = useMemo(() => {
81
+ return manuallyCreatedShipmentId ? [manuallyCreatedShipmentId] : shipmentId ? [shipmentId] : externalShipment ? [externalShipment.shipmentId] : newV1Shipment ? [newV1Shipment.shipments[0].shipmentId] : undefined;
82
+ }, [manuallyCreatedShipmentId, shipmentId, externalShipment, newV1Shipment]);
83
+ const listSalesOrderShipmentsParams = useMemo(() => {
84
+ // TODO: useListSalesOrderShipments needs to be able to use the enabled prop, this is a workaround
85
+ // Prevent query with stale params during shipment creation or when V1 shipment exists but manuallyCreatedShipmentId not set
86
+ if (creatingV1Shipment && !manuallyCreatedShipmentId || newV1Shipment && !manuallyCreatedShipmentId) {
87
+ return {};
88
+ }
89
+ if (manuallyCreatedShipmentId) {
90
+ return {
91
+ shipmentIds
92
+ };
93
+ }
94
+ return {
95
+ externalOrderIds,
96
+ salesOrderIds,
97
+ shipmentIds
98
+ };
99
+ }, [manuallyCreatedShipmentId, externalOrderIds, salesOrderIds, shipmentIds, creatingV1Shipment, newV1Shipment]);
69
100
  const {
70
101
  data: salesOrderShipments,
71
102
  error: listSalesOrderShipmentsErrors,
72
103
  refetch: refetchSalesOrderShipments,
73
104
  isInitialLoading: listSalesOrderShipmentsInitiallyLoading,
74
105
  isFetching: listSalesOrderShipmentsIsFetching
75
- } = useListSalesOrderShipments({
76
- externalOrderIds: externalOrderId ? [externalOrderId] : undefined,
77
- salesOrderIds: salesOrderId ? [salesOrderId] : salesOrder ? [salesOrder.salesOrderId] :
78
- // TODO: current workaround - revert to being undefined rather than empty list
79
- [],
80
- shipmentIds: replacementShipmentId ? [replacementShipmentId] : shipmentId ? [shipmentId] : externalShipment ? [externalShipment.shipmentId] : newV1Shipment ? [newV1Shipment.shipments[0].shipmentId] : undefined
81
- });
106
+ } = useListSalesOrderShipments(listSalesOrderShipmentsParams);
107
+ // #endregion
82
108
  const {
83
109
  error: createSalesOrderShipmentErrors,
84
110
  mutateAsync: createSalesOrderShipment,
@@ -103,6 +129,7 @@ const useConfigureShipment = ({
103
129
  }
104
130
  return null;
105
131
  }), [createV1Shipment, defaultShipFromAddress, defaultWarehouse, warehouseId, refetchSalesOrderShipments]);
132
+ // #region Create Sales Order Shipment
106
133
  // Handles the creation of new shipments for the sales order flow and one-off flow
107
134
  const handleShipmentCreation = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
108
135
  var _a, _b, _c;
@@ -152,17 +179,23 @@ const useConfigureShipment = ({
152
179
  }
153
180
  // Create a Shipment for one-off flow
154
181
  if (!salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId) {
155
- yield createV1ShipmentWithDefaults();
182
+ const v1Shipment = yield createV1ShipmentWithDefaults();
183
+ // Set manuallyCreatedShipmentId to ensure proper query parameter handling
184
+ if (v1Shipment) {
185
+ setManuallyCreatedShipmentId(v1Shipment.shipments[0].shipmentId);
186
+ }
156
187
  }
157
188
  }), [createSalesOrderShipment, createV1ShipmentWithDefaults, creatingSalesOrderShipment, creatingV1Shipment, defaultShipFromAddress, defaultWarehouse, externalOrderId, externalOrderNumber, externalShipmentId, incompleteRequirementsKeys, isExternalShipmentFetching, isExternalShipmentInitialLoading, isFetchingWarehouses, isInitialLoadingWarehouses, labelPurchasedSalesOrderShipment, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching, orderSourceCode, pendingSalesOrderShipment, salesOrder, salesOrderId, salesOrderShipmentCreated, shipFromAddresses === null || shipFromAddresses === void 0 ? void 0 : shipFromAddresses.length, shipmentId, useWarehouses, v1shipmentCreated, warehouseId, warehouses]);
189
+ // #endregion
158
190
  const createNewShipmentForNotFound = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
159
191
  // Force create a new shipment even if shipmentId exists (for shipment_not_found case)
160
192
  const v1Shipment = yield createV1ShipmentWithDefaults();
161
193
  if (v1Shipment) {
162
- // Store the new shipment ID to override the stale one
163
- setReplacementShipmentId(v1Shipment.shipments[0].shipmentId);
194
+ setManuallyCreatedShipmentId(v1Shipment.shipments[0].shipmentId);
195
+ // Refetch to ensure we have the latest shipment data
196
+ yield refetchSalesOrderShipments();
164
197
  }
165
- }), [createV1ShipmentWithDefaults]);
198
+ }), [createV1ShipmentWithDefaults, refetchSalesOrderShipments]);
166
199
  const refetchPendingSalesOrderShipments = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
167
200
  const {
168
201
  data: shipments
@@ -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,28 +1,51 @@
1
1
  import { __awaiter } from '../_virtual/_tslib.js';
2
- import { useGetSalesOrderByExternalOrderId, useGetSalesOrder, useListOrderSources, useRefreshOrderSource } from '@shipengine/react-api';
2
+ import { useListSalesOrders, useGetSalesOrder, useListOrderSources, useRefreshOrderSource } from '@shipengine/react-api';
3
3
  import { useQueryClient } from '@tanstack/react-query';
4
- import { useState, useMemo, useEffect } from 'react';
4
+ import { useState, useMemo, useCallback, useEffect } from 'react';
5
5
 
6
+ /**
7
+ * Imports and retrieves sales orders by either:
8
+ * - Sales order ID lookup
9
+ * - External order ID/number search
10
+ *
11
+ * 1. First attempts to find the sales order using provided identifiers
12
+ * 2. If no order is found and initial fetches have run, automatically refreshes order sources
13
+ * 3. Invalidates relevant queries after successful refresh to refetch updated data
14
+ *
15
+ * @returns Object:
16
+ * - `salesOrder`: The found sales order, or undefined
17
+ * - `isLoading`: Boolean indicating if the hook is currently loading data
18
+ * - `errors`: Array of errors from failed queries, or undefined
19
+ */
6
20
  const useImportSalesOrder = ({
7
21
  enabled,
8
22
  externalOrderId,
23
+ externalOrderNumber,
9
24
  orderSourceCode,
10
25
  salesOrderId
11
26
  }) => {
12
27
  var _a, _b, _c;
13
28
  const queryClient = useQueryClient();
14
29
  const [refreshAttempted, setRefreshAttempted] = useState(false);
15
- // attempt to get sales order through external id means
16
- const orderByExternalIdQuery = useGetSalesOrderByExternalOrderId(externalOrderId, {
17
- enabled: enabled && !!externalOrderId && !salesOrderId
30
+ // Fetch sales order by External Order ID or External Order Number
31
+ const salesOrderByExternalIdQuery = useListSalesOrders({
32
+ externalOrderId,
33
+ externalOrderNumber
18
34
  });
19
35
  // if an order was found through external search disable this query
20
- const orderByIdQuery = useGetSalesOrder(salesOrderId, {
36
+ const salesOrderByIdQuery = useGetSalesOrder(salesOrderId, {
21
37
  enabled: enabled && !!salesOrderId
22
38
  });
23
- const salesOrder = useMemo(() => salesOrderId ? orderByIdQuery.data : orderByExternalIdQuery.data, [salesOrderId, orderByIdQuery.data, orderByExternalIdQuery.data]);
39
+ const salesOrder = useMemo(() => {
40
+ if (salesOrderId) {
41
+ return salesOrderByIdQuery.data;
42
+ } else if (salesOrderByExternalIdQuery.data && salesOrderByExternalIdQuery.data.length > 0) {
43
+ return salesOrderByExternalIdQuery.data[0];
44
+ }
45
+ return undefined;
46
+ }, [salesOrderId, salesOrderByIdQuery.data, salesOrderByExternalIdQuery.data]);
24
47
  // Determine if the initial fetch attempts (if applicable) have settled without finding data
25
- const initialFetchSettled = (salesOrderId ? !orderByIdQuery.isInitialLoading && !orderByIdQuery.isFetching : true) && (externalOrderId && !salesOrderId ? !orderByExternalIdQuery.isLoading && !orderByExternalIdQuery.isFetching : true);
48
+ const initialFetchSettled = (salesOrderId ? !salesOrderByIdQuery.isInitialLoading && !salesOrderByIdQuery.isFetching : true) && ((externalOrderNumber || externalOrderId) && !salesOrderId ? !salesOrderByExternalIdQuery.isLoading && !salesOrderByExternalIdQuery.isFetching : true);
26
49
  const shouldAttemptRefresh = enabled && initialFetchSettled && !salesOrder && !refreshAttempted;
27
50
  const listOrderSourcesQuery = useListOrderSources({
28
51
  enabled: shouldAttemptRefresh
@@ -32,6 +55,17 @@ const useImportSalesOrder = ({
32
55
  isLoading: isRefreshingOrderSource,
33
56
  mutateAsync: refreshOrderSource
34
57
  } = useRefreshOrderSource();
58
+ const invalidateSalesOrderQueries = useCallback(() => {
59
+ if (salesOrderId) {
60
+ void queryClient.invalidateQueries({
61
+ queryKey: ["useGetSalesOrder", salesOrderId]
62
+ });
63
+ } else if (externalOrderId || externalOrderNumber) {
64
+ void queryClient.invalidateQueries({
65
+ queryKey: ["useListSalesOrders", externalOrderId, externalOrderNumber]
66
+ });
67
+ }
68
+ }, [queryClient, salesOrderId, externalOrderId, externalOrderNumber]);
35
69
  useEffect(() => {
36
70
  if (listOrderSourcesQuery.isSuccess && listOrderSourcesQuery.data && shouldAttemptRefresh && !isRefreshingOrderSource) {
37
71
  const orderSourcesToRefresh = orderSourceCode ? listOrderSourcesQuery.data.filter(o => o.orderSourceCode.includes(orderSourceCode) && o.active) : listOrderSourcesQuery.data.filter(o => o.active);
@@ -39,29 +73,20 @@ const useImportSalesOrder = ({
39
73
  setRefreshAttempted(true);
40
74
  void (() => __awaiter(void 0, void 0, void 0, function* () {
41
75
  yield Promise.all(orderSourcesToRefresh.map(o => refreshOrderSource(o.orderSourceId, {
42
- // Invalidate relevant queries on successful refresh
76
+ // Invalidate relevant queries
43
77
  onSuccess: () => {
44
- if (salesOrderId) {
45
- void queryClient.invalidateQueries({
46
- queryKey: ["useGetSalesOrder", salesOrderId]
47
- });
48
- }
49
- if (externalOrderId && !salesOrderId) {
50
- void queryClient.invalidateQueries({
51
- queryKey: ["useGetSalesOrderByExternalOrderId", externalOrderId]
52
- });
53
- }
78
+ invalidateSalesOrderQueries();
54
79
  }
55
80
  })));
56
81
  }))();
57
82
  }
58
83
  }
59
84
  }, [externalOrderId, isRefreshingOrderSource, listOrderSourcesQuery.data, listOrderSourcesQuery.isSuccess, orderSourceCode, queryClient, refreshOrderSource, salesOrderId, shouldAttemptRefresh]);
60
- const isLoading = orderByIdQuery.isInitialLoading || orderByExternalIdQuery.isInitialLoading || listOrderSourcesQuery.isInitialLoading || isRefreshingOrderSource;
61
- 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 : [])];
85
+ const isLoading = salesOrderByIdQuery.isInitialLoading || salesOrderByExternalIdQuery.isInitialLoading || listOrderSourcesQuery.isInitialLoading || isRefreshingOrderSource;
86
+ 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 : [])];
62
87
  return {
63
88
  errors: errors.length > 0 ? errors : undefined,
64
- isLoading,
89
+ isLoading: isLoading && errors.length === 0,
65
90
  salesOrder
66
91
  };
67
92
  };
@@ -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';
@@ -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...",
@@ -91,7 +91,15 @@ var purchaseLabel = {
91
91
  rateSavings: "Save ${{amount}}",
92
92
  upsGroundSaverTermsAcknowledgement: "To start shipping with UPS Ground Saver, you are confirming that you have agreed to the <1>terms and conditions</1>",
93
93
  dhlExpressTermsAcknowledgement: "To start shipping with DHL, you are confirming that you have agreed to the <1>terms and conditions</1>",
94
- 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
+ }
95
103
  },
96
104
  windsorFramework: {
97
105
  movementIndicator: "Movement Indicator",
@@ -1,3 +1,3 @@
1
- var version = "2.26.5";
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 };
@@ -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"}