@shipengine/elements 2.28.0 → 2.29.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 (130) hide show
  1. package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.cjs +87 -12
  2. package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.styles.cjs +15 -0
  3. package/dist/cjs/components/forms/wallet-form/index.cjs +0 -2
  4. package/dist/cjs/components/forms/wallet-form/wallet-form.cjs +153 -23
  5. package/dist/cjs/components/forms/wallet-form/wallet-form.styles.cjs +15 -0
  6. package/dist/cjs/components/forms/wallet-form/wallet-schema.cjs +8 -43
  7. package/dist/cjs/components/payment/payment-method-selector/index.cjs +7 -0
  8. package/dist/cjs/components/payment/payment-method-selector/payment-method-selector.cjs +55 -0
  9. package/dist/cjs/components/payment/payment-method-selector/payment-method-selector.styles.cjs +58 -0
  10. package/dist/cjs/contexts/auctane-pay-session-context.cjs +158 -0
  11. package/dist/cjs/contexts/index.cjs +8 -0
  12. package/dist/cjs/features/payment-method-settings/payment-method-settings.cjs +4 -3
  13. package/dist/cjs/hooks/financial-services/financial-service.cjs +464 -0
  14. package/dist/cjs/hooks/financial-services/index.cjs +9 -0
  15. package/dist/cjs/hooks/financial-services/use-financial-service.cjs +188 -0
  16. package/dist/cjs/locales/en/register-wallet.json.cjs +5 -0
  17. package/dist/cjs/package.json.cjs +1 -1
  18. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.cjs +16 -5
  19. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +6 -6
  20. package/dist/cjs/workflows/onboarding/components/funding-step/funding-step.cjs +7 -3
  21. package/dist/cjs/workflows/onboarding/onboarding.cjs +8 -5
  22. package/dist/esm/components/forms/edit-billing-form/edit-billing-form.js +88 -13
  23. package/dist/esm/components/forms/edit-billing-form/edit-billing-form.styles.js +15 -0
  24. package/dist/esm/components/forms/wallet-form/index.js +0 -1
  25. package/dist/esm/components/forms/wallet-form/wallet-form.js +155 -25
  26. package/dist/esm/components/forms/wallet-form/wallet-form.styles.js +15 -0
  27. package/dist/esm/components/forms/wallet-form/wallet-schema.js +1 -36
  28. package/dist/esm/components/payment/payment-method-selector/index.js +1 -0
  29. package/dist/esm/components/payment/payment-method-selector/payment-method-selector.js +53 -0
  30. package/dist/esm/components/payment/payment-method-selector/payment-method-selector.styles.js +56 -0
  31. package/dist/esm/contexts/auctane-pay-session-context.js +155 -0
  32. package/dist/esm/contexts/index.js +1 -0
  33. package/dist/esm/features/payment-method-settings/payment-method-settings.js +5 -4
  34. package/dist/esm/hooks/financial-services/financial-service.js +462 -0
  35. package/dist/esm/hooks/financial-services/index.js +2 -0
  36. package/dist/esm/hooks/financial-services/use-financial-service.js +186 -0
  37. package/dist/esm/locales/en/register-wallet.json.js +5 -0
  38. package/dist/esm/package.json.js +1 -1
  39. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.js +16 -5
  40. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +6 -6
  41. package/dist/esm/workflows/onboarding/components/funding-step/funding-step.js +7 -3
  42. package/dist/esm/workflows/onboarding/onboarding.js +8 -5
  43. package/dist/types/components/address-preference-context/address-preference-context.d.ts +0 -1
  44. package/dist/types/components/address-preference-context/address-preference-context.d.ts.map +1 -1
  45. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts +2 -2
  46. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts.map +1 -1
  47. package/dist/types/components/forms/edit-billing-form/edit-billing-form.styles.d.ts +14 -0
  48. package/dist/types/components/forms/edit-billing-form/edit-billing-form.styles.d.ts.map +1 -1
  49. package/dist/types/components/forms/wallet-form/index.d.ts +0 -1
  50. package/dist/types/components/forms/wallet-form/index.d.ts.map +1 -1
  51. package/dist/types/components/forms/wallet-form/wallet-form.d.ts +4 -1
  52. package/dist/types/components/forms/wallet-form/wallet-form.d.ts.map +1 -1
  53. package/dist/types/components/forms/wallet-form/wallet-form.styles.d.ts +14 -0
  54. package/dist/types/components/forms/wallet-form/wallet-form.styles.d.ts.map +1 -1
  55. package/dist/types/components/forms/wallet-form/wallet-schema.d.ts +3 -43
  56. package/dist/types/components/forms/wallet-form/wallet-schema.d.ts.map +1 -1
  57. package/dist/types/components/payment/payment-method-selector/index.d.ts +2 -0
  58. package/dist/types/components/payment/payment-method-selector/index.d.ts.map +1 -0
  59. package/dist/types/components/payment/payment-method-selector/payment-method-selector.d.ts +11 -0
  60. package/dist/types/components/payment/payment-method-selector/payment-method-selector.d.ts.map +1 -0
  61. package/dist/types/components/payment/payment-method-selector/payment-method-selector.styles.d.ts +52 -0
  62. package/dist/types/components/payment/payment-method-selector/payment-method-selector.styles.d.ts.map +1 -0
  63. package/dist/types/contexts/auctane-pay-session-context.d.ts +54 -0
  64. package/dist/types/contexts/auctane-pay-session-context.d.ts.map +1 -0
  65. package/dist/types/contexts/index.d.ts +3 -0
  66. package/dist/types/contexts/index.d.ts.map +1 -0
  67. package/dist/types/elements/customs-form/customs-form-element.d.ts +5 -0
  68. package/dist/types/elements/customs-form/customs-form-element.d.ts.map +1 -1
  69. package/dist/types/elements/labels-grid/labels-grid.d.ts +5 -0
  70. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  71. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +5 -0
  72. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  73. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +5 -0
  74. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  75. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +5 -0
  76. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  77. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +5 -0
  78. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  79. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +5 -0
  80. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  81. package/dist/types/elements/purchase-label/purchase-label.d.ts +5 -0
  82. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  83. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +5 -0
  84. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  85. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +5 -0
  86. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  87. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +5 -0
  88. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  89. package/dist/types/elements/theme-creator/theme-creator.d.ts +5 -0
  90. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  91. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +5 -0
  92. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  93. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +5 -0
  94. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  95. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +5 -0
  96. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  97. package/dist/types/elements/void-label/void-label.d.ts +5 -0
  98. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  99. package/dist/types/elements-provider/elements-provider.d.ts.map +1 -1
  100. package/dist/types/features/payment-method-settings/payment-method-settings.d.ts.map +1 -1
  101. package/dist/types/hooks/financial-services/financial-service.d.ts +279 -0
  102. package/dist/types/hooks/financial-services/financial-service.d.ts.map +1 -0
  103. package/dist/types/hooks/financial-services/index.d.ts +5 -0
  104. package/dist/types/hooks/financial-services/index.d.ts.map +1 -0
  105. package/dist/types/hooks/financial-services/use-financial-service.d.ts +40 -0
  106. package/dist/types/hooks/financial-services/use-financial-service.d.ts.map +1 -0
  107. package/dist/types/locales/en/index.d.ts +5 -0
  108. package/dist/types/locales/en/index.d.ts.map +1 -1
  109. package/dist/types/types/financial-services.d.ts +34 -0
  110. package/dist/types/types/financial-services.d.ts.map +1 -0
  111. package/dist/types/types/index.d.ts +1 -1
  112. package/dist/types/types/index.d.ts.map +1 -1
  113. package/dist/types/workflows/account-settings/account-settings.d.ts +5 -0
  114. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  115. package/dist/types/workflows/carrier-services/carrier-services.d.ts +5 -0
  116. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  117. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +5 -0
  118. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  119. package/dist/types/workflows/label-workflow/label-workflow.d.ts +5 -0
  120. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  121. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.d.ts.map +1 -1
  122. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  123. package/dist/types/workflows/onboarding/components/funding-step/funding-step.d.ts.map +1 -1
  124. package/dist/types/workflows/onboarding/onboarding.d.ts +5 -0
  125. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  126. package/package.json +5 -5
  127. package/dist/cjs/components/forms/wallet-form/billing-fields.cjs +0 -71
  128. package/dist/esm/components/forms/wallet-form/billing-fields.js +0 -69
  129. package/dist/types/components/forms/wallet-form/billing-fields.d.ts +0 -7
  130. package/dist/types/components/forms/wallet-form/billing-fields.d.ts.map +0 -1
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ var _tslib = require('../../_virtual/_tslib.cjs');
4
+ var React = require('react');
5
+ var financialService = require('./financial-service.cjs');
6
+ var elementsContextProvider = require('../../elements-provider/elements-context-provider.cjs');
7
+
8
+ /**
9
+ * React hook for managing Adyen payment components lifecycle
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { adyenRef, adyenSubmit, isLoading, error } = useFinancialService({
14
+ * serviceParams: { getAdyenSessionData: fetchSession },
15
+ * paymentMethod: "credit_card",
16
+ * options: { locale: 'en-US' }
17
+ * });
18
+ *
19
+ * return (
20
+ * <div>
21
+ * {isLoading && <Spinner />}
22
+ * {error && <ErrorMessage>{error.message}</ErrorMessage>}
23
+ * <div ref={adyenRef} />
24
+ * <button onClick={adyenSubmit}>Pay</button>
25
+ * </div>
26
+ * );
27
+ * ```
28
+ */
29
+ const useFinancialService = ({
30
+ getAdyenSessionData,
31
+ paymentMethod,
32
+ options
33
+ }) => {
34
+ const {
35
+ emotionCacheShadowRootContainer
36
+ } = elementsContextProvider.useElements();
37
+ const [isLoading, setIsLoading] = React.useState(true);
38
+ const [error, setError] = React.useState(null);
39
+ const [isMounted, setIsMounted] = React.useState(false);
40
+ const adyenRef = React.useRef(null);
41
+ const currentPaymentMethodRef = React.useRef(null);
42
+ const service = React.useRef(new financialService.FinancialService({
43
+ getAdyenSessionData
44
+ })).current;
45
+ /**
46
+ * Indicates if the current page is a redirect return (i.e., Coming back from bank account authorization).
47
+ */
48
+ const isRedirectReturn = !!new URLSearchParams(window.location.search).get("redirectResult");
49
+ const handleRedirect = React.useCallback(options => _tslib.__awaiter(void 0, void 0, void 0, function* () {
50
+ const params = new URLSearchParams(window.location.search);
51
+ const sessionId = params.get("sessionId");
52
+ const redirectResult = params.get("redirectResult");
53
+ if (!redirectResult || !sessionId) {
54
+ console.error("No redirectResult or sessionId param found in redirect URL");
55
+ return;
56
+ }
57
+ setIsLoading(true);
58
+ try {
59
+ yield service.handleRedirect(Object.assign({
60
+ redirectResult,
61
+ sessionId
62
+ }, options));
63
+ } catch (err) {
64
+ console.warn("Redirect handling failed:", err);
65
+ throw err;
66
+ } finally {
67
+ setIsLoading(false);
68
+ }
69
+ }), [service]);
70
+ const submit = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
71
+ if (!isMounted) {
72
+ throw new Error("Adyen component is not mounted. Cannot submit payment.");
73
+ }
74
+ return service.submitPromise();
75
+ }), [isMounted, service]);
76
+ const createCheckout = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
77
+ if (service.isReady()) {
78
+ yield service.createCheckout(paymentMethod, options);
79
+ } else {
80
+ throw new Error("Financial Services is not ready");
81
+ }
82
+ }), [options, paymentMethod, service]);
83
+ const init = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
84
+ if (!service.isReady()) {
85
+ yield service.init();
86
+ } else {
87
+ throw new Error("Financial Service already initialized");
88
+ }
89
+ }), [service]);
90
+ const mount = React.useCallback(() => {
91
+ if (!service.isReady()) {
92
+ throw new Error("Financial Services is not ready");
93
+ } else {
94
+ if (adyenRef.current) {
95
+ // Mount Adyen styles
96
+ const adyenStyles = document.createElement("link");
97
+ adyenStyles.rel = "stylesheet";
98
+ adyenStyles.href = "https://checkoutshopper-live.adyen.com/checkoutshopper/sdk/6.19.0/adyen.css";
99
+ adyenStyles.id = "adyen-styles";
100
+ emotionCacheShadowRootContainer === null || emotionCacheShadowRootContainer === void 0 ? void 0 : emotionCacheShadowRootContainer.appendChild(adyenStyles);
101
+ // Mount Adyen component
102
+ service.mount(adyenRef.current);
103
+ setIsMounted(true);
104
+ } else {
105
+ throw new Error("Failed to mount Adyen component");
106
+ }
107
+ }
108
+ }, [service, emotionCacheShadowRootContainer]);
109
+ React.useEffect(() => {
110
+ if (service.isReady()) {
111
+ setIsLoading(false);
112
+ return;
113
+ }
114
+ const initCheckout = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
115
+ setIsLoading(true);
116
+ setError(null);
117
+ try {
118
+ yield init();
119
+ yield createCheckout();
120
+ mount();
121
+ // Set the initial payment method
122
+ currentPaymentMethodRef.current = paymentMethod;
123
+ } catch (e) {
124
+ if (e instanceof Error) {
125
+ console.error("Financial Services Lifecycle Error: failed to initialize.", e);
126
+ setError(e);
127
+ }
128
+ } finally {
129
+ setIsLoading(false);
130
+ }
131
+ });
132
+ void initCheckout();
133
+ return () => {
134
+ var _a;
135
+ service.unmount();
136
+ (_a = document.getElementById("adyen-styles")) === null || _a === void 0 ? void 0 : _a.remove();
137
+ };
138
+ }, []); // Only run once on mount
139
+ // Handle payment method changes - recreate component when payment method changes
140
+ React.useEffect(() => {
141
+ if (!service.isReady() || currentPaymentMethodRef.current === paymentMethod) {
142
+ return;
143
+ }
144
+ const recreateComponent = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
145
+ setIsLoading(true);
146
+ setError(null);
147
+ setIsMounted(false);
148
+ try {
149
+ // Unmount the existing component
150
+ service.unmount();
151
+ if (service.isReady()) {
152
+ yield service.createCheckout(paymentMethod, options);
153
+ } else {
154
+ throw new Error("Financial Services is not ready");
155
+ }
156
+ // Mount the new component
157
+ if (adyenRef.current) {
158
+ service.mount(adyenRef.current);
159
+ setIsMounted(true);
160
+ } else {
161
+ throw new Error("Failed to mount Adyen component");
162
+ }
163
+ // Update the ref to track current payment method
164
+ currentPaymentMethodRef.current = paymentMethod;
165
+ } catch (e) {
166
+ if (e instanceof Error) {
167
+ console.error("Financial Services Error: failed to recreate component for payment method change.", e);
168
+ setError(e);
169
+ }
170
+ } finally {
171
+ setIsLoading(false);
172
+ }
173
+ });
174
+ void recreateComponent();
175
+ }, [paymentMethod, options, service]);
176
+ return {
177
+ adyenRef,
178
+ submit,
179
+ handleRedirect,
180
+ isRedirectReturn,
181
+ isLoading,
182
+ error,
183
+ isMounted,
184
+ getSessionData: () => service.getCurrentSessionData()
185
+ };
186
+ };
187
+
188
+ exports.useFinancialService = useFinancialService;
@@ -8,6 +8,11 @@ var registerWallet = {
8
8
  cardSubTitle: "Enter your payment details",
9
9
  addressSubTitle: "Billing Address"
10
10
  },
11
+ paymentMethod: {
12
+ title: "Payment Method",
13
+ creditCard: "Credit Card",
14
+ payByBank: "Pay by Bank"
15
+ },
11
16
  vatSettings: {
12
17
  title: "Tax Settings"
13
18
  },
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var version = "2.28.0";
3
+ var version = "2.29.0";
4
4
 
5
5
  exports.version = version;
@@ -72,22 +72,33 @@ const ConfirmationAndSubmissionStep = ({
72
72
  marginTop: styles.scopeTheme(theme).spacing(1)
73
73
  }),
74
74
  children: [jsxRuntime.jsx(ccProviderLogo.CcProviderLogo, {
75
- provider: provider,
76
- width: 56
75
+ provider: provider
77
76
  }), jsxRuntime.jsx(giger.Typography, {
78
77
  variant: "body2",
79
78
  children: `**** **** **** ${last4 !== null && last4 !== void 0 ? last4 : "****"}`
80
79
  })]
81
80
  });
82
81
  };
82
+ const mapAdyenBrandToProvider = brand => {
83
+ if (!brand) return undefined;
84
+ const brandMap = {
85
+ visa: "visa",
86
+ mc: "mastercard",
87
+ amex: "american_express",
88
+ discover: "discover"
89
+ };
90
+ return brandMap[brand.toLowerCase()];
91
+ };
83
92
  const PaymentInfoDisplay = () => {
84
93
  var _a, _b;
85
94
  return jsxRuntime.jsx(giger.GridChild, {
86
95
  colSpan: 9,
87
96
  children: walletPayload ? jsxRuntime.jsxs(jsxRuntime.Fragment, {
88
- children: [jsxRuntime.jsx(CreditCardDisplay, {
89
- last4: walletPayload.creditCard.cardNumber.slice(-4),
90
- provider: walletPayload.creditCard.provider
97
+ children: [walletPayload.paymentMethod === "credit_card" ? jsxRuntime.jsx(CreditCardDisplay, {
98
+ provider: mapAdyenBrandToProvider(walletPayload.cardBrand)
99
+ }) : jsxRuntime.jsx(giger.Typography, {
100
+ variant: "body2",
101
+ children: "Pay by Bank"
91
102
  }), showBillingAddress && jsxRuntime.jsxs(jsxRuntime.Fragment, {
92
103
  children: [jsxRuntime.jsx(spacer.Spacer, {
93
104
  multiplier: 1
@@ -153,8 +153,8 @@ const useConfirmationAndSubmissionStep = ({
153
153
  insuranceProviderProfiles
154
154
  }) => (_a, warehousePayload_1) => _tslib.__awaiter(void 0, [_a, warehousePayload_1], void 0, function* ({
155
155
  address,
156
- creditCard,
157
- iovationBlackbox
156
+ iovationBlackbox,
157
+ auctanePaySessionId
158
158
  }, warehousePayload) {
159
159
  var _b, _c;
160
160
  const warehouse = yield createOrUpdateWarehouse(warehousePayload);
@@ -175,7 +175,7 @@ const useConfirmationAndSubmissionStep = ({
175
175
  // Standard seller
176
176
  let fundingSource;
177
177
  try {
178
- fundingSource = yield createFundingSource({
178
+ const fundingSourcePayload = {
179
179
  acceptedTerms: fundingSourceRequiredTerms.map(({
180
180
  termType,
181
181
  version
@@ -191,9 +191,10 @@ const useConfirmationAndSubmissionStep = ({
191
191
  }),
192
192
  iovationBlackBox: iovationBlackbox,
193
193
  paymentMethod: {
194
- creditCardInfo: Object.assign({}, creditCard)
194
+ sessionId: auctanePaySessionId
195
195
  }
196
- });
196
+ };
197
+ fundingSource = yield createFundingSource(fundingSourcePayload);
197
198
  } catch (error) {
198
199
  console.error(error);
199
200
  throw error;
@@ -248,7 +249,6 @@ const useConfirmationAndSubmissionStep = ({
248
249
  email: (_a = walletPayload.address.email) !== null && _a !== void 0 ? _a : "",
249
250
  fullName: walletPayload.address.name
250
251
  }),
251
- creditCardInfo: walletPayload.creditCard,
252
252
  fundingSourceId
253
253
  });
254
254
  }
@@ -29,9 +29,13 @@ const FundingStep = ({
29
29
  passengerData
30
30
  } = _a,
31
31
  rest = _tslib.__rest(_a, ["passengerData"]);
32
- return onSubmit(Object.assign(Object.assign({}, passengerData), {
33
- address: rest.originAddress
34
- }));
32
+ const walletData = passengerData;
33
+ const walletPayload = {
34
+ address: rest.originAddress,
35
+ iovationBlackbox: walletData.iovationBlackbox,
36
+ paymentMethod: "credit_card"
37
+ };
38
+ onSubmit(walletPayload);
35
39
  },
36
40
  children: jsxRuntime.jsx(walletForm.WalletForm, {
37
41
  address: address,
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('@emotion/react/jsx-runtime');
4
+ var auctanePaySessionContext = require('../../contexts/auctane-pay-session-context.cjs');
4
5
  var onboardingWizard = require('./components/onboarding-wizard/onboarding-wizard.cjs');
5
6
  var index = require('../../locales/en/index.cjs');
6
7
  var createElement = require('../../create-element/create-element.cjs');
@@ -45,11 +46,13 @@ const Component = ({
45
46
  onSellerOnboarded,
46
47
  skipWelcomePage
47
48
  }) => {
48
- return jsxRuntime.jsx(onboardingWizard.OnboardingWizard, {
49
- defaultShipFromAddress: defaultShipFromAddress,
50
- onComplete: onComplete,
51
- onSellerOnboarded: onSellerOnboarded,
52
- skipWelcomePage: skipWelcomePage
49
+ return jsxRuntime.jsx(auctanePaySessionContext.AuctanePaySessionProvider, {
50
+ children: jsxRuntime.jsx(onboardingWizard.OnboardingWizard, {
51
+ defaultShipFromAddress: defaultShipFromAddress,
52
+ onComplete: onComplete,
53
+ onSellerOnboarded: onSellerOnboarded,
54
+ skipWelcomePage: skipWelcomePage
55
+ })
53
56
  });
54
57
  };
55
58
  /**
@@ -1,14 +1,19 @@
1
+ import { __awaiter } from '../../../_virtual/_tslib.js';
1
2
  import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
3
+ import { useAuctanePaySession } from '../../../contexts/auctane-pay-session-context.js';
2
4
  import { useToggle } from '../../../hooks/use-toggle.js';
3
- import { Grid, GridChild, Typography, Button, ButtonVariant, ButtonColor } from '@shipengine/giger';
5
+ import { Grid, GridChild, InlineNotification, NotificationType, Typography, Spinner, SpinnerSize, Button, ButtonVariant, ButtonColor } from '@shipengine/giger';
4
6
  import { formLogger } from '../../../utilities/form-logger.js';
5
7
  import { validationResolver } from '../../../utilities/validation.js';
8
+ import { useState } from 'react';
6
9
  import { useForm } from 'react-hook-form';
7
10
  import { useTranslation } from 'react-i18next';
8
- import { BillingFields } from '../wallet-form/billing-fields.js';
9
11
  import { styles } from './edit-billing-form.styles.js';
10
12
  import { getWalletSchema } from '../wallet-form/wallet-schema.js';
13
+ import { useFinancialService } from '../../../hooks/financial-services/use-financial-service.js';
11
14
  import { AddressFields } from '../address-form/address-fields.js';
15
+ import { useElements } from '../../../elements-provider/elements-context-provider.js';
16
+ import { Spacer } from '../../spacer/spacer.js';
12
17
  import { AddressDisplay } from '../../address-display/address-display.js';
13
18
  import { LinkAction } from '../../link-action/link-action.js';
14
19
  import { ButtonGroup } from '../../button-group/button-group.js';
@@ -24,7 +29,13 @@ const EditBillingForm = ({
24
29
  const {
25
30
  t
26
31
  } = useTranslation();
32
+ const {
33
+ locale
34
+ } = useElements();
35
+ const [isAdyenReady, setIsAdyenReady] = useState(false);
27
36
  const [editBillingInfo, toggleEditBillingInfo] = useToggle(false);
37
+ const [paymentError, setPaymentError] = useState(null);
38
+ const sessionContext = useAuctanePaySession();
28
39
  const form = useForm({
29
40
  resolver: validationResolver(getWalletSchema("emailRequired", "blackboxOptional"), ["creditCard"]),
30
41
  defaultValues: {
@@ -42,35 +53,99 @@ const EditBillingForm = ({
42
53
  }
43
54
  }
44
55
  });
45
- const handleSubmit = form.handleSubmit(values => {
56
+ const {
57
+ adyenRef,
58
+ submit: adyenSubmit,
59
+ getSessionData
60
+ } = useFinancialService({
61
+ getAdyenSessionData: sessionContext.getSessionData,
62
+ paymentMethod: "credit_card",
63
+ options: {
64
+ showPayButton: false,
65
+ locale: locale || "en-US",
66
+ onChange: () => {
67
+ setPaymentError(null);
68
+ },
69
+ creditCardOptions: {
70
+ onLoad: event => {
71
+ if (event.iframesLoaded) {
72
+ setIsAdyenReady(true);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ });
78
+ const handleSubmit = form.handleSubmit(values => __awaiter(void 0, void 0, void 0, function* () {
46
79
  const {
47
- address,
48
- creditCard
80
+ address
49
81
  } = values;
50
82
  const billingInfo = Object.assign(Object.assign({}, address), {
51
83
  company: address.companyName ? address.companyName : "",
52
84
  email: address.email,
53
85
  fullName: address.name
54
86
  });
55
- onSubmit(billingInfo, creditCard);
56
- });
87
+ const processPayment = () => __awaiter(void 0, void 0, void 0, function* () {
88
+ try {
89
+ const paymentResult = yield adyenSubmit();
90
+ if (!paymentResult.success) {
91
+ // Payment failed - show error and allow retry
92
+ setPaymentError(paymentResult.error || "Payment failed");
93
+ form.reset(undefined, {
94
+ keepValues: true
95
+ });
96
+ return;
97
+ }
98
+ if ((paymentResult === null || paymentResult === void 0 ? void 0 : paymentResult.resultCode) === "Authorised") {
99
+ // Payment was successful, proceed with form submission
100
+ const sessionData = getSessionData();
101
+ onSubmit(billingInfo, {
102
+ sessionId: sessionData === null || sessionData === void 0 ? void 0 : sessionData.id
103
+ });
104
+ }
105
+ } catch (error) {
106
+ // Payment processing error
107
+ const errorMessage = error instanceof Error ? error.message : "Payment processing failed";
108
+ setPaymentError(errorMessage);
109
+ }
110
+ });
111
+ yield processPayment();
112
+ }));
57
113
  return jsx("form", {
58
114
  onSubmit: formLogger.capture(handleSubmit),
59
115
  children: jsxs(Grid, {
60
116
  css: styles.container,
61
- children: [jsx(GridChild, {
117
+ children: [paymentError && jsxs(Fragment, {
118
+ children: [jsx(GridChild, {
119
+ colSpan: 12,
120
+ children: jsx(InlineNotification, {
121
+ title: t("register-wallet:sections.notifications.error.title"),
122
+ type: NotificationType.ERROR,
123
+ children: paymentError
124
+ })
125
+ }), jsx(Spacer, {
126
+ multiplier: 2
127
+ })]
128
+ }), jsx(GridChild, {
62
129
  colSpan: 12,
63
130
  css: styles.subtitle,
64
131
  children: jsx(Typography, {
65
132
  variant: "subtitle1",
66
133
  children: t("register-wallet:settings.billing.subtitleCard")
67
134
  })
68
- }), jsx(GridChild, {
135
+ }), jsxs(GridChild, {
69
136
  colSpan: 12,
70
- children: jsx(BillingFields, {
71
- form: form
72
- })
73
- }), jsx(GridChild, {
137
+ children: [!isAdyenReady && jsx("div", {
138
+ css: styles.loadingContainer,
139
+ children: jsx(Spinner, {
140
+ size: SpinnerSize.SIZE_LARGE
141
+ })
142
+ }), jsx("div", {
143
+ css: styles.adyenContainer,
144
+ "data-ready": isAdyenReady,
145
+ "data-testid": "adyen-div",
146
+ ref: adyenRef
147
+ })]
148
+ }), jsx(Spacer, {}), jsx(GridChild, {
74
149
  colSpan: 12,
75
150
  css: styles.subtitle,
76
151
  children: jsx(Typography, {
@@ -14,6 +14,21 @@ const styles = createStyles({
14
14
  subtitle: theme => ({
15
15
  paddingBottom: scopeTheme(theme).spacing(2),
16
16
  textAlign: "left"
17
+ }),
18
+ loadingContainer: theme => ({
19
+ display: "flex",
20
+ justifyContent: "center",
21
+ paddingTop: scopeTheme(theme).spacing(2),
22
+ paddingBottom: scopeTheme(theme).spacing(2)
23
+ }),
24
+ adyenContainer: () => ({
25
+ "&:not([data-ready='true'])": {
26
+ display: "none"
27
+ },
28
+ // Hide Adyen's "All fields are required" instruction text
29
+ "& .adyen-checkout-form-instruction": {
30
+ display: "none"
31
+ }
17
32
  })
18
33
  });
19
34
 
@@ -1,3 +1,2 @@
1
1
  export { WalletForm } from './wallet-form.js';
2
2
  export { getBillingAddressSchema, getWalletSchema, walletBlackboxSchemas, walletEmailSchemas } from './wallet-schema.js';
3
- export { BillingFields } from './billing-fields.js';