@shipengine/elements 2.24.1 → 2.25.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 (206) hide show
  1. package/README.md +187 -6
  2. package/dist/cjs/components/field/credit-card-input/credit-card-input.cjs +46 -29
  3. package/dist/cjs/components/field/rate-select/rate-card/rate-card.cjs +29 -5
  4. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +8 -3
  5. package/dist/cjs/components/field/rate-select/rate-select.cjs +26 -5
  6. package/dist/cjs/components/forms/address-form/address-form-schema.cjs +3 -3
  7. package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.cjs +57 -4
  8. package/dist/cjs/components/service-card/service-card.cjs +4 -4
  9. package/dist/cjs/components/service-card/service-card.styles.cjs +5 -2
  10. package/dist/cjs/components/service-point-display/service-point-display.cjs +1 -36
  11. package/dist/cjs/components/service-point-display/service-point-display.styles.cjs +0 -12
  12. package/dist/cjs/components/shipment-not-found-error/index.cjs +7 -0
  13. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.cjs +40 -0
  14. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.styles.cjs +24 -0
  15. package/dist/cjs/components/suspend-purchase/suspend-purchase.cjs +11 -3
  16. package/dist/cjs/elements/purchase-label/components/rate-form/rate-form.cjs +13 -3
  17. package/dist/cjs/elements/purchase-label/components/rate-form/rate-schema.cjs +7 -2
  18. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +2 -0
  19. package/dist/cjs/elements/purchase-label/hooks/use-rate-options.cjs +31 -2
  20. package/dist/cjs/elements/purchase-label/hooks/use-rates-form.cjs +14 -18
  21. package/dist/cjs/elements/purchase-label/hooks/use-request-rates.cjs +20 -20
  22. package/dist/cjs/elements/purchase-label/purchase-label.cjs +4 -1
  23. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.cjs +16 -31
  24. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.styles.cjs +0 -19
  25. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.cjs +54 -0
  26. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.styles.cjs +27 -0
  27. package/dist/cjs/features/payment-method-settings/payment-method-settings.cjs +56 -18
  28. package/dist/cjs/hooks/use-configure-shipment.cjs +32 -11
  29. package/dist/cjs/hooks/use-helpers.cjs +4 -1
  30. package/dist/cjs/index.cjs +15 -12
  31. package/dist/cjs/locales/en/account-settings.json.cjs +6 -0
  32. package/dist/cjs/locales/en/common.json.cjs +2 -0
  33. package/dist/cjs/locales/en/purchase-label.json.cjs +5 -3
  34. package/dist/cjs/package.json.cjs +1 -1
  35. package/dist/cjs/utilities/address.cjs +29 -0
  36. package/dist/cjs/utilities/index.cjs +3 -0
  37. package/dist/cjs/utilities/money.cjs +14 -0
  38. package/dist/cjs/utilities/rate-warning-messages.cjs +25 -0
  39. package/dist/cjs/utilities/shipengine/warehouses.cjs +2 -1
  40. package/dist/cjs/workflows/connect-external-carrier/connect-external-carrier.cjs +7 -3
  41. package/dist/cjs/workflows/label-workflow/label-workflow.cjs +11 -3
  42. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.cjs +1 -1
  43. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +17 -1
  44. package/dist/cjs/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.cjs +4 -1
  45. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +4 -1
  46. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +14 -3
  47. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +12 -12
  48. package/dist/esm/components/field/credit-card-input/credit-card-input.js +47 -30
  49. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +30 -6
  50. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +8 -3
  51. package/dist/esm/components/field/rate-select/rate-select.js +26 -5
  52. package/dist/esm/components/forms/address-form/address-form-schema.js +3 -3
  53. package/dist/esm/components/forms/edit-billing-form/edit-billing-form.js +58 -5
  54. package/dist/esm/components/service-card/service-card.js +4 -4
  55. package/dist/esm/components/service-card/service-card.styles.js +5 -2
  56. package/dist/esm/components/service-point-display/service-point-display.js +2 -37
  57. package/dist/esm/components/service-point-display/service-point-display.styles.js +0 -12
  58. package/dist/esm/components/shipment-not-found-error/index.js +1 -0
  59. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.js +38 -0
  60. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.styles.js +22 -0
  61. package/dist/esm/components/suspend-purchase/suspend-purchase.js +11 -3
  62. package/dist/esm/elements/purchase-label/components/rate-form/rate-form.js +14 -4
  63. package/dist/esm/elements/purchase-label/components/rate-form/rate-schema.js +7 -2
  64. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +2 -0
  65. package/dist/esm/elements/purchase-label/hooks/use-rate-options.js +31 -2
  66. package/dist/esm/elements/purchase-label/hooks/use-rates-form.js +14 -18
  67. package/dist/esm/elements/purchase-label/hooks/use-request-rates.js +20 -20
  68. package/dist/esm/elements/purchase-label/purchase-label.js +4 -1
  69. package/dist/esm/elements/shipment-summary/components/label-display/label-card.js +18 -33
  70. package/dist/esm/elements/shipment-summary/components/label-display/label-card.styles.js +0 -19
  71. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.js +52 -0
  72. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.styles.js +25 -0
  73. package/dist/esm/features/payment-method-settings/payment-method-settings.js +57 -19
  74. package/dist/esm/hooks/use-configure-shipment.js +33 -12
  75. package/dist/esm/hooks/use-helpers.js +4 -1
  76. package/dist/esm/index.js +1 -0
  77. package/dist/esm/locales/en/account-settings.json.js +6 -0
  78. package/dist/esm/locales/en/common.json.js +2 -0
  79. package/dist/esm/locales/en/purchase-label.json.js +5 -3
  80. package/dist/esm/package.json.js +1 -1
  81. package/dist/esm/utilities/address.js +26 -0
  82. package/dist/esm/utilities/index.js +1 -0
  83. package/dist/esm/utilities/money.js +14 -1
  84. package/dist/esm/utilities/rate-warning-messages.js +23 -0
  85. package/dist/esm/utilities/shipengine/warehouses.js +2 -1
  86. package/dist/esm/workflows/connect-external-carrier/connect-external-carrier.js +7 -3
  87. package/dist/esm/workflows/label-workflow/label-workflow.js +11 -3
  88. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.js +1 -1
  89. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +17 -1
  90. package/dist/esm/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.js +4 -1
  91. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +4 -1
  92. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +14 -3
  93. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +12 -12
  94. package/dist/types/components/field/credit-card-input/credit-card-input.d.ts.map +1 -1
  95. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +4 -2
  96. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  97. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +7 -2
  98. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  99. package/dist/types/components/field/rate-select/rate-select.d.ts +1 -0
  100. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  101. package/dist/types/components/forms/address-form/address-form-schema.d.ts.map +1 -1
  102. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts +2 -1
  103. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts.map +1 -1
  104. package/dist/types/components/service-card/service-card.d.ts +1 -1
  105. package/dist/types/components/service-card/service-card.d.ts.map +1 -1
  106. package/dist/types/components/service-card/service-card.styles.d.ts +4 -1
  107. package/dist/types/components/service-card/service-card.styles.d.ts.map +1 -1
  108. package/dist/types/components/service-point-display/service-point-display.d.ts.map +1 -1
  109. package/dist/types/components/service-point-display/service-point-display.styles.d.ts +0 -12
  110. package/dist/types/components/service-point-display/service-point-display.styles.d.ts.map +1 -1
  111. package/dist/types/components/shipment-not-found-error/index.d.ts +2 -0
  112. package/dist/types/components/shipment-not-found-error/index.d.ts.map +1 -0
  113. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts +6 -0
  114. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts.map +1 -0
  115. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts +19 -0
  116. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts.map +1 -0
  117. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts +4 -2
  118. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts.map +1 -1
  119. package/dist/types/elements/labels-grid/labels-grid.d.ts +11 -1
  120. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  121. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +11 -1
  122. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  123. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +11 -1
  124. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  125. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +11 -1
  126. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  127. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +11 -1
  128. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  129. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +11 -1
  130. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  131. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts +1 -1
  132. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts.map +1 -1
  133. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts +10 -1
  134. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts.map +1 -1
  135. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts +2 -1
  136. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts.map +1 -1
  137. package/dist/types/elements/purchase-label/hooks/use-rate-options.d.ts.map +1 -1
  138. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts +2 -2
  139. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts.map +1 -1
  140. package/dist/types/elements/purchase-label/hooks/use-request-rates.d.ts.map +1 -1
  141. package/dist/types/elements/purchase-label/purchase-label.d.ts +11 -1
  142. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  143. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +11 -1
  144. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  145. package/dist/types/elements/shipment-summary/components/label-display/label-card.d.ts.map +1 -1
  146. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts +0 -19
  147. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts.map +1 -1
  148. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts +8 -0
  149. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts.map +1 -0
  150. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts +22 -0
  151. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts.map +1 -0
  152. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +11 -1
  153. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  154. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts.map +1 -1
  155. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +11 -1
  156. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  157. package/dist/types/elements/theme-creator/theme-creator.d.ts +11 -1
  158. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  159. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +11 -1
  160. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  161. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +11 -1
  162. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  163. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +11 -1
  164. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  165. package/dist/types/elements/void-label/void-label.d.ts +11 -1
  166. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  167. package/dist/types/features/payment-method-settings/payment-method-settings.d.ts.map +1 -1
  168. package/dist/types/hooks/use-configure-shipment.d.ts +1 -0
  169. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  170. package/dist/types/hooks/use-helpers.d.ts +2 -0
  171. package/dist/types/hooks/use-helpers.d.ts.map +1 -1
  172. package/dist/types/index.d.ts +1 -1
  173. package/dist/types/index.d.ts.map +1 -1
  174. package/dist/types/locales/en/index.d.ts +11 -1
  175. package/dist/types/locales/en/index.d.ts.map +1 -1
  176. package/dist/types/types/rates.d.ts +1 -0
  177. package/dist/types/types/rates.d.ts.map +1 -1
  178. package/dist/types/utilities/address.d.ts +21 -0
  179. package/dist/types/utilities/address.d.ts.map +1 -0
  180. package/dist/types/utilities/feature-flags/types.d.ts +1 -1
  181. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  182. package/dist/types/utilities/index.d.ts +1 -0
  183. package/dist/types/utilities/index.d.ts.map +1 -1
  184. package/dist/types/utilities/money.d.ts +6 -0
  185. package/dist/types/utilities/money.d.ts.map +1 -1
  186. package/dist/types/utilities/rate-warning-messages.d.ts +15 -0
  187. package/dist/types/utilities/rate-warning-messages.d.ts.map +1 -0
  188. package/dist/types/workflows/account-settings/account-settings.d.ts +11 -1
  189. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  190. package/dist/types/workflows/carrier-services/carrier-services.d.ts +11 -1
  191. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  192. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +11 -1
  193. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  194. package/dist/types/workflows/label-workflow/label-workflow.d.ts +11 -1
  195. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  196. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  197. package/dist/types/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.d.ts.map +1 -1
  198. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts +2 -1
  199. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts.map +1 -1
  200. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts +3 -1
  201. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  202. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -0
  203. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  204. package/dist/types/workflows/onboarding/onboarding.d.ts +11 -1
  205. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  206. package/package.json +3 -3
@@ -4,7 +4,7 @@ import { getDefaultShipFromAddress } from '../utilities/shipengine/address.js';
4
4
  import { getIsCustomsRequiredForSalesOrder, getCustomsFromSalesOrder } from '../utilities/shipengine/sales-order.js';
5
5
  import { getShipmentByStatus } from '../utilities/shipengine/shipment.js';
6
6
  import { getDefaultWarehouse, getWarehouseById } from '../utilities/shipengine/warehouses.js';
7
- import { useMemo, useCallback, useEffect } from 'react';
7
+ import { useState, useMemo, useCallback, useEffect } from 'react';
8
8
  import { useImportSalesOrder } from './use-import-sales-order.js';
9
9
 
10
10
  const useConfigureShipment = ({
@@ -20,6 +20,8 @@ const useConfigureShipment = ({
20
20
  warehouseId,
21
21
  useWarehouses = true
22
22
  }) => {
23
+ // Track when we've created a replacement shipment for a "not found" case
24
+ const [replacementShipmentId, setReplacementShipmentId] = useState();
23
25
  // Queue of incomplete requirement keys (i.e., Ship From addresses, Warehouses, Carriers)
24
26
  const incompleteRequirementsKeys = useMemo(() => [], []);
25
27
  const {
@@ -75,7 +77,7 @@ const useConfigureShipment = ({
75
77
  salesOrderIds: salesOrderId ? [salesOrderId] : salesOrder ? [salesOrder.salesOrderId] :
76
78
  // TODO: current workaround - revert to being undefined rather than empty list
77
79
  [],
78
- shipmentIds: shipmentId ? [shipmentId] : externalShipment ? [externalShipment.shipmentId] : newV1Shipment ? [newV1Shipment.shipments[0].shipmentId] : undefined
80
+ shipmentIds: replacementShipmentId ? [replacementShipmentId] : shipmentId ? [shipmentId] : externalShipment ? [externalShipment.shipmentId] : newV1Shipment ? [newV1Shipment.shipments[0].shipmentId] : undefined
79
81
  });
80
82
  const {
81
83
  error: createSalesOrderShipmentErrors,
@@ -88,6 +90,19 @@ const useConfigureShipment = ({
88
90
  const cancelledShipment = getShipmentByStatus("cancelled", salesOrderShipments);
89
91
  const defaultWarehouse = getDefaultWarehouse(warehouses);
90
92
  const defaultShipFromAddress = getDefaultShipFromAddress(shipFromAddresses);
93
+ // Common function to create a V1 shipment
94
+ const createV1ShipmentWithDefaults = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
95
+ const v1Shipment = yield createV1Shipment(Object.assign({}, (defaultShipFromAddress === null || defaultShipFromAddress === void 0 ? void 0 : defaultShipFromAddress.originAddress) ? {
96
+ shipFrom: defaultShipFromAddress.originAddress
97
+ } : {
98
+ warehouseId: warehouseId ? warehouseId : defaultWarehouse.warehouseId
99
+ }));
100
+ if (v1Shipment) {
101
+ yield refetchSalesOrderShipments();
102
+ return v1Shipment;
103
+ }
104
+ return null;
105
+ }), [createV1Shipment, defaultShipFromAddress, defaultWarehouse, warehouseId, refetchSalesOrderShipments]);
91
106
  // Handles the creation of new shipments for the sales order flow and one-off flow
92
107
  const handleShipmentCreation = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
93
108
  var _a, _b, _c;
@@ -137,16 +152,17 @@ const useConfigureShipment = ({
137
152
  }
138
153
  // Create a Shipment for one-off flow
139
154
  if (!salesOrderId && !externalOrderId && !externalOrderNumber && !orderSourceCode && !shipmentId && !externalShipmentId) {
140
- const v1Shipment = yield createV1Shipment(Object.assign({}, (defaultShipFromAddress === null || defaultShipFromAddress === void 0 ? void 0 : defaultShipFromAddress.originAddress) ? {
141
- shipFrom: defaultShipFromAddress.originAddress
142
- } : {
143
- warehouseId: warehouseId ? warehouseId : defaultWarehouse.warehouseId
144
- }));
145
- if (v1Shipment) {
146
- yield refetchSalesOrderShipments();
147
- }
155
+ yield createV1ShipmentWithDefaults();
156
+ }
157
+ }), [createSalesOrderShipment, createV1ShipmentWithDefaults, creatingSalesOrderShipment, creatingV1Shipment, defaultShipFromAddress, defaultWarehouse, externalOrderId, externalOrderNumber, externalShipmentId, incompleteRequirementsKeys, isExternalShipmentFetching, isExternalShipmentInitialLoading, isFetchingWarehouses, isInitialLoadingWarehouses, labelPurchasedSalesOrderShipment, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching, orderSourceCode, pendingSalesOrderShipment, salesOrder, salesOrderId, salesOrderShipmentCreated, shipFromAddresses === null || shipFromAddresses === void 0 ? void 0 : shipFromAddresses.length, shipmentId, useWarehouses, v1shipmentCreated, warehouseId, warehouses]);
158
+ const createNewShipmentForNotFound = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
159
+ // Force create a new shipment even if shipmentId exists (for shipment_not_found case)
160
+ const v1Shipment = yield createV1ShipmentWithDefaults();
161
+ if (v1Shipment) {
162
+ // Store the new shipment ID to override the stale one
163
+ setReplacementShipmentId(v1Shipment.shipments[0].shipmentId);
148
164
  }
149
- }), [createSalesOrderShipment, createV1Shipment, creatingSalesOrderShipment, creatingV1Shipment, defaultShipFromAddress, defaultWarehouse, externalOrderId, externalOrderNumber, externalShipmentId, incompleteRequirementsKeys, isExternalShipmentFetching, isExternalShipmentInitialLoading, isFetchingWarehouses, isInitialLoadingWarehouses, labelPurchasedSalesOrderShipment, listSalesOrderShipmentsInitiallyLoading, listSalesOrderShipmentsIsFetching, orderSourceCode, pendingSalesOrderShipment, refetchSalesOrderShipments, salesOrder, salesOrderId, salesOrderShipmentCreated, shipFromAddresses === null || shipFromAddresses === void 0 ? void 0 : shipFromAddresses.length, shipmentId, useWarehouses, v1shipmentCreated, warehouseId, warehouses]);
165
+ }), [createV1ShipmentWithDefaults]);
150
166
  const refetchPendingSalesOrderShipments = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
151
167
  const {
152
168
  data: shipments
@@ -178,13 +194,18 @@ const useConfigureShipment = ({
178
194
  errorCode: "invalid_status",
179
195
  errorSource: "elements",
180
196
  errorType: "business_rules"
181
- })] : []), ...(incompleteRequirementsKeys.length > 0 ? [new CodedError(incompleteRequirementsKeys.length > 1 ? "no_carriers_and_warehouses" : incompleteRequirementsKeys[0], {
197
+ })] : []), ...(incompleteRequirementsKeys.length > 0 ? [new CodedError(incompleteRequirementsKeys.length === 1 ? "no_carriers_and_warehouses" : incompleteRequirementsKeys[0], {
182
198
  errorCode: "unknown",
183
199
  errorSource: "elements",
184
200
  errorType: "business_rules"
201
+ })] : []), ...((salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) === 0 && shipmentId ? [new CodedError("shipment_not_found", {
202
+ errorCode: "invalid_status",
203
+ errorSource: "elements",
204
+ errorType: "business_rules"
185
205
  })] : [])];
186
206
  return {
187
207
  carriers,
208
+ createNewShipmentForNotFound,
188
209
  errors: errors.length > 0 ? errors : undefined,
189
210
  isLoading: (isSalesOrderLoading || !(salesOrderShipments === null || salesOrderShipments === void 0 ? void 0 : salesOrderShipments.length) || creatingSalesOrderShipment) && errors.length === 0,
190
211
  refetchPendingSalesOrderShipments,
@@ -1,4 +1,5 @@
1
1
  import { useListCarriers, useListWarehouses } from '@shipengine/react-api';
2
+ import { getUsStates, getCountries } from '../utilities/address.js';
2
3
  import { isOnboarded, validateShipFromAddress } from '../utilities/checks.js';
3
4
 
4
5
  const useHelpers = () => {
@@ -15,7 +16,9 @@ const useHelpers = () => {
15
16
  return {
16
17
  helpersReady,
17
18
  sellerOnboarded,
18
- validateShipFromAddress
19
+ validateShipFromAddress,
20
+ getCountries,
21
+ getUsStates
19
22
  };
20
23
  };
21
24
 
package/dist/esm/index.js CHANGED
@@ -2,6 +2,7 @@ export * from '@shipengine/react-api';
2
2
  export { createStyles, scopeTheme } from './utilities/styles.js';
3
3
  export { getDefaultFeatures } from './utilities/feature-flags/feature-flags.js';
4
4
  export { getSellerIdFromToken, isOnboarded, validateShipFromAddress } from './utilities/checks.js';
5
+ export { getCountries, getUsStates } from './utilities/address.js';
5
6
  export { Country, UsState, UsaCity, addressNameRegex, countries, countryCodes, euCountryCodes, postalCodeRegex, usCities, usStateCodes, usStates } from './constants/shipengine/address.js';
6
7
  import * as manageCarriers from './elements/manage-carriers/manage-carriers.js';
7
8
  export { manageCarriers as ManageCarriers };
@@ -24,6 +24,12 @@ var accoutSettings = {
24
24
  labelLayout: "Shipping Label Layout",
25
25
  unitSettings: "Units of Measure",
26
26
  vatSettings: "Tax Settings"
27
+ },
28
+ errors: {
29
+ paymentMethod: {
30
+ title: "Error Updating Payment Method",
31
+ description: "There was an error updating your payment method. Ensure your payment information is correct and try again. If the problem persists, contact support at {{email}}."
32
+ }
27
33
  }
28
34
  }
29
35
  };
@@ -161,10 +161,12 @@ var common = {
161
161
  total: "Total"
162
162
  },
163
163
  errorMessages: {
164
+ fundingSourceCreationFailed: "Please check your payment and billing details, and confirm that your bank hasn’t blocked the payment method. If the issue persists, please contact support at {{email}}.",
164
165
  contactSupport: "Your transaction may not have processed as expected. Please contact support at {{email}}.",
165
166
  invalidNameOrCompany: "Recipient name and company name (if provided) must have two characters in first and last name.",
166
167
  parsingFailure: "Parsing failed. Please check address and try again.",
167
168
  incompleteLabelPurchaseRequirements: "Please add your {{requirements}} to continue purchasing a label.",
169
+ shipmentNotFound: "Cannot find shipment with ID: {{id}}.",
168
170
  shipmentCancelled: "This shipment is Cancelled in ShipStation. Log into ShipStation to restore the order to Awaiting Shipment status.",
169
171
  unableToLoad: {
170
172
  accountSettings: "Unable to load account settings",
@@ -10,7 +10,8 @@ var purchaseLabel = {
10
10
  showItems: "Show items",
11
11
  showMoreRates: "Show more rates",
12
12
  showFewerRates: "Show fewer rates",
13
- saveRate: "Save Rate"
13
+ saveRate: "Save Rate",
14
+ createNewShipment: "Create New Shipment"
14
15
  },
15
16
  balance: {
16
17
  currentBalance: "Available Funds:",
@@ -127,7 +128,6 @@ var purchaseLabel = {
127
128
  otherLocations: "Other drop off points near you:",
128
129
  noServicePointsForService: "There are no drop off locations for this service within 10km of your search area.",
129
130
  error: "Unable to find drop off locations within 10km of your search area.",
130
- paperless: "Print & Paperless",
131
131
  localTimeDisclaimer: "Hours shown in local time"
132
132
  },
133
133
  shipToAddressFormFields: "Ship To Address Form Fields",
@@ -141,7 +141,9 @@ var purchaseLabel = {
141
141
  },
142
142
  warnings: {
143
143
  parcelGuardShipDate: "ParcelGuard must be purchased within 48 hours of the ship date. Please update the ship date to continue."
144
- }
144
+ },
145
+ paperlessAvailable: "Paperless available",
146
+ usePaperlessLabel: "Use Paperless Label (QR Code)"
145
147
  }
146
148
  };
147
149
 
@@ -1,3 +1,3 @@
1
- var version = "2.24.1";
1
+ var version = "2.25.0";
2
2
 
3
3
  export { version };
@@ -0,0 +1,26 @@
1
+ import { usStates, countries } from '../constants/shipengine/address.js';
2
+
3
+ /**
4
+ * Returns a simplified list of countries for use in dropdowns and forms.
5
+ *
6
+ * @returns Array of country objects with name and code properties
7
+ */
8
+ const getCountries = () => {
9
+ return countries.map(country => ({
10
+ name: country.name,
11
+ code: country.code
12
+ }));
13
+ };
14
+ /**
15
+ * Returns a simplified list of US states for use in dropdowns and forms.
16
+ *
17
+ * @returns Array of US state objects with name and code properties
18
+ */
19
+ const getUsStates = () => {
20
+ return usStates.map(state => ({
21
+ name: state.name,
22
+ code: state.code
23
+ }));
24
+ };
25
+
26
+ export { getCountries, getUsStates };
@@ -1,3 +1,4 @@
1
1
  export { createStyles, scopeTheme } from './styles.js';
2
2
  export { getSellerIdFromToken, isOnboarded, validateShipFromAddress } from './checks.js';
3
+ export { getCountries, getUsStates } from './address.js';
3
4
  export { getDefaultFeatures } from './feature-flags/feature-flags.js';
@@ -36,6 +36,19 @@ const calculateTotal = (...values) => {
36
36
  return value ? total + ((_a = value.amount) !== null && _a !== void 0 ? _a : 0) : total;
37
37
  }, 0);
38
38
  };
39
+ /**
40
+ * @internal
41
+ *
42
+ * # Money Utils - maskCreditCardNumber
43
+ */
44
+ const maskCreditCardNumber = cc => {
45
+ const sanitizedCC = cc.replace(/\s/g, "");
46
+ if (!sanitizedCC || sanitizedCC.length < 15 || sanitizedCC.length > 16) {
47
+ return cc;
48
+ }
49
+ const maskedCCNumber = "*".repeat(sanitizedCC.length - 4) + sanitizedCC.slice(-4);
50
+ return maskedCCNumber.replace(/(.{4})/g, "$1 ").trim();
51
+ };
39
52
  /**
40
53
  * @internal
41
54
  *
@@ -94,4 +107,4 @@ const getCurrencySymbolFromString = currency => {
94
107
  return currencySymbol;
95
108
  };
96
109
 
97
- export { calculateTotal, currencySymbol, formatCreditCardNumber, formatExpiration, formatMoney, getCurrencyFromString, getCurrencySymbolFromString };
110
+ export { calculateTotal, currencySymbol, formatCreditCardNumber, formatExpiration, formatMoney, getCurrencyFromString, getCurrencySymbolFromString, maskCreditCardNumber };
@@ -0,0 +1,23 @@
1
+ import rateMessages from '../data/rate-messages.json.js';
2
+
3
+ /**
4
+ * Builds warning messages for a rate by combining messages from different sources:
5
+ * 1. Messages for serviceCode:shipDay combination
6
+ * 2. Messages for serviceCode:packageType combination
7
+ * 3. Messages for serviceCode only
8
+ * 4. Existing warning messages from the rate
9
+ */
10
+ const buildRateWarningMessages = ({
11
+ serviceCode,
12
+ packageType,
13
+ shipDay,
14
+ existingWarningMessages = []
15
+ }) => {
16
+ const keys = [shipDay && `${serviceCode}:${shipDay}`, packageType && `${serviceCode}:${packageType}`, serviceCode].filter(Boolean);
17
+ return [...keys.flatMap(key => {
18
+ var _a;
19
+ return (_a = rateMessages[key]) !== null && _a !== void 0 ? _a : [];
20
+ }), ...existingWarningMessages];
21
+ };
22
+
23
+ export { buildRateWarningMessages };
@@ -1,5 +1,6 @@
1
1
  const getDefaultWarehouse = warehouses => {
2
- return warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.isDefault);
2
+ var _a;
3
+ return (_a = warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.isDefault)) !== null && _a !== void 0 ? _a : warehouses === null || warehouses === void 0 ? void 0 : warehouses[0];
3
4
  };
4
5
  const getWarehouseById = (warehouseId, warehouses) => {
5
6
  return warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.warehouseId === warehouseId);
@@ -64,7 +64,7 @@ const Component = ({
64
64
  refetch: refetchSchema
65
65
  } = useGetCarrierConnectionForm({
66
66
  carrierName: selectedCarrier !== null && selectedCarrier !== void 0 ? selectedCarrier : "apicode-dummy-carrier",
67
- enabled: false
67
+ enabled: !!selectedCarrier
68
68
  });
69
69
  useEffect(() => {
70
70
  if (selectedCarrier && needsRefetch) {
@@ -131,7 +131,9 @@ const Component = ({
131
131
  const updatedSchema = Object.assign({}, schema);
132
132
  // camelize required fields, as casing varies between carriers
133
133
  if (updatedSchema.required && Array.isArray(updatedSchema.required)) {
134
- updatedSchema.required = updatedSchema.required.map(humps.camelize);
134
+ updatedSchema.required = updatedSchema.required.map(item => {
135
+ return typeof item === "string" ? humps.camelize(item) : item;
136
+ });
135
137
  }
136
138
  // camelize property keys
137
139
  // fail safe to ensure schema properties and required array match in the event the camelizeKeys from shipengine/js-api isn't consistent
@@ -153,7 +155,9 @@ const Component = ({
153
155
  const updatedUiSchema = Object.assign({}, uiSchemaClone);
154
156
  // add nickname to ui:order and camelize the values to ensure consistency with jsonSchema properties and required array
155
157
  if (!hasNicknameProperty && updatedUiSchema["ui:order"]) {
156
- updatedUiSchema["ui:order"] = [...updatedUiSchema["ui:order"], "nickname"].map(humps.camelize);
158
+ // ui:order is typically an array of strings, but apparently can also be an array of arrays of strings, so we need to recursively camelize the items
159
+ const camelizeUIOrderItem = item => typeof item === "string" ? humps.camelize(item) : item.map(i => humps.camelize(i));
160
+ updatedUiSchema["ui:order"] = [...updatedUiSchema["ui:order"], "nickname"].map(camelizeUIOrderItem);
157
161
  }
158
162
  return updatedUiSchema;
159
163
  }, [uiSchema, hasNicknameProperty]);
@@ -44,6 +44,7 @@ const Component = _a => {
44
44
  data: accountSettings
45
45
  } = useGetAccountSettings();
46
46
  const {
47
+ createNewShipmentForNotFound,
47
48
  shipment,
48
49
  salesOrder,
49
50
  isLoading: isConfiguringShipment,
@@ -57,19 +58,24 @@ const Component = _a => {
57
58
  useWarehouses: (_b = propFeatures === null || propFeatures === void 0 ? void 0 : propFeatures.shipmentForm) === null || _b === void 0 ? void 0 : _b.useWarehouses,
58
59
  warehouseId
59
60
  }));
61
+ // Track if we have a shipment_not_found error to avoid reusing the bad shipment ID
62
+ const hasShipmentNotFoundError = configureShipmentErrors === null || configureShipmentErrors === void 0 ? void 0 : configureShipmentErrors.some(error => error.message === "shipment_not_found");
63
+ const shipmentId = _multiplexedId && "shipmentId" in _multiplexedId ? _multiplexedId.shipmentId : undefined;
60
64
  const {
61
65
  data: insuranceAccount,
62
66
  isInitialLoading: insuranceIsLoading
63
67
  } = useGetInsuranceAccount((shipment === null || shipment === void 0 ? void 0 : shipment.insuranceProvider) === SE.InsuranceProviderType.SHIPSURANCE ? SE.InsuranceProviderType.SHIPSURANCE : undefined);
64
68
  const {
65
69
  data: labelsResponse,
66
- isLoading: isLabelsLoading,
70
+ isFetching: isLabelsLoading,
67
71
  error: listLabelsErrors,
68
72
  refetch: refetchLabels
69
73
  } = useListLabels({
70
- enabled: _multiplexedId && "shipmentId" in _multiplexedId ? true : !!(shipment === null || shipment === void 0 ? void 0 : shipment.shipmentId),
74
+ enabled:
75
+ // Don't enable if we have a shipment_not_found error (avoid reusing bad ID)
76
+ hasShipmentNotFoundError ? false : _multiplexedId && "shipmentId" in _multiplexedId ? true : !!(shipment === null || shipment === void 0 ? void 0 : shipment.shipmentId),
71
77
  queryFnParams: {
72
- shipmentId: _multiplexedId && "shipmentId" in _multiplexedId ? _multiplexedId.shipmentId : shipment === null || shipment === void 0 ? void 0 : shipment.shipmentId
78
+ shipmentId: (shipment === null || shipment === void 0 ? void 0 : shipment.shipmentId) || (!hasShipmentNotFoundError ? shipmentId : undefined)
73
79
  }
74
80
  });
75
81
  /**
@@ -173,6 +179,8 @@ const Component = _a => {
173
179
  data: shipment || salesOrder,
174
180
  errors: errors.length ? errors : undefined,
175
181
  isLoading: isLabelsLoading || isConfiguringShipment || insuranceIsLoading,
182
+ onCreateNewShipment: createNewShipmentForNotFound,
183
+ shipmentId: shipmentId,
176
184
  children: element && getElement(element)
177
185
  });
178
186
  };
@@ -71,7 +71,7 @@ const ConfirmationAndSubmissionStep = ({
71
71
  }),
72
72
  children: [jsx(CcProviderLogo, {
73
73
  provider: provider,
74
- width: 36
74
+ width: 56
75
75
  }), jsx(Typography, {
76
76
  variant: "body2",
77
77
  children: `**** **** **** ${last4 !== null && last4 !== void 0 ? last4 : "****"}`
@@ -1,8 +1,10 @@
1
1
  import { __awaiter } from '../../../../_virtual/_tslib.js';
2
+ import { useScrubErrors } from '../../../../hooks/use-scrub-errors.js';
2
3
  import { useAddSandboxCarriers, useCreateFundingSource, useUpdateFundingSource, useRegisterCarrier } from '@shipengine/react-api';
3
4
  import { getSellerIdFromToken } from '../../../../utilities/checks.js';
4
5
  import { getDefaultWarehouse } from '../../../../utilities/shipengine/warehouses.js';
5
6
  import { useState, useCallback } from 'react';
7
+ import { useTranslation } from 'react-i18next';
6
8
  import { useManageWarehouses } from '../../../../features/manage-warehouses/use-manage-warehouses.js';
7
9
  import { useElements } from '../../../../elements-provider/elements-context-provider.js';
8
10
 
@@ -13,6 +15,9 @@ const useConfirmationAndSubmissionStep = ({
13
15
  globalFeatures,
14
16
  getToken
15
17
  } = useElements();
18
+ const {
19
+ t
20
+ } = useTranslation();
16
21
  const [isSubmittingOnboarding, setIsSubmittingOnboarding] = useState(false);
17
22
  const {
18
23
  createWarehouse,
@@ -33,6 +38,15 @@ const useConfirmationAndSubmissionStep = ({
33
38
  mutateAsync: createFundingSource,
34
39
  reset: resetCreateFundingSource
35
40
  } = useCreateFundingSource();
41
+ const displayableCreateFundingSourceErrors = useScrubErrors({
42
+ errors: createFundingSourceErrors !== null && createFundingSourceErrors !== void 0 ? createFundingSourceErrors : undefined,
43
+ predicate: useCallback(e => e.message.includes("An unexpected error occurred."), []),
44
+ scrubber: useCallback(() => {
45
+ return `${t("common:errorMessages.fundingSourceCreationFailed", {
46
+ email: globalFeatures.supportEmailAddress
47
+ })} `;
48
+ }, [globalFeatures.supportEmailAddress, t])
49
+ });
36
50
  const {
37
51
  error: updatePaymentMethodErrors,
38
52
  isLoading: isUpdatingPaymentMethod,
@@ -294,7 +308,9 @@ const useConfirmationAndSubmissionStep = ({
294
308
  setIsSubmittingOnboarding(false);
295
309
  }), [onboardSeller, updateExistingFundingSource, onStepComplete, createFundingSourceErrors, registerCarrierErrors, updatePaymentMethodErrors, updateWarehouseErrors]);
296
310
  return {
297
- createFundingSourceErrors,
311
+ createFundingSourceErrors: displayableCreateFundingSourceErrors === null || displayableCreateFundingSourceErrors === void 0 ? void 0 : displayableCreateFundingSourceErrors.map(message => ({
312
+ message
313
+ })),
298
314
  createOnboardingSubmissionHandler,
299
315
  isLoading: {
300
316
  connectingCarriers: isRegisteringCarriers,
@@ -59,6 +59,7 @@ const OnboardingWizard = ({
59
59
  isLoadingTermsAgreementStep,
60
60
  fundingSourceRequiredTerms,
61
61
  fundingSourceMetadata,
62
+ hasFreeStampsConnected,
62
63
  handleSubmitTermsAgreement,
63
64
  refetchCarriers,
64
65
  refetchFundingSources,
@@ -165,8 +166,10 @@ const OnboardingWizard = ({
165
166
  return jsx(TermsAgreementStep, {
166
167
  carrierProfilesToRegister: carrierProfilesToRegister,
167
168
  enabledCarrierProfiles: enabledCarrierProfiles,
169
+ fundingSourceRequiredTerms: fundingSourceRequiredTerms,
168
170
  insuranceProviderProfiles: insuranceProviderProfiles,
169
- onSubmit: handleSubmitTermsAgreement
171
+ onSubmit: handleSubmitTermsAgreement,
172
+ showStampsLogo: hasFreeStampsConnected
170
173
  });
171
174
  },
172
175
  label: t("onboarding:stepLabel.termsAgreement")
@@ -18,6 +18,7 @@ import { SubmitButton } from '../../../../components/field/submit-button/submit-
18
18
  const TermsAgreementForm = ({
19
19
  carrierTerms,
20
20
  hideTerms,
21
+ requiredTerms = [],
21
22
  insuranceProviderTerms,
22
23
  isSubmitDisabled,
23
24
  onSubmit
@@ -96,7 +97,9 @@ const TermsAgreementForm = ({
96
97
  title: t("onboarding:termsAndAgreementLinkText.auctanePrivacyPolicy")
97
98
  }]
98
99
  }
99
- }), !!carrierTerms.length && jsxs(Fragment, {
100
+ }), requiredTerms.map(term => jsx(DisplayTerm, {
101
+ term: term
102
+ }, term.termType)), !!carrierTerms.length && jsxs(Fragment, {
100
103
  children: [jsx(Spacer, {}), jsx(Typography, {
101
104
  bold: true,
102
105
  variant: "body1",
@@ -14,7 +14,9 @@ const TermsAgreementStep = ({
14
14
  carrierProfilesToRegister,
15
15
  insuranceProviderProfiles,
16
16
  onSubmit,
17
- enabledCarrierProfiles
17
+ enabledCarrierProfiles,
18
+ fundingSourceRequiredTerms,
19
+ showStampsLogo = false
18
20
  }) => {
19
21
  var _a, _b, _c, _d, _e;
20
22
  const {
@@ -47,8 +49,16 @@ const TermsAgreementStep = ({
47
49
  });
48
50
  }
49
51
  const renderCarrierLogos = () => {
52
+ var _a;
50
53
  if (!carrierProfilesToRegister.length) return null;
51
- return carrierProfilesToRegister.map(p => {
54
+ const stampsCarrierProfile = {
55
+ carrierCode: "stamps_com",
56
+ carrierName: (_a = carrierFriendlyNames["stamps_com"]) === null || _a === void 0 ? void 0 : _a.name
57
+ };
58
+ // kind of a goofy way to just display stamps/usps logo without sending it in the payload to register
59
+ // we don't want to register stamps as a carrier if it's not being used as the primary payment method
60
+ const carriersToDisplay = showStampsLogo ? [stampsCarrierProfile, ...carrierProfilesToRegister] : carrierProfilesToRegister;
61
+ return carriersToDisplay.map(p => {
52
62
  var _a;
53
63
  return jsx(CarrierLogo, {
54
64
  carrierCode: p.carrierCode,
@@ -99,7 +109,8 @@ const TermsAgreementStep = ({
99
109
  carrierTerms: carrierTerms,
100
110
  hideTerms: hideTerms,
101
111
  insuranceProviderTerms: insuranceProviderTerms,
102
- onSubmit: onSubmit
112
+ onSubmit: onSubmit,
113
+ requiredTerms: fundingSourceRequiredTerms
103
114
  })
104
115
  })]
105
116
  });
@@ -32,26 +32,25 @@ const useTermsAgreementStep = ({
32
32
  const fundingSourceRegion = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.defaultRegionProfile.countryCode;
33
33
  const fundingSourceCarrierProfiles = fundingSourceMetadata === null || fundingSourceMetadata === void 0 ? void 0 : fundingSourceMetadata.defaultRegionProfile.carrierProfiles;
34
34
  const carrierProfilesFilteredByRegion = filterFundingSourceCarriers(fundingSourceCarrierProfiles, fundingSourceRegion);
35
+ const hasFreeStampsConnected = carriers === null || carriers === void 0 ? void 0 : carriers.some(c => c.carrierCode === "stamps_com" && c.fundingSourceId === null);
35
36
  // filter carrier profiles based on enabled carriers
36
- const enabledCarrierProfiles = carrierProfilesFilteredByRegion === null || carrierProfilesFilteredByRegion === void 0 ? void 0 : carrierProfilesFilteredByRegion.filter(c => enabledCarriers.includes(c.carrierCode));
37
+ const enabledCarrierProfiles = carrierProfilesFilteredByRegion === null || carrierProfilesFilteredByRegion === void 0 ? void 0 : carrierProfilesFilteredByRegion.filter(c => {
38
+ if (c.carrierCode === "stamps_com" && hasFreeStampsConnected) {
39
+ // if stamps_com is connected as a free account, we don't want to show it in the list of carriers to register. The funding source creation will convert it to a walleted carrier as the default carrier.
40
+ return false;
41
+ }
42
+ // filter out carriers that are not enabled by the feature flag
43
+ return enabledCarriers.includes(c.carrierCode);
44
+ });
37
45
  const carrierProfilesToRegister = useMemo(() => {
38
46
  if (!enabledCarrierProfiles) return [];
39
- // add Stamps/USPS carrier ToS from funding source terms
40
- const carrierProfiles = enabledCarrierProfiles.map(c => {
41
- if (c.carrierCode === "stamps_com" && fundingSourceRequiredTerms) {
42
- return Object.assign(Object.assign({}, c), {
43
- requiredTerms: [...fundingSourceRequiredTerms, ...c.requiredTerms]
44
- });
45
- }
46
- return c;
47
- });
48
47
  // handle existing funding source
49
48
  const {
50
49
  fundingSourceId
51
50
  } = (fundingSources === null || fundingSources === void 0 ? void 0 : fundingSources[0]) || {};
52
- if (!fundingSourceId || !carriers) return carrierProfiles;
51
+ if (!fundingSourceId || !carriers) return enabledCarrierProfiles;
53
52
  const connectedCarriers = carriers.filter(c => c.fundingSourceId === fundingSourceId);
54
- return carrierProfiles.filter(profile => {
53
+ return enabledCarrierProfiles.filter(profile => {
55
54
  // filter out carriers that are already connected
56
55
  const isConnected = connectedCarriers.some(c => c.carrierCode === profile.carrierCode && c.fundingSourceId === fundingSourceId);
57
56
  // if stamps_com is enabled, and usps is connected to the funding source,
@@ -98,6 +97,7 @@ const useTermsAgreementStep = ({
98
97
  carrierProfilesToRegister,
99
98
  enabledCarrierProfiles,
100
99
  fundingSourceMetadata,
100
+ hasFreeStampsConnected,
101
101
  fundingSourceRequiredTerms,
102
102
  fundingSources,
103
103
  handleSubmitTermsAgreement,
@@ -1 +1 @@
1
- {"version":3,"file":"credit-card-input.d.ts","sourceRoot":"","sources":["../../../../../src/components/field/credit-card-input/credit-card-input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAYlE,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,gBAAgB,CAwB7D,CAAC"}
1
+ {"version":3,"file":"credit-card-input.d.ts","sourceRoot":"","sources":["../../../../../src/components/field/credit-card-input/credit-card-input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAKxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAgBlE,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,gBAAgB,CAoC7D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { WithCommonProps } from "@shipengine/giger";
2
- import type { ServicePoint } from "@shipengine/react-api";
2
+ import type { LabelDisplayScheme, ServicePoint } from "@shipengine/react-api";
3
3
  import type { RateOption } from "@types";
4
4
  export type RateCardProps = Partial<RateOption> & WithCommonProps<{
5
5
  isAcknowledged?: boolean;
@@ -8,10 +8,12 @@ export type RateCardProps = Partial<RateOption> & WithCommonProps<{
8
8
  mapViewEnabled?: boolean;
9
9
  onClick?: (rateId: string) => void;
10
10
  onClickAcknowledgement?: (isAcknowledged: boolean) => void;
11
+ onPaperlessAcknowledgementChange?: (usePaperless?: boolean, labelDisplayScheme?: LabelDisplayScheme) => void;
11
12
  onSelectServicePoint?: (servicePoint?: ServicePoint) => void;
12
13
  selected?: boolean;
13
14
  selectedRateCost?: number;
14
15
  showVatFeatures?: boolean;
16
+ paperlessLabelChecked?: boolean;
15
17
  }>;
16
- export declare const RateCard: ({ carrierCode, carrierFriendlyName, carrierNickname, className, confirmationAmount, deliveryDays, insuranceAmount, isAcknowledged, messages, onClick, onClickAcknowledgement, onSelectServicePoint, otherAmount, rateId, requiresAcknowledgement, rateAcknowledgementMessage, selected, serviceCode, packageType, serviceType, shippingAmount, taxAmount, showVatFeatures, isLoading: servicePointsLoading, isPreferredRate, selectedRateCost, servicePoints, mapViewEnabled, rateDetails, }: RateCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
18
+ export declare const RateCard: ({ carrierCode, carrierFriendlyName, carrierNickname, className, confirmationAmount, deliveryDays, insuranceAmount, isAcknowledged, messages, onClick, onClickAcknowledgement, onPaperlessAcknowledgementChange, onSelectServicePoint, otherAmount, rateId, requiresAcknowledgement, rateAcknowledgementMessage, selected, serviceCode, packageType, serviceType, shippingAmount, taxAmount, showVatFeatures, isLoading: servicePointsLoading, isPreferredRate, selectedRateCost, servicePoints, mapViewEnabled, rateDetails, paperlessDisplaySchemes, paperlessLabelChecked, }: RateCardProps) => import("@emotion/react/jsx-runtime").JSX.Element;
17
19
  //# sourceMappingURL=rate-card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-card.d.ts","sourceRoot":"","sources":["../../../../../../src/components/field/rate-select/rate-card/rate-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAuC,UAAU,EAAE,MAAM,QAAQ,CAAC;AA4F9E,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,GAC7C,eAAe,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC,CAAC;AAEL,eAAO,MAAM,QAAQ,GAAI,8dA8BtB,aAAa,qDA0If,CAAC"}
1
+ {"version":3,"file":"rate-card.d.ts","sourceRoot":"","sources":["../../../../../../src/components/field/rate-select/rate-card/rate-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAuC,UAAU,EAAE,MAAM,QAAQ,CAAC;AA2F9E,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,GAC7C,eAAe,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,sBAAsB,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,gCAAgC,CAAC,EAAE,CACjC,YAAY,CAAC,EAAE,OAAO,EACtB,kBAAkB,CAAC,EAAE,kBAAkB,KACpC,IAAI,CAAC;IACV,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC,CAAC;AAEL,eAAO,MAAM,QAAQ,GAAI,gjBAiCtB,aAAa,qDAkKf,CAAC"}
@@ -2,10 +2,8 @@ import type { Theme } from "@emotion/react";
2
2
  export declare const getRateCardFirstLineSize: (theme: Theme) => string;
3
3
  export declare const styles: {
4
4
  acknowledgment: (theme: import("../../../../../typings/emotion").ScopedGigerTheme) => {
5
- alignItems: string;
6
5
  color: string;
7
6
  display: string;
8
- paddingTop: number;
9
7
  };
10
8
  divider: (theme: import("../../../../../typings/emotion").ScopedGigerTheme) => {
11
9
  borderColor: string;
@@ -27,5 +25,12 @@ export declare const styles: {
27
25
  right: number;
28
26
  top: number;
29
27
  };
28
+ paperlessText: (theme: import("../../../../../typings/emotion").ScopedGigerTheme) => {
29
+ display: string;
30
+ gap: number;
31
+ paddingTop: number;
32
+ color: string;
33
+ alignItems: string;
34
+ };
30
35
  };
31
36
  //# sourceMappingURL=rate-card.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-card.styles.d.ts","sourceRoot":"","sources":["../../../../../../src/components/field/rate-select/rate-card/rate-card.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,eAAO,MAAM,wBAAwB,GAAI,OAAO,KAAK,WAA2C,CAAC;AAEjG,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjB,CAAC"}
1
+ {"version":3,"file":"rate-card.styles.d.ts","sourceRoot":"","sources":["../../../../../../src/components/field/rate-select/rate-card/rate-card.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,eAAO,MAAM,wBAAwB,GAAI,OAAO,KAAK,WAA2C,CAAC;AAEjG,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCjB,CAAC"}
@@ -7,6 +7,7 @@ export type RateSelectProps = {
7
7
  isLoading?: boolean;
8
8
  mapViewEnabled?: boolean;
9
9
  nicknameFeature?: boolean;
10
+ onPaperlessAcknowledgementChange?: (usePaperlessLabel?: boolean, labelDisplayScheme?: SE.LabelDisplayScheme) => void;
10
11
  onSelectServicePoint?: (servicePoint?: SE.ServicePoint) => void;
11
12
  options: RateOption[];
12
13
  preferredServiceCodes?: RateFormProps["preferredServiceCodes"];
@@ -1 +1 @@
1
- {"version":3,"file":"rate-select.d.ts","sourceRoot":"","sources":["../../../../../src/components/field/rate-select/rate-select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAMlE,MAAM,MAAM,eAAe,GAAG;IAC5B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,YAAY,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,qBAAqB,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAC/D,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACvD,kBAAkB,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAaF,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,eAAe,EAAE,iBAAiB,CA0D1E,CAAC"}
1
+ {"version":3,"file":"rate-select.d.ts","sourceRoot":"","sources":["../../../../../src/components/field/rate-select/rate-select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAMlE,MAAM,MAAM,eAAe,GAAG;IAC5B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gCAAgC,CAAC,EAAE,CACjC,iBAAiB,CAAC,EAAE,OAAO,EAC3B,kBAAkB,CAAC,EAAE,EAAE,CAAC,kBAAkB,KACvC,IAAI,CAAC;IACV,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,YAAY,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,qBAAqB,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAC/D,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACvD,kBAAkB,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAaF,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,eAAe,CAAC,eAAe,EAAE,iBAAiB,CAgF1E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"address-form-schema.d.ts","sourceRoot":"","sources":["../../../../../src/components/forms/address-form/address-form-schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAW7B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B7B,CAAC;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"address-form-schema.d.ts","sourceRoot":"","sources":["../../../../../src/components/forms/address-form/address-form-schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAU7B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC7B,CAAC;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC"}