@shipengine/elements 2.26.5 → 2.28.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 (241) 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 +53 -42
  6. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +4 -0
  7. package/dist/cjs/components/field/rate-select/rate-select.cjs +80 -49
  8. package/dist/cjs/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.cjs +1 -1
  9. package/dist/cjs/components/forms/warehouse-form/warehouse-form.cjs +10 -1
  10. package/dist/cjs/components/service-card/service-card.cjs +3 -2
  11. package/dist/cjs/components/service-card/service-card.styles.cjs +4 -2
  12. package/dist/cjs/data/insurance-provider-metadatas.json.cjs +10 -4
  13. package/dist/cjs/elements/customs-form/customs-form-element.cjs +294 -0
  14. package/dist/cjs/elements/customs-form/customs-form-element.stories.cjs +243 -0
  15. package/dist/cjs/elements/customs-form/customs-form-schema.cjs +59 -0
  16. package/dist/cjs/elements/customs-form/customs-form-types.cjs +63 -0
  17. package/dist/cjs/elements/customs-form/index.cjs +10 -0
  18. package/dist/cjs/elements/index.cjs +5 -0
  19. package/dist/cjs/elements/labels-grid/hooks/use-labels-grid.cjs +2 -2
  20. package/dist/cjs/elements/labels-grid/labels-grid.cjs +29 -9
  21. package/dist/cjs/elements/labels-grid/labels-grid.styles.cjs +5 -0
  22. package/dist/cjs/elements/manage-carriers/manage-carriers.cjs +1 -1
  23. package/dist/cjs/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.cjs +1 -1
  24. package/dist/cjs/elements/purchase-label/components/index.cjs +2 -0
  25. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +3 -5
  26. package/dist/cjs/elements/purchase-label/components/shipment-form/shipment-form.cjs +7 -4
  27. package/dist/cjs/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.cjs +35 -11
  28. package/dist/cjs/elements/purchase-label/hooks/use-insurance-provider-options.cjs +2 -2
  29. package/dist/cjs/elements/shipments-grid/hooks/use-shipments-grid.cjs +2 -2
  30. package/dist/cjs/elements/shipments-grid/shipments-grid.cjs +20 -6
  31. package/dist/cjs/elements/shipments-grid/shipments-grid.styles.cjs +5 -0
  32. package/dist/cjs/factories/shipengine/address.cjs +114 -0
  33. package/dist/cjs/factories/shipengine/money.cjs +21 -0
  34. package/dist/cjs/factories/shipengine/order-source.cjs +37 -0
  35. package/dist/cjs/factories/shipengine/package.cjs +41 -0
  36. package/dist/cjs/factories/shipengine/resource.cjs +23 -0
  37. package/dist/cjs/factories/shipengine/shipment.cjs +176 -0
  38. package/dist/cjs/factories/shipengine/weight.cjs +44 -0
  39. package/dist/cjs/factories/utils.cjs +19 -0
  40. package/dist/cjs/features/manage-carriers/hooks/use-list-funding-source-carriers.cjs +4 -6
  41. package/dist/cjs/features/manage-carriers/manage-carriers.cjs +8 -6
  42. package/dist/cjs/features/manage-warehouses/manage-warehouses.cjs +9 -5
  43. package/dist/cjs/hooks/use-configure-shipment.cjs +55 -14
  44. package/dist/cjs/hooks/use-get-funding-source-insurance-provider.cjs +7 -7
  45. package/dist/cjs/hooks/use-get-service-data.cjs +60 -0
  46. package/dist/cjs/hooks/use-import-sales-order.cjs +45 -20
  47. package/dist/cjs/hooks/use-manage-funding-source-insurance.cjs +15 -23
  48. package/dist/cjs/index.cjs +5 -0
  49. package/dist/cjs/locales/en/common.json.cjs +1 -1
  50. package/dist/cjs/locales/en/list-labels.json.cjs +2 -1
  51. package/dist/cjs/locales/en/list-shipments.json.cjs +1 -1
  52. package/dist/cjs/locales/en/manage-warehouses.json.cjs +2 -0
  53. package/dist/cjs/locales/en/purchase-label.json.cjs +9 -1
  54. package/dist/cjs/package.json.cjs +1 -1
  55. package/dist/cjs/utilities/feature-flags/feature-flags.cjs +3 -1
  56. package/dist/cjs/utilities/shipengine/carrier.cjs +4 -0
  57. package/dist/cjs/utilities/shipengine/index.cjs +3 -0
  58. package/dist/cjs/utilities/shipengine/insurance.cjs +63 -0
  59. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +9 -9
  60. package/dist/cjs/workflows/onboarding/components/ship-from-address-step/ship-from-address-step.cjs +1 -1
  61. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +3 -2
  62. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +8 -6
  63. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +4 -19
  64. package/dist/esm/assets/xcover/logo.svg.js +23 -0
  65. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/index.js +1 -0
  66. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.js +54 -0
  67. package/dist/esm/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.js +25 -0
  68. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +53 -42
  69. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +4 -0
  70. package/dist/esm/components/field/rate-select/rate-select.js +80 -49
  71. package/dist/esm/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.js +1 -1
  72. package/dist/esm/components/forms/warehouse-form/warehouse-form.js +10 -1
  73. package/dist/esm/components/service-card/service-card.js +3 -2
  74. package/dist/esm/components/service-card/service-card.styles.js +4 -2
  75. package/dist/esm/data/insurance-provider-metadatas.json.js +9 -4
  76. package/dist/esm/elements/customs-form/customs-form-element.js +291 -0
  77. package/dist/esm/elements/customs-form/customs-form-element.stories.js +232 -0
  78. package/dist/esm/elements/customs-form/customs-form-schema.js +56 -0
  79. package/dist/esm/elements/customs-form/customs-form-types.js +60 -0
  80. package/dist/esm/elements/customs-form/index.js +3 -0
  81. package/dist/esm/elements/index.js +3 -0
  82. package/dist/esm/elements/labels-grid/hooks/use-labels-grid.js +2 -2
  83. package/dist/esm/elements/labels-grid/labels-grid.js +30 -10
  84. package/dist/esm/elements/labels-grid/labels-grid.styles.js +5 -0
  85. package/dist/esm/elements/manage-carriers/manage-carriers.js +1 -1
  86. package/dist/esm/elements/purchase-label/components/customs-forms/tax-ids/tax-ids.js +1 -1
  87. package/dist/esm/elements/purchase-label/components/index.js +1 -0
  88. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +3 -5
  89. package/dist/esm/elements/purchase-label/components/shipment-form/shipment-form.js +7 -4
  90. package/dist/esm/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.js +35 -11
  91. package/dist/esm/elements/purchase-label/hooks/use-insurance-provider-options.js +2 -2
  92. package/dist/esm/elements/shipments-grid/hooks/use-shipments-grid.js +2 -2
  93. package/dist/esm/elements/shipments-grid/shipments-grid.js +21 -7
  94. package/dist/esm/elements/shipments-grid/shipments-grid.styles.js +5 -0
  95. package/dist/esm/elements-provider/elements-context-provider.js +1 -1
  96. package/dist/esm/factories/shipengine/address.js +111 -0
  97. package/dist/esm/factories/shipengine/money.js +19 -0
  98. package/dist/esm/factories/shipengine/order-source.js +34 -0
  99. package/dist/esm/factories/shipengine/package.js +39 -0
  100. package/dist/esm/factories/shipengine/resource.js +21 -0
  101. package/dist/esm/factories/shipengine/shipment.js +168 -0
  102. package/dist/esm/factories/shipengine/weight.js +40 -0
  103. package/dist/esm/factories/utils.js +15 -0
  104. package/dist/esm/features/manage-carriers/hooks/use-list-funding-source-carriers.js +5 -7
  105. package/dist/esm/features/manage-carriers/manage-carriers.js +8 -6
  106. package/dist/esm/features/manage-warehouses/manage-warehouses.js +9 -5
  107. package/dist/esm/hooks/use-configure-shipment.js +55 -14
  108. package/dist/esm/hooks/use-get-funding-source-insurance-provider.js +7 -7
  109. package/dist/esm/hooks/use-get-service-data.js +58 -0
  110. package/dist/esm/hooks/use-import-sales-order.js +47 -22
  111. package/dist/esm/hooks/use-manage-funding-source-insurance.js +15 -23
  112. package/dist/esm/index.js +3 -0
  113. package/dist/esm/locales/en/common.json.js +1 -1
  114. package/dist/esm/locales/en/list-labels.json.js +2 -1
  115. package/dist/esm/locales/en/list-shipments.json.js +1 -1
  116. package/dist/esm/locales/en/manage-warehouses.json.js +2 -0
  117. package/dist/esm/locales/en/purchase-label.json.js +9 -1
  118. package/dist/esm/package.json.js +1 -1
  119. package/dist/esm/utilities/feature-flags/feature-flags.js +3 -1
  120. package/dist/esm/utilities/shipengine/carrier.js +4 -0
  121. package/dist/esm/utilities/shipengine/index.js +1 -1
  122. package/dist/esm/utilities/shipengine/insurance.js +61 -1
  123. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +9 -9
  124. package/dist/esm/workflows/onboarding/components/ship-from-address-step/ship-from-address-step.js +1 -1
  125. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +3 -2
  126. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +8 -6
  127. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +5 -20
  128. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts +2 -0
  129. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/index.d.ts.map +1 -0
  130. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts +8 -0
  131. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.d.ts.map +1 -0
  132. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts +22 -0
  133. package/dist/types/components/field/rate-select/rate-card/rate-attribute-item/rate-attribute-item.styles.d.ts.map +1 -0
  134. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +3 -2
  135. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  136. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +4 -0
  137. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  138. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  139. package/dist/types/components/forms/register-funding-source-insurance-form/register-funding-source-insurance-form.d.ts.map +1 -1
  140. package/dist/types/components/forms/warehouse-form/warehouse-form.d.ts.map +1 -1
  141. package/dist/types/components/service-card/service-card.d.ts +2 -1
  142. package/dist/types/components/service-card/service-card.d.ts.map +1 -1
  143. package/dist/types/components/service-card/service-card.styles.d.ts +2 -1
  144. package/dist/types/components/service-card/service-card.styles.d.ts.map +1 -1
  145. package/dist/types/elements/customs-form/customs-form-element.d.ts +1222 -0
  146. package/dist/types/elements/customs-form/customs-form-element.d.ts.map +1 -0
  147. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts +12 -0
  148. package/dist/types/elements/customs-form/customs-form-element.stories.d.ts.map +1 -0
  149. package/dist/types/elements/customs-form/customs-form-schema.d.ts +398 -0
  150. package/dist/types/elements/customs-form/customs-form-schema.d.ts.map +1 -0
  151. package/dist/types/elements/customs-form/customs-form-types.d.ts +139 -0
  152. package/dist/types/elements/customs-form/customs-form-types.d.ts.map +1 -0
  153. package/dist/types/elements/customs-form/index.d.ts +4 -0
  154. package/dist/types/elements/customs-form/index.d.ts.map +1 -0
  155. package/dist/types/elements/index.d.ts +1 -0
  156. package/dist/types/elements/index.d.ts.map +1 -1
  157. package/dist/types/elements/labels-grid/labels-grid.d.ts +14 -3
  158. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  159. package/dist/types/elements/labels-grid/labels-grid.styles.d.ts +5 -0
  160. package/dist/types/elements/labels-grid/labels-grid.styles.d.ts.map +1 -1
  161. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +14 -3
  162. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  163. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +14 -3
  164. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  165. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +14 -3
  166. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  167. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +14 -3
  168. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  169. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +14 -3
  170. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  171. package/dist/types/elements/purchase-label/components/index.d.ts +1 -0
  172. package/dist/types/elements/purchase-label/components/index.d.ts.map +1 -1
  173. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts +1 -1
  174. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts.map +1 -1
  175. package/dist/types/elements/purchase-label/components/shipment-form/shipment-form.d.ts.map +1 -1
  176. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts +6 -1
  177. package/dist/types/elements/purchase-label/hooks/use-filter-visible-rate-options/use-filter-visible-rate-options.d.ts.map +1 -1
  178. package/dist/types/elements/purchase-label/hooks/use-insurance-provider-options.d.ts.map +1 -1
  179. package/dist/types/elements/purchase-label/purchase-label.d.ts +14 -3
  180. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  181. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +14 -3
  182. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  183. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +14 -3
  184. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  185. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +14 -3
  186. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  187. package/dist/types/elements/shipments-grid/shipments-grid.styles.d.ts +5 -0
  188. package/dist/types/elements/shipments-grid/shipments-grid.styles.d.ts.map +1 -1
  189. package/dist/types/elements/theme-creator/theme-creator.d.ts +14 -3
  190. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  191. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +14 -3
  192. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  193. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +14 -3
  194. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  195. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +14 -3
  196. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  197. package/dist/types/elements/void-label/void-label.d.ts +14 -3
  198. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  199. package/dist/types/features/manage-carriers/hooks/use-list-funding-source-carriers.d.ts.map +1 -1
  200. package/dist/types/features/manage-carriers/manage-carriers.d.ts.map +1 -1
  201. package/dist/types/features/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  202. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  203. package/dist/types/hooks/use-get-funding-source-insurance-provider.d.ts.map +1 -1
  204. package/dist/types/hooks/use-get-service-data.d.ts +14 -0
  205. package/dist/types/hooks/use-get-service-data.d.ts.map +1 -0
  206. package/dist/types/hooks/use-import-sales-order.d.ts +20 -1
  207. package/dist/types/hooks/use-import-sales-order.d.ts.map +1 -1
  208. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts +3 -4
  209. package/dist/types/hooks/use-manage-funding-source-insurance.d.ts.map +1 -1
  210. package/dist/types/locales/en/index.d.ts +14 -3
  211. package/dist/types/locales/en/index.d.ts.map +1 -1
  212. package/dist/types/types/insurance-metadata.d.ts +1 -1
  213. package/dist/types/types/insurance-metadata.d.ts.map +1 -1
  214. package/dist/types/types/rates.d.ts +1 -0
  215. package/dist/types/types/rates.d.ts.map +1 -1
  216. package/dist/types/utilities/feature-flags/feature-flags.d.ts.map +1 -1
  217. package/dist/types/utilities/feature-flags/types.d.ts +8 -0
  218. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  219. package/dist/types/utilities/shipengine/carrier.d.ts.map +1 -1
  220. package/dist/types/utilities/shipengine/insurance.d.ts +31 -0
  221. package/dist/types/utilities/shipengine/insurance.d.ts.map +1 -1
  222. package/dist/types/workflows/account-settings/account-settings.d.ts +14 -3
  223. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  224. package/dist/types/workflows/carrier-services/carrier-services.d.ts +14 -3
  225. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  226. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +14 -3
  227. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  228. package/dist/types/workflows/label-workflow/label-workflow.d.ts +14 -3
  229. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  230. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  231. package/dist/types/workflows/onboarding/components/ship-from-address-step/ship-from-address-step.d.ts.map +1 -1
  232. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  233. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -5
  234. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  235. package/dist/types/workflows/onboarding/onboarding.d.ts +14 -3
  236. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  237. package/package.json +3 -3
  238. package/dist/cjs/hooks/use-get-service-name.cjs +0 -22
  239. package/dist/esm/hooks/use-get-service-name.js +0 -20
  240. package/dist/types/hooks/use-get-service-name.d.ts +0 -5
  241. package/dist/types/hooks/use-get-service-name.d.ts.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
2
+ import { useGetServiceData } from '../../hooks/use-get-service-data.js';
2
3
  import { useSortableQuery } from '../../hooks/use-sortable-query.js';
3
- import { EmptyState, Button, Tag, TagColor, TagVariant, Typography, Next } from '@shipengine/giger';
4
+ import { EmptyState, Button, Tag, TagColor, TagVariant, Skeleton, IconSize, Typography, Next } from '@shipengine/giger';
4
5
  import { toSnakeCase } from '../../utilities/formatString.js';
5
6
  import { useRef, useMemo, useEffect, useCallback } from 'react';
6
7
  import { useTranslation } from 'react-i18next';
@@ -19,6 +20,7 @@ import { useElements } from '../../elements-provider/elements-context-provider.j
19
20
  import { Spacer } from '../../components/spacer/spacer.js';
20
21
  import { PoweredByShipEngine } from '../../components/powered-by-shipengine/powered-by-shipengine.js';
21
22
  import { ErrorFallback } from '../../components/error-fallback/error-fallback.js';
23
+ import { CarrierIcon } from '../../components/carrier-icon/carrier-icon.js';
22
24
 
23
25
  const Component = ({
24
26
  labelStatus,
@@ -104,6 +106,10 @@ const Component = ({
104
106
  sortDir: sortState.dir,
105
107
  columns: columnsArray
106
108
  });
109
+ const {
110
+ getServiceInfo,
111
+ isLoadingCarriers
112
+ } = useGetServiceData();
107
113
  useEffect(() => {
108
114
  if (prevStatus.current !== labelStatus) {
109
115
  pageConfig.pagerProps.resetCurrentPage();
@@ -290,14 +296,22 @@ const Component = ({
290
296
  }
291
297
  },
292
298
  shippingService: {
293
- headerContent: t("list-labels:headers.shipping"),
299
+ headerContent: t("list-labels:headers.service"),
294
300
  renderCellContent: label => {
301
+ const serviceInfo = getServiceInfo(label);
295
302
  return jsxs(Fragment, {
296
- children: [jsx(Typography, {
297
- component: "p",
298
- css: styles.tableParagraph,
299
- variant: "body2",
300
- children: label.serviceName || label.serviceCode
303
+ children: [isLoadingCarriers ? jsx(Skeleton, {}) : jsxs("div", {
304
+ css: styles.serviceCell,
305
+ children: [serviceInfo.hasCarrierIcon && serviceInfo.carrierCode && jsx(CarrierIcon, {
306
+ carrierCode: serviceInfo.carrierCode,
307
+ carrierName: serviceInfo.serviceName || serviceInfo.carrierCode,
308
+ size: IconSize.SIZE_SMALL
309
+ }), jsx(Typography, {
310
+ component: "p",
311
+ css: styles.tableParagraph,
312
+ variant: "body2",
313
+ children: serviceInfo.serviceName || t("list-labels:none")
314
+ })]
301
315
  }), label.trackable && jsx(Next.Link, {
302
316
  bold: false,
303
317
  href: label.trackingUrl,
@@ -350,17 +364,23 @@ const Component = ({
350
364
  }
351
365
  }
352
366
  });
367
+ const labelExpired = label => {
368
+ const ninetyDaysAgo = new Date();
369
+ ninetyDaysAgo.setDate(ninetyDaysAgo.getDate() - 90);
370
+ return new Date(label.createdAt) < ninetyDaysAgo;
371
+ };
353
372
  // Actual actions are only allowed for completed labels
354
373
  if ((features === null || features === void 0 ? void 0 : features.showActions) && labels.some(label => label.status === "completed")) {
355
374
  cols.push({
356
375
  headerContent: "",
357
376
  renderCellContent: label => {
358
377
  var _a, _b;
378
+ const isLabelExpired = labelExpired(label);
359
379
  const isLabelDelivered = label.trackingStatus === "delivered";
360
- const isReprintAllowed = !!((_a = label.labelDownload) === null || _a === void 0 ? void 0 : _a.href) && label.status === "completed";
361
380
  const isVoidAllowed = !!onClickVoidLabel && label.status === "completed";
362
- const isPrintFormsAllowed = !!((_b = label.formDownload) === null || _b === void 0 ? void 0 : _b.href) && label.status === "completed";
363
381
  const isViewDetailsAllowed = !!onClickViewDetails;
382
+ const isReprintAllowed = !!((_a = label.labelDownload) === null || _a === void 0 ? void 0 : _a.href) && label.status === "completed" && !isLabelExpired;
383
+ const isPrintFormsAllowed = !!((_b = label.formDownload) === null || _b === void 0 ? void 0 : _b.href) && label.status === "completed" && !isLabelExpired;
364
384
  const allowActionsMenu = isReprintAllowed || isVoidAllowed || isPrintFormsAllowed || isViewDetailsAllowed;
365
385
  if (isLabelDelivered || !allowActionsMenu) {
366
386
  return null;
@@ -389,7 +409,7 @@ const Component = ({
389
409
  });
390
410
  }
391
411
  return cols;
392
- }, [t, toggleCreatedDateSort, sortState.createdAtDir, features === null || features === void 0 ? void 0 : features.columns, features === null || features === void 0 ? void 0 : features.showActions, labels, onClickExternalOrderId, onClickExternalShipmentId, onClickShipmentNumber, onClickTrackingNumber, onClickVoidLabel, onClickViewDetails, onClickPrintLabel, onClickPrintForms]);
412
+ }, [t, toggleCreatedDateSort, sortState.createdAtDir, features === null || features === void 0 ? void 0 : features.columns, features === null || features === void 0 ? void 0 : features.showActions, labels, onClickExternalOrderId, onClickExternalShipmentId, onClickShipmentNumber, getServiceInfo, isLoadingCarriers, onClickTrackingNumber, onClickVoidLabel, onClickViewDetails, onClickPrintLabel, onClickPrintForms]);
393
413
  const emptyContentComponent = useMemo(() => {
394
414
  if (isLoading) {
395
415
  return undefined;
@@ -6,6 +6,11 @@ const styles = createStyles({
6
6
  }, scopeTheme(theme).getComponentOverride("Table")),
7
7
  tableParagraph: {
8
8
  margin: 0
9
+ },
10
+ serviceCell: {
11
+ display: "flex",
12
+ alignItems: "center",
13
+ gap: "8px"
9
14
  }
10
15
  });
11
16
 
@@ -4,8 +4,8 @@ import { useFundingSourcesAddFunds } from '@shipengine/react-api';
4
4
  import { useCallback } from 'react';
5
5
  import { createElement } from '../../create-element/create-element.js';
6
6
  import { ShipEngineCarriers } from '../../features/manage-carriers/manage-carriers.js';
7
- import en from '../../locales/en/index.js';
8
7
  import { ErrorFallback } from '../../components/error-fallback/error-fallback.js';
8
+ import en from '../../locales/en/index.js';
9
9
 
10
10
  /**
11
11
  * # Manage-Carriers Element
@@ -127,7 +127,7 @@ const TaxIds = ({
127
127
  })]
128
128
  }), jsxs(Grid, {
129
129
  noPadding: true,
130
- children: [((_a = shipment.taxIdentifiers) === null || _a === void 0 ? void 0 : _a.length) && jsx(GridChild, {
130
+ children: [!!((_a = shipment.taxIdentifiers) === null || _a === void 0 ? void 0 : _a.length) && jsx(GridChild, {
131
131
  colSpan: 12,
132
132
  children: jsx(TaxIdList, {
133
133
  handleActionsClick: handleActionsClick,
@@ -1,2 +1,3 @@
1
1
  export { RateForm } from './rate-form/rate-form.js';
2
2
  export { ShipmentForm } from './shipment-form/shipment-form.js';
3
+ export { CustomsForms } from './customs-forms/customs-forms.js';
@@ -32,7 +32,6 @@ const RateView = ({
32
32
  rateOptions,
33
33
  rates,
34
34
  salesOrder,
35
- selectedRate,
36
35
  shipment,
37
36
  showVatFeatures
38
37
  }) => {
@@ -76,9 +75,8 @@ const RateView = ({
76
75
  }, [features === null || features === void 0 ? void 0 : features.enablePudoUI, pudoRateOptions, rateOptions]);
77
76
  const {
78
77
  collapsedRateOptionList,
79
- COLLAPSED_RATE_VIEW_LIMIT,
80
78
  filterVisibleRateOptions
81
- } = useFilterVisibleRateOptions(expandedRateOptionList, selectedRate, preferredServiceCodes);
79
+ } = useFilterVisibleRateOptions(expandedRateOptionList, features);
82
80
  const handleShowMoreRates = useCallback(() => {
83
81
  var _a;
84
82
  setShowHiddenRates === null || setShowHiddenRates === void 0 ? void 0 : setShowHiddenRates(!showHiddenRates);
@@ -197,8 +195,8 @@ const RateView = ({
197
195
  onClick: onSelectRate,
198
196
  onPaperlessAcknowledgementChange: onPaperlessAcknowledgementChange,
199
197
  onSelectServicePoint: onSelectServicePoint,
200
- options: showHiddenRates ? expandedRateOptionList : collapsedRateOptionList
201
- }, rateSelectCommonProps)), expandedRateOptionList.length > COLLAPSED_RATE_VIEW_LIMIT && jsx(LinkAction, {
198
+ options: showHiddenRates || !collapsedRateOptionList.length ? expandedRateOptionList : collapsedRateOptionList
199
+ }, rateSelectCommonProps)), expandedRateOptionList.length > collapsedRateOptionList.length && !!collapsedRateOptionList.length && jsx(LinkAction, {
202
200
  css: styles.showMoreOrLessRatesButton,
203
201
  icon: showHiddenRates ? "chevronTop" : "chevronBottom",
204
202
  iconPlacement: "right",
@@ -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 {
@@ -514,13 +515,15 @@ const ShipmentForm = ({
514
515
  useEffect(() => {
515
516
  hasShipFromAddressErrors && toggleIsEditShipFromAddressFormOpen();
516
517
  }, [hasShipFromAddressErrors, toggleIsEditShipFromAddressFormOpen]);
518
+ const warehouseToEdit = useMemo(() => warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.warehouseId === editShipFromAddressId), [editShipFromAddressId, warehouses]);
517
519
  const [editWarehouseForm, isEditWarehouseFormOpen, toggleIsEditWarehouseFormOpen] = useNestedForm(WarehouseForm, {
518
520
  formId: "edit-warehouse-form",
519
521
  onSubmit: payload => __awaiter(void 0, void 0, void 0, function* () {
520
522
  editShipFromAddressId && (yield handleSubmitEditWarehouse(payload, editShipFromAddressId));
521
523
  }),
522
524
  submitButtonTitle: t("actions.save"),
523
- warehouse: warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.warehouseId === editShipFromAddressId)
525
+ warehouse: warehouseToEdit,
526
+ shouldForceDefault: warehouseToEdit === null || warehouseToEdit === void 0 ? void 0 : warehouseToEdit.isDefault
524
527
  });
525
528
  const getFundingSourceInsuranceProviderKey = useCallback(provider => {
526
529
  if (provider === "parcelguard") {
@@ -532,7 +535,7 @@ const ShipmentForm = ({
532
535
  }, []);
533
536
  const insuranceProviderKey = useMemo(() => {
534
537
  var _a, _b, _c;
535
- if (enableParcelGuard && !hasInsuranceToRegister) {
538
+ if ((enableParcelGuard || enableXCover) && !hasInsuranceToRegister) {
536
539
  const provider = (_a = insuranceProviderProfiles === null || insuranceProviderProfiles === void 0 ? void 0 : insuranceProviderProfiles[0]) === null || _a === void 0 ? void 0 : _a.provider;
537
540
  const fundingSourceProviderKey = getFundingSourceInsuranceProviderKey(provider);
538
541
  if (fundingSourceProviderKey) {
@@ -540,7 +543,7 @@ const ShipmentForm = ({
540
543
  }
541
544
  }
542
545
  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]);
546
+ }, [enableParcelGuard, enableXCover, hasInsuranceToRegister, insuranceProviderOptions, insuranceProviderProfiles, getFundingSourceInsuranceProviderKey]);
544
547
  const [registerInsuranceForm, isRegisterInsuranceFormOpen, toggleisRegisterInsuranceFormOpen] = useNestedForm(RegisterFundingSourceInsuranceForm, {
545
548
  formId: "register-funding-source-insurance-form",
546
549
  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, showMediaMail) => {
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 (!showMediaMail && 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, features) => {
44
+ const collapsedRateOptionList = useMemo(() => filterRateOptions(rateOptions, features === null || features === void 0 ? void 0 : features.showMediaMail), [rateOptions, features]);
45
+ const filterVisibleRateOptions = useCallback(options => filterRateOptions(options, features === null || features === void 0 ? void 0 : features.showMediaMail), [features]);
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,4 +1,4 @@
1
- import { useGetServiceName } from '../../../hooks/use-get-service-name.js';
1
+ import { useGetServiceData } from '../../../hooks/use-get-service-data.js';
2
2
  import { useListShipments, useExportShipments, useGetShipment } from '@shipengine/react-api';
3
3
  import { createLocalFileFromBlobResponse } from '../../../utilities/files.js';
4
4
  import { useState, useEffect, useMemo } from 'react';
@@ -28,7 +28,7 @@ const useShipmentsGrid = ({
28
28
  const initialFilters = getInitialFilters(showShipmentIdFilter, showCreatedDateFilter);
29
29
  const {
30
30
  getServiceName
31
- } = useGetServiceName();
31
+ } = useGetServiceData();
32
32
  const {
33
33
  page,
34
34
  pageSize,
@@ -1,7 +1,8 @@
1
1
  import { __awaiter } from '../../_virtual/_tslib.js';
2
2
  import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
3
+ import { useGetServiceData } from '../../hooks/use-get-service-data.js';
3
4
  import { useSortableQuery } from '../../hooks/use-sortable-query.js';
4
- import { EmptyState, Button, Typography, Tag, TagColor, TagVariant } from '@shipengine/giger';
5
+ import { EmptyState, Button, Typography, Skeleton, IconSize, Tag, TagColor, TagVariant } from '@shipengine/giger';
5
6
  import { useMemo } from 'react';
6
7
  import { useTranslation } from 'react-i18next';
7
8
  import { useShipmentsGrid } from './hooks/use-shipments-grid.js';
@@ -12,6 +13,7 @@ import en from '../../locales/en/index.js';
12
13
  import { createElement } from '../../create-element/create-element.js';
13
14
  import { useElements } from '../../elements-provider/elements-context-provider.js';
14
15
  import { ErrorState } from '../../components/error-state/error-state.js';
16
+ import { CarrierIcon } from '../../components/carrier-icon/carrier-icon.js';
15
17
  import { CellFormattedDate } from '../../components/grid-controller/cell-formatted-date.js';
16
18
  import { SortableHeader } from '../../components/grid-controller/sortable-header/sortable-header.js';
17
19
  import { GridController } from '../../components/grid-controller/grid-controller.js';
@@ -85,6 +87,10 @@ const Component = ({
85
87
  sortBy: sortState.by,
86
88
  sortDir: sortState.dir
87
89
  });
90
+ const {
91
+ getServiceInfo,
92
+ isLoadingCarriers
93
+ } = useGetServiceData();
88
94
  const onRowClick = shipment => __awaiter(void 0, void 0, void 0, function* () {
89
95
  setActiveShipmentId(shipment.shipmentId);
90
96
  yield onRowClickProp === null || onRowClickProp === void 0 ? void 0 : onRowClickProp(shipment);
@@ -188,13 +194,21 @@ const Component = ({
188
194
  }) : "--";
189
195
  }
190
196
  }, {
191
- headerContent: t("list-shipments:headers.shipping"),
197
+ headerContent: t("list-shipments:headers.service"),
192
198
  renderCellContent: shipment => {
193
- return jsx(Typography, {
194
- component: "p",
195
- css: styles.tableParagraph,
196
- variant: "body2",
197
- children: shipment.serviceName || t("list-shipments:none")
199
+ const serviceInfo = getServiceInfo(shipment);
200
+ return isLoadingCarriers ? jsx(Skeleton, {}) : jsxs("div", {
201
+ css: styles.serviceCell,
202
+ children: [serviceInfo.hasCarrierIcon && serviceInfo.carrierCode && jsx(CarrierIcon, {
203
+ carrierCode: serviceInfo.carrierCode,
204
+ carrierName: serviceInfo.serviceName || serviceInfo.carrierCode,
205
+ size: IconSize.SIZE_SMALL
206
+ }), jsx(Typography, {
207
+ component: "p",
208
+ css: styles.tableParagraph,
209
+ variant: "body2",
210
+ children: serviceInfo.serviceName || t("list-shipments:none")
211
+ })]
198
212
  });
199
213
  }
200
214
  }, {
@@ -6,6 +6,11 @@ const styles = createStyles({
6
6
  }, scopeTheme(theme).getComponentOverride("Table")),
7
7
  tableParagraph: {
8
8
  margin: 0
9
+ },
10
+ serviceCell: {
11
+ display: "flex",
12
+ alignItems: "center",
13
+ gap: "8px"
9
14
  }
10
15
  });
11
16
 
@@ -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 };