@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
@@ -104,7 +104,8 @@ const ShipmentForm = ({
104
104
  const {
105
105
  locale: defaultLocale,
106
106
  globalFeatures: {
107
- enableParcelGuard
107
+ enableParcelGuard,
108
+ enableXCover
108
109
  }
109
110
  } = useElements();
110
111
  const {
@@ -532,7 +533,7 @@ const ShipmentForm = ({
532
533
  }, []);
533
534
  const insuranceProviderKey = useMemo(() => {
534
535
  var _a, _b, _c;
535
- if (enableParcelGuard && !hasInsuranceToRegister) {
536
+ if ((enableParcelGuard || enableXCover) && !hasInsuranceToRegister) {
536
537
  const provider = (_a = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0]) === null || _a === void 0 ? void 0 : _a.provider;
537
538
  const fundingSourceProviderKey = getFundingSourceInsuranceProviderKey(provider);
538
539
  if (fundingSourceProviderKey) {
@@ -540,7 +541,7 @@ const ShipmentForm = ({
540
541
  }
541
542
  }
542
543
  return (_c = (_b = insuranceProviderOptions[0]) === null || _b === void 0 ? void 0 : _b.value.toUpperCase()) !== null && _c !== void 0 ? _c : "NONE";
543
- }, [enableParcelGuard, hasInsuranceToRegister, insuranceProviderOptions, insuranceProviderProfiles, getFundingSourceInsuranceProviderKey]);
544
+ }, [enableParcelGuard, enableXCover, hasInsuranceToRegister, insuranceProviderOptions, insuranceProviderProfiles, getFundingSourceInsuranceProviderKey]);
544
545
  const [registerInsuranceForm, isRegisterInsuranceFormOpen, toggleisRegisterInsuranceFormOpen] = useNestedForm(RegisterFundingSourceInsuranceForm, {
545
546
  formId: "register-funding-source-insurance-form",
546
547
  insuranceProviderProfile: insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0],
@@ -1,24 +1,48 @@
1
1
  import { useMemo, useCallback } from 'react';
2
2
 
3
3
  const COLLAPSED_RATE_VIEW_LIMIT = 4;
4
- const filterRateOptions = (rateOptions, selectedRate, preferredServiceCodes) => {
5
- // Show the selected rate
6
- const isSelectedRate = option => !!(selectedRate === null || selectedRate === void 0 ? void 0 : selectedRate.rateId) && option.rateId === selectedRate.rateId;
7
- // Show the rate if it is a preferred service
8
- const isPreferredService = option => !!option.serviceCode && !!(preferredServiceCodes === null || preferredServiceCodes === void 0 ? void 0 : preferredServiceCodes.includes(option.serviceCode));
9
- // Show the first 5 rates in the list
10
- const isWithinRateViewLimit = index => index < COLLAPSED_RATE_VIEW_LIMIT;
11
- return rateOptions.filter((option, index) => isSelectedRate(option) || isPreferredService(option) || isWithinRateViewLimit(index));
4
+ const filterRateOptions = rateOptions => {
5
+ const hasRateAttributes = option => {
6
+ var _a;
7
+ return !!((_a = option.rateAttributes) === null || _a === void 0 ? void 0 : _a.length);
8
+ };
9
+ const isMediaMail = option => option.serviceCode === "usps_media_mail";
10
+ const result = [];
11
+ const ratesWithAttributes = [];
12
+ const ratesWithoutAttributes = [];
13
+ // Classify rates (excluding Media Mail from both categories)
14
+ for (const option of rateOptions) {
15
+ if (isMediaMail(option)) {
16
+ continue; // Skip Media Mail entirely - it will only show in "Show more"
17
+ }
18
+ if (hasRateAttributes(option)) {
19
+ ratesWithAttributes.push(option);
20
+ } else {
21
+ ratesWithoutAttributes.push(option);
22
+ }
23
+ }
24
+ // Add up to 3 rates with attributes
25
+ const attributedRatesToShow = ratesWithAttributes.slice(0, 3);
26
+ result.push(...attributedRatesToShow);
27
+ // Fill remaining slots up to COLLAPSED_RATE_VIEW_LIMIT (4) with regular rates
28
+ const remainingSlots = COLLAPSED_RATE_VIEW_LIMIT - result.length;
29
+ const regularRatesToShow = ratesWithoutAttributes.slice(0, remainingSlots);
30
+ result.push(...regularRatesToShow);
31
+ return result;
12
32
  };
13
33
  /**
14
34
  * @internal
15
35
  *
16
36
  * # Filter Visible Rate Options Hook
17
37
  *
38
+ * Filters rate options for the collapsed view, showing up to 4 rates:
39
+ * - Up to 3 rates with attributes (best_value, cheapest, fastest)
40
+ * - Fill remaining slots with regular rates
41
+ * - Media Mail is always excluded from the collapsed view
18
42
  */
19
- const useFilterVisibleRateOptions = (rateOptions, selectedRate, preferredServiceCodes) => {
20
- const collapsedRateOptionList = useMemo(() => filterRateOptions(rateOptions, selectedRate, preferredServiceCodes), [rateOptions, selectedRate, preferredServiceCodes]);
21
- const filterVisibleRateOptions = useCallback(options => filterRateOptions(options, selectedRate, preferredServiceCodes), [selectedRate, preferredServiceCodes]);
43
+ const useFilterVisibleRateOptions = rateOptions => {
44
+ const collapsedRateOptionList = useMemo(() => filterRateOptions(rateOptions), [rateOptions]);
45
+ const filterVisibleRateOptions = useCallback(options => filterRateOptions(options), []);
22
46
  return {
23
47
  COLLAPSED_RATE_VIEW_LIMIT,
24
48
  collapsedRateOptionList,
@@ -24,11 +24,11 @@ const useInsuranceProviderOptions = (insuranceAccount, features) => {
24
24
  refetchInsuranceAcceptedTerms
25
25
  } = useGetFundingSourceInsuranceProvider();
26
26
  const insuranceProviderOptions = useMemo(() => Object.values(SE.InsuranceProviderType).flatMap(v => {
27
- return v === "none" || v === "funding_source" || v === "parcelguard" && (v !== fundingSourceInsuranceProvider || !globalFeatures.enableParcelGuard) || v === "x_cover" && v !== fundingSourceInsuranceProvider || v === "carrier" && !(features === null || features === void 0 ? void 0 : features.includeCarrierInsurance) || v === "third_party" && !(features === null || features === void 0 ? void 0 : features.includeThirdPartyInsurance) || v === "shipsurance" && (!(insuranceAccount === null || insuranceAccount === void 0 ? void 0 : insuranceAccount.amount) || !(features === null || features === void 0 ? void 0 : features.includeShipsuranceInsurance)) ? [] : {
27
+ return v === "none" || v === "funding_source" || v === "parcelguard" && (v !== fundingSourceInsuranceProvider || !globalFeatures.enableParcelGuard) || v === "x_cover" && (v !== fundingSourceInsuranceProvider || !globalFeatures.enableXCover) || v === "carrier" && !(features === null || features === void 0 ? void 0 : features.includeCarrierInsurance) || v === "third_party" && !(features === null || features === void 0 ? void 0 : features.includeThirdPartyInsurance) || v === "shipsurance" && (!(insuranceAccount === null || insuranceAccount === void 0 ? void 0 : insuranceAccount.amount) || !(features === null || features === void 0 ? void 0 : features.includeShipsuranceInsurance)) ? [] : {
28
28
  label: t(`insuranceProviders.${humps.camelize(v)}`),
29
29
  value: v
30
30
  };
31
- }), [fundingSourceInsuranceProvider, globalFeatures.enableParcelGuard, features, insuranceAccount === null || insuranceAccount === void 0 ? void 0 : insuranceAccount.amount, t]);
31
+ }), [fundingSourceInsuranceProvider, globalFeatures.enableParcelGuard, globalFeatures.enableXCover, features, insuranceAccount === null || insuranceAccount === void 0 ? void 0 : insuranceAccount.amount, t]);
32
32
  return {
33
33
  fundingSourceInsuranceProvider,
34
34
  insuranceProviderOptions,
@@ -1,5 +1,5 @@
1
1
  import { jsx } from '@emotion/react/jsx-runtime';
2
- import { createContext, useContext } from 'react';
2
+ import { useContext, createContext } from 'react';
3
3
  import { getDefaultFeatures, deepMergeFeatures } from '../utilities/feature-flags/feature-flags.js';
4
4
 
5
5
  const DEFAULT_LOCALE = "en-US";
@@ -0,0 +1,111 @@
1
+ import { faker } from '@faker-js/faker';
2
+ import { Factory } from 'fishery';
3
+
4
+ /**
5
+ * @category Factories
6
+ */
7
+ const addressFactory = Factory.define(({
8
+ params,
9
+ transientParams
10
+ }) => {
11
+ var _a, _b, _c, _d;
12
+ const addressLine2 = (_a = params.addressLine2) !== null && _a !== void 0 ? _a : faker.helpers.maybe(() => faker.address.secondaryAddress(), {
13
+ probability: 0.25
14
+ });
15
+ const addressLine3 = (_b = params.addressLine3) !== null && _b !== void 0 ? _b : addressLine2 && faker.helpers.maybe(() => faker.address.secondaryAddress());
16
+ let countryCode = (_c = params.countryCode) !== null && _c !== void 0 ? _c : "US";
17
+ // Random country code could still be US
18
+ while (transientParams.isInternational && countryCode === "US") {
19
+ countryCode = faker.address.countryCode();
20
+ }
21
+ const stateProvince = (_d = params.stateProvince) !== null && _d !== void 0 ? _d : faker.address.stateAbbr();
22
+ return {
23
+ addressLine1: faker.address.streetAddress(),
24
+ addressLine2,
25
+ addressLine3,
26
+ addressResidentialIndicator: faker.helpers.maybe(() => faker.helpers.arrayElement(["yes", "no"])),
27
+ cityLocality: faker.address.city(),
28
+ companyName: faker.helpers.maybe(() => faker.company.name()),
29
+ countryCode,
30
+ name: faker.name.fullName(),
31
+ phone: faker.phone.number(),
32
+ postalCode: faker.address.zipCodeByState(stateProvince),
33
+ stateProvince
34
+ };
35
+ });
36
+ /**
37
+ * @category Factories
38
+ */
39
+ const addressValidationFactory = Factory.define(({
40
+ associations,
41
+ params
42
+ }) => {
43
+ var _a, _b;
44
+ const status = params.status || faker.helpers.arrayElement(["unverified", "verified", "warning", "error"]);
45
+ return {
46
+ matchedAddress: (_a = associations.matchedAddress) !== null && _a !== void 0 ? _a : faker.helpers.maybe(() => addressFactory.build(), {
47
+ probability: ["verified", "error"].includes(status) ? 0 : 0.8
48
+ }),
49
+ messages: [],
50
+ originalAddress: (_b = associations.originalAddress) !== null && _b !== void 0 ? _b : addressFactory.build(),
51
+ status
52
+ };
53
+ });
54
+ /**
55
+ * Mock the addressValidation object used to hyrdate address valiation feature
56
+ * on the shipment form.
57
+ * @category Factory
58
+ */
59
+ Factory.define(({
60
+ params
61
+ }) => {
62
+ const addressValidation = addressValidationFactory.build({
63
+ status: params.status
64
+ }, {
65
+ associations: {
66
+ matchedAddress: addressFactory.build()
67
+ }
68
+ });
69
+ if (!addressValidation.matchedAddress) throw new Error("addressPreferenceFactory did not generate a matchedAddress");
70
+ return Object.assign(Object.assign({}, addressValidation), {
71
+ alternative: addressValidation.originalAddress,
72
+ alternativeSource: "originalAddress",
73
+ isModified: true,
74
+ selection: addressValidation.matchedAddress,
75
+ selectionSource: "matchedAddress",
76
+ toggle: () => addressFactory.build()
77
+ });
78
+ });
79
+ /**
80
+ * Mock the addressValidationPreference object used to hyrdate the address valiation feature
81
+ * used for warehouse management and onboarding.
82
+ * @category Factory
83
+ */
84
+ Factory.define(() => {
85
+ const addressValidation = addressValidationFactory.build();
86
+ const address = addressFactory.build();
87
+ const validationType = faker.helpers.arrayElement(["EXACT", "SOFT", "SUGGESTED", "ERROR"]);
88
+ switch (validationType) {
89
+ case "EXACT":
90
+ case "SOFT":
91
+ return {
92
+ address: address,
93
+ validationType: faker.helpers.arrayElement(["EXACT", "SOFT"])
94
+ };
95
+ case "SUGGESTED":
96
+ case "ERROR":
97
+ return {
98
+ validation: addressValidation,
99
+ validationType: faker.helpers.arrayElement(["SUGGESTED", "ERROR"])
100
+ };
101
+ default:
102
+ {
103
+ return {
104
+ validation: addressValidation,
105
+ validationType: "ERROR"
106
+ };
107
+ }
108
+ }
109
+ });
110
+
111
+ export { addressFactory, addressValidationFactory };
@@ -0,0 +1,19 @@
1
+ import { faker } from '@faker-js/faker';
2
+ import { SE } from '@shipengine/react-api';
3
+ import { Factory } from 'fishery';
4
+
5
+ /**
6
+ * @category Factories
7
+ */
8
+ const moneyFactory = Factory.define(({
9
+ transientParams
10
+ }) => ({
11
+ amount: faker.datatype.number({
12
+ max: 1000,
13
+ min: 5,
14
+ precision: 0.01
15
+ }),
16
+ currency: (transientParams === null || transientParams === void 0 ? void 0 : transientParams.isInternational) ? faker.helpers.arrayElement(Object.values(SE.Currency)) : SE.Currency.USD
17
+ }));
18
+
19
+ export { moneyFactory };
@@ -0,0 +1,34 @@
1
+ import { faker } from '@faker-js/faker';
2
+ import { Factory } from 'fishery';
3
+
4
+ const randomOrderSourceCode = () => faker.helpers.arrayElement(["3dcart", "abantecart", "acumatica", "acumatica_v2", "alibaba", "amazon", "amazon_au", "amazon_ca", "amazon_de", "amazon_es", "amazon_fr", "amazon_it", "amazon_jp", "amazon_mx", "amazon_uk", "americommerce", "auctane-orders", "back-market", "bandcamp", "big_cartel", "bigcommerce", "bigcommerce_v3", "bigcommerce_v2", "bizelo", "bluepark", "bonanza", "brightpearl", "cdiscount", "celery", "channeladvisor", "channelsale", "choxi", "cin7", "commerceinterface", "corecommerce", "coupang", "cratejoy", "cs-cart", "custom_store", "dear_systems", "dummy-marketplace", "ebay", "ebay_au", "ebay_ca", "ebay_uk", "ebay_fr", "ebay_v2", "ecwid", "ecwid_v1", "edesk", "ekm", "etsy", "facebook", "fnac", "foxycart", "freestyle", "fullscreen_direct", "geekseller", "goodsie", "google", "google_checkout", "gorgias", "groopdealz", "groupon_goods", "handshake", "hatch", "highwire", "homeroots", "houzz", "idealo_de", "inksoft", "jane", "jet", "kaufland", "labelapi", "lemonstand", "lengow", "liftoff", "linnworks", "listingmirror", "magento", "zoey", "magento_go", "memberly", "mercado_libre", "mijoshop", "best_buy_ca", "catch", "darty", "fanatics", "kohls", "kroger", "urbn", "miva_merchant", "morecommerce", "mozu", "neto", "newegg", "newegg_business", "newegg_ca", "notonthehighstreet", "oauth_dummy", "odbc", "onbuy", "opencart", "order_time", "ordersource_api", "oscommerce", "overstock", "oxatis", "paypal", "paypal_v2", "payvment", "penny", "prestashop", "rakuten", "best_buy", "rakuten-fr", "rate_browser", "redditgifts", "reverb", "revolutionparts", "salesforce_commerce_cloud", "salesforce_core", "sap_anywhere", "scout_topshelf", "sears", "securestore", "sellbrite", "selleractive", "shipengine_api", "shipengine_merchant", "shipstation", "shop_premium_outlets", "shopify", "shoppingfeed", "shopware_de", "simplepart", "skuvault", "soldsie", "sophio", "spark_shipping", "spree", "spreesy", "square", "squarespace", "stitch_labs", "storenvy", "stripe", "suredone", "tanga", "tophatter", "trade_me", "tradegecko", "ultracart", "unbranded_ecommerce_store", "unleashed", "vault", "visualsoft", "volo", "volusion", "vtex", "walmart", "walmart_ca", "wayfair", "webflow", "weebly", "wish", "wix", "woocommerce", "woocommerce_v2", "woot", "x-cart", "yahoo", "sec_yumbles", "zen_cart", "zonos"]);
5
+ /**
6
+ * @category Factories
7
+ */
8
+ const orderSourceRefreshInfoFactory = Factory.define(() => {
9
+ const lastRefreshAttempt = faker.date.recent();
10
+ return {
11
+ lastRefreshAttempt: lastRefreshAttempt.toISOString(),
12
+ refreshDate: faker.date.recent(1, lastRefreshAttempt).toISOString(),
13
+ status: faker.helpers.arrayElement(["idle", "preparing_update", "updating", "error", "unknown"])
14
+ };
15
+ });
16
+ /**
17
+ * @category Factories
18
+ */
19
+ Factory.define(({
20
+ associations,
21
+ params
22
+ }) => {
23
+ var _a;
24
+ return {
25
+ active: faker.datatype.boolean(),
26
+ orderSourceCode: randomOrderSourceCode(),
27
+ orderSourceFriendlyName: faker.company.name(),
28
+ orderSourceId: faker.datatype.uuid(),
29
+ orderSourceNickname: faker.random.words(),
30
+ refreshInfo: (_a = associations.refreshInfo) !== null && _a !== void 0 ? _a : orderSourceRefreshInfoFactory.build(params.refreshInfo)
31
+ };
32
+ });
33
+
34
+ export { orderSourceRefreshInfoFactory, randomOrderSourceCode };
@@ -0,0 +1,39 @@
1
+ import { faker } from '@faker-js/faker';
2
+ import { Factory } from 'fishery';
3
+ import { randomShipengineSlug } from '../utils.js';
4
+
5
+ /**
6
+ * @internal
7
+ *
8
+ * # Package Factory
9
+ *
10
+ * @category Factories
11
+ */
12
+ const packageFactory = Factory.define(({
13
+ transientParams
14
+ }) => ({
15
+ description: faker.lorem.sentence(),
16
+ dimensions: (transientParams === null || transientParams === void 0 ? void 0 : transientParams.noDimensions) ? undefined : {
17
+ height: faker.datatype.number({
18
+ max: 50,
19
+ min: 1,
20
+ precision: 0.1
21
+ }),
22
+ length: faker.datatype.number({
23
+ max: 50,
24
+ min: 1,
25
+ precision: 0.1
26
+ }),
27
+ unit: faker.helpers.arrayElement(["inch", "centimeter"]),
28
+ width: faker.datatype.number({
29
+ max: 50,
30
+ min: 1,
31
+ precision: 0.1
32
+ })
33
+ },
34
+ name: faker.random.words(),
35
+ packageCode: randomShipengineSlug(2),
36
+ packageId: randomShipengineSlug(3)
37
+ }));
38
+
39
+ export { packageFactory };
@@ -0,0 +1,21 @@
1
+ import { faker } from '@faker-js/faker';
2
+ import { Factory } from 'fishery';
3
+
4
+ /**
5
+ * @category Factories
6
+ */
7
+ const downloadFactory = Factory.define(() => ({
8
+ href: faker.internet.url(),
9
+ pdf: faker.internet.url(),
10
+ png: faker.internet.url(),
11
+ zpl: faker.internet.url()
12
+ }));
13
+ /**
14
+ * @category Factories
15
+ */
16
+ Factory.define(() => ({
17
+ href: faker.internet.url(),
18
+ type: faker.word.noun()
19
+ }));
20
+
21
+ export { downloadFactory };
@@ -0,0 +1,168 @@
1
+ import { __rest } from '../../_virtual/_tslib.js';
2
+ import { faker } from '@faker-js/faker';
3
+ import { SE } from '@shipengine/react-api';
4
+ import { Factory } from 'fishery';
5
+ import { randomShipengineSlug, randomShipengineId, tristateValue } from '../utils.js';
6
+ import { addressFactory, addressValidationFactory } from './address.js';
7
+ import { moneyFactory } from './money.js';
8
+ import { randomOrderSourceCode } from './order-source.js';
9
+ import { packageFactory } from './package.js';
10
+ import { downloadFactory } from './resource.js';
11
+ import { weightWithUnitFactory } from './weight.js';
12
+
13
+ const randomDeliveryConfirmation = () => faker.helpers.arrayElement(Object.values(SE.ConfirmationType));
14
+ const randomInsuranceProvider = (allowNone = true) => {
15
+ const availableProviders = Object.values(SE.InsuranceProviderType).filter(p => allowNone ? p : p !== "none");
16
+ return faker.helpers.arrayElement(availableProviders);
17
+ };
18
+ /**
19
+ * @category Factories
20
+ */
21
+ const productFactory = Factory.define(() => ({
22
+ countryOfOrigin: faker.address.countryCode(),
23
+ description: faker.commerce.productName(),
24
+ harmonizedTariffCode: faker.datatype.string(),
25
+ quantity: faker.datatype.number({
26
+ max: 10,
27
+ min: 1
28
+ }),
29
+ sku: faker.random.numeric(10),
30
+ skuDescription: faker.helpers.maybe(() => faker.lorem.sentence()),
31
+ unitOfMeasure: faker.helpers.maybe(() => faker.word.noun()),
32
+ value: moneyFactory.build()
33
+ }));
34
+ /**
35
+ * @category Factories
36
+ */
37
+ const shipmentItemFactory = Factory.define(({
38
+ params
39
+ }) => ({
40
+ asin: faker.helpers.maybe(() => faker.random.alphaNumeric(10)),
41
+ externalOrderId: faker.random.alphaNumeric(10),
42
+ externalOrderItemId: faker.random.alphaNumeric(10),
43
+ name: faker.commerce.productName(),
44
+ orderSourceCode: randomOrderSourceCode(),
45
+ quantity: faker.datatype.number({
46
+ max: 10,
47
+ min: 1
48
+ }),
49
+ salesOrderItemId: params.salesOrderId && faker.random.alphaNumeric(6),
50
+ sku: faker.random.numeric(10)
51
+ }));
52
+ /**
53
+ * @category Factories
54
+ */
55
+ const shipmentPackageFactory = Factory.define(({
56
+ associations,
57
+ params,
58
+ transientParams
59
+ }) => {
60
+ var _a, _b, _c, _d, _e;
61
+ const _f = packageFactory.build(params),
62
+ pkg = __rest(_f, ["name"]);
63
+ const isInsured = tristateValue(true, false, faker.datatype.boolean(), (_b = (_a = params.insuredValue) === null || _a === void 0 ? void 0 : _a.amount) !== null && _b !== void 0 ? _b : transientParams.isInsured);
64
+ return Object.assign(Object.assign({}, pkg), {
65
+ insuredValue: (_c = associations.insuredValue) !== null && _c !== void 0 ? _c : isInsured ? moneyFactory.build(params.insuredValue) : undefined,
66
+ labelDownload: (_d = associations.labelDownload) !== null && _d !== void 0 ? _d : transientParams.isShipped ? downloadFactory.build(params.labelDownload) : undefined,
67
+ labelMessages: associations.labelMessages,
68
+ products: transientParams.isInternational ? productFactory.buildList(1) : [],
69
+ trackingNumber: transientParams.isShipped ? faker.random.alphaNumeric(12, {
70
+ casing: "upper"
71
+ }) : undefined,
72
+ weight: (_e = associations.weight) !== null && _e !== void 0 ? _e : weightWithUnitFactory.build(params.weight)
73
+ });
74
+ });
75
+ /**
76
+ * @category Factories
77
+ */
78
+ const shipmentFactory = Factory.define(({
79
+ associations,
80
+ params,
81
+ sequence,
82
+ transientParams
83
+ }) => {
84
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
85
+ const shipTo = (_a = associations.shipTo) !== null && _a !== void 0 ? _a : addressFactory.build(params.shipTo, {
86
+ transient: {
87
+ isInternational: transientParams.isInternational
88
+ }
89
+ });
90
+ let insuranceProvider = SE.InsuranceProviderType.NONE;
91
+ if (transientParams.insuredValue || transientParams.isInsured) {
92
+ insuranceProvider = (_b = params.insuranceProvider) !== null && _b !== void 0 ? _b : randomInsuranceProvider(false);
93
+ } else if (transientParams.insuredValue === undefined && transientParams.isInsured === undefined) {
94
+ insuranceProvider = randomInsuranceProvider(true);
95
+ }
96
+ const shipDateObj = faker.date.soon(7);
97
+ shipDateObj.setHours(0, 0, 0, 0);
98
+ const totalWeight = (_c = associations.totalWeight) !== null && _c !== void 0 ? _c : weightWithUnitFactory.build(params.totalWeight);
99
+ return {
100
+ addressValidation: (_d = associations.addressValidation) !== null && _d !== void 0 ? _d : addressValidationFactory.build(params.addressValidation, {
101
+ associations: {
102
+ originalAddress: shipTo
103
+ }
104
+ }),
105
+ amountPaid: moneyFactory.build(),
106
+ carrierId: (_f = (_e = transientParams === null || transientParams === void 0 ? void 0 : transientParams.service) === null || _e === void 0 ? void 0 : _e.carrierId) !== null && _f !== void 0 ? _f : randomShipengineId(),
107
+ confirmation: randomDeliveryConfirmation(),
108
+ createdAt: faker.date.past().toISOString(),
109
+ customs: (_g = associations.customs) !== null && _g !== void 0 ? _g : transientParams.isInternational ? {
110
+ contents: faker.helpers.arrayElement(["documents", "gift", "merchandise", "returned_goods", "sample"]),
111
+ nonDelivery: faker.helpers.arrayElement(["return_to_sender", "treat_as_abandoned"])
112
+ } : undefined,
113
+ externalOrderId: faker.random.alphaNumeric(10),
114
+ externalShipmentId: faker.random.alphaNumeric(10),
115
+ insuranceProvider,
116
+ items: shipmentItemFactory.buildList(faker.datatype.number({
117
+ max: 10,
118
+ min: 1
119
+ }), transientParams.salesOrder ? {
120
+ externalOrderId: transientParams.salesOrder.externalOrderId,
121
+ orderSourceCode: transientParams.salesOrder.orderSource.orderSourceCode,
122
+ salesOrderId: (_h = transientParams.salesOrder) === null || _h === void 0 ? void 0 : _h.salesOrderId
123
+ } : {}),
124
+ modifiedAt: faker.date.recent().toISOString(),
125
+ orderSourceCode: (_k = (_j = transientParams.salesOrder) === null || _j === void 0 ? void 0 : _j.orderSource.orderSourceCode) !== null && _k !== void 0 ? _k : randomOrderSourceCode(),
126
+ packages: (_l = associations.packages) !== null && _l !== void 0 ? _l : shipmentPackageFactory.buildList(1, (_m = params.packages) === null || _m === void 0 ? void 0 : _m[0], {
127
+ associations: {
128
+ weight: totalWeight
129
+ },
130
+ transient: {
131
+ isInsured: insuranceProvider !== "none",
132
+ isInternational: transientParams.isInternational,
133
+ isShipped: transientParams.isShipped
134
+ }
135
+ }),
136
+ returnTo: (_q = (_o = associations.returnTo) !== null && _o !== void 0 ? _o : (_p = transientParams.warehouse) === null || _p === void 0 ? void 0 : _p.returnAddress) !== null && _q !== void 0 ? _q : addressFactory.build(),
137
+ serviceCode: (_s = (_r = transientParams.service) === null || _r === void 0 ? void 0 : _r.serviceCode) !== null && _s !== void 0 ? _s : randomShipengineSlug(),
138
+ shipDate: shipDateObj.toISOString(),
139
+ shipFrom: (_v = (_t = associations.shipFrom) !== null && _t !== void 0 ? _t : (_u = transientParams.warehouse) === null || _u === void 0 ? void 0 : _u.originAddress) !== null && _v !== void 0 ? _v : addressFactory.build(),
140
+ shipmentId: `se-${30000 + sequence}`,
141
+ shipmentStatus: transientParams.isShipped ? "label_purchased" : "pending",
142
+ shippingPaid: moneyFactory.build(),
143
+ shipTo,
144
+ tags: (_w = associations.tags) !== null && _w !== void 0 ? _w : [],
145
+ taxPaid: moneyFactory.build(),
146
+ totalWeight,
147
+ warehouseId: (_x = transientParams.warehouse) === null || _x === void 0 ? void 0 : _x.warehouseId
148
+ };
149
+ });
150
+ /**
151
+ * @category Factories
152
+ */
153
+ const salesOrderShipmentFactory = Factory.define(({
154
+ associations,
155
+ params,
156
+ transientParams
157
+ }) => {
158
+ var _a, _b, _c;
159
+ const shipment = shipmentFactory.build(params, {
160
+ associations,
161
+ transient: transientParams
162
+ });
163
+ return Object.assign(Object.assign({}, shipment), {
164
+ salesOrderIds: (_a = associations.salesOrderIds) !== null && _a !== void 0 ? _a : [(_c = (_b = transientParams.salesOrder) === null || _b === void 0 ? void 0 : _b.salesOrderId) !== null && _c !== void 0 ? _c : faker.datatype.uuid()]
165
+ });
166
+ });
167
+
168
+ export { productFactory, randomDeliveryConfirmation, randomInsuranceProvider, salesOrderShipmentFactory, shipmentFactory, shipmentItemFactory, shipmentPackageFactory };
@@ -0,0 +1,40 @@
1
+ import { faker } from '@faker-js/faker';
2
+ import { Factory } from 'fishery';
3
+
4
+ const randomWeightUnit = () => faker.helpers.arrayElement(["pound", "ounce", "gram", "kilogram"]);
5
+ /**
6
+ * @category Factories
7
+ */
8
+ Factory.define(() => ({
9
+ fractional: faker.datatype.number({
10
+ max: 16,
11
+ min: 0
12
+ }),
13
+ whole: faker.datatype.number({
14
+ max: 20,
15
+ min: 0
16
+ })
17
+ }));
18
+ /**
19
+ * @category Factories
20
+ */
21
+ const weightFactory = Factory.define(() => ({
22
+ value: faker.datatype.number({
23
+ max: 20,
24
+ min: 1,
25
+ precision: 0.1
26
+ })
27
+ }));
28
+ /**
29
+ * @category Factories
30
+ */
31
+ const weightWithUnitFactory = Factory.define(({
32
+ params
33
+ }) => {
34
+ const weight = weightFactory.build(params);
35
+ return Object.assign(Object.assign({}, weight), {
36
+ unit: randomWeightUnit()
37
+ });
38
+ });
39
+
40
+ export { randomWeightUnit, weightFactory, weightWithUnitFactory };
@@ -0,0 +1,15 @@
1
+ import { faker } from '@faker-js/faker';
2
+
3
+ const randomShipengineId = (length = 5) => `se-${faker.random.numeric(length)}`;
4
+ const randomShipengineSlug = wordCount => faker.lorem.slug(wordCount).replace("-", "_");
5
+ const tristateValue = (ifTrue, ifFalse, ifUndefined, value) => {
6
+ if (value === undefined) {
7
+ return ifUndefined;
8
+ }
9
+ if (value) {
10
+ return ifTrue;
11
+ }
12
+ return ifFalse;
13
+ };
14
+
15
+ export { randomShipengineId, randomShipengineSlug, tristateValue };
@@ -1,6 +1,6 @@
1
1
  import { useListCarriers, useGetFundingSourceMetadata, useGetInsuranceFundingSourceAcceptedTerms } from '@shipengine/react-api';
2
2
  import { filterFundingSourceCarriers } from '../../../utilities/shipengine/carrier.js';
3
- import { getIsInsuraceProviderAccepted, getInsuranceProviderWithFriendlyName } from '../../../utilities/shipengine/insurance.js';
3
+ import { groupTermsByProvider, getIsInsuraceProviderAccepted } from '../../../utilities/shipengine/insurance.js';
4
4
  import { useMemo } from 'react';
5
5
  import { useCarrierMetadata } from './use-carrier-metadata.js';
6
6
 
@@ -36,12 +36,10 @@ const useListFundingSourceCarriers = () => {
36
36
  //TODO: Remove hardcoded carrierMetadata and insuranceProviderMetadata when the friendlyName is available in the funding source metadata response
37
37
  const carrierMetadata = useCarrierMetadata();
38
38
  const insuranceProviderProfiles = useMemo(() => {
39
- return optionalTerms.map(t => {
40
- return Object.assign({
41
- agreedToTerms: getIsInsuraceProviderAccepted(t.termType, insuranceProviderAcceptedTerms === null || insuranceProviderAcceptedTerms === void 0 ? void 0 : insuranceProviderAcceptedTerms.acceptedTerms),
42
- terms: Object.assign({}, t)
43
- }, getInsuranceProviderWithFriendlyName(t.termType));
44
- });
39
+ const groupedProfiles = groupTermsByProvider(optionalTerms);
40
+ return groupedProfiles.map(profile => Object.assign(Object.assign({}, profile), {
41
+ agreedToTerms: profile.terms.some(term => getIsInsuraceProviderAccepted(term.termType, insuranceProviderAcceptedTerms === null || insuranceProviderAcceptedTerms === void 0 ? void 0 : insuranceProviderAcceptedTerms.acceptedTerms))
42
+ }));
45
43
  }, [optionalTerms, insuranceProviderAcceptedTerms]);
46
44
  const normalizeCarrierCode = (carrierCode, nickname) => carrierCode === "usps" || (nickname === null || nickname === void 0 ? void 0 : nickname.includes("free")) ? "stamps_com" : carrierCode;
47
45
  const normalizeConnectedCarrierCodes = new Set(connectedCarriers === null || connectedCarriers === void 0 ? void 0 : connectedCarriers.map(c => normalizeCarrierCode(c.carrierCode, c.nickname)));
@@ -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
  });