@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.
- package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.cjs +87 -12
- package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.styles.cjs +15 -0
- package/dist/cjs/components/forms/wallet-form/index.cjs +0 -2
- package/dist/cjs/components/forms/wallet-form/wallet-form.cjs +153 -23
- package/dist/cjs/components/forms/wallet-form/wallet-form.styles.cjs +15 -0
- package/dist/cjs/components/forms/wallet-form/wallet-schema.cjs +8 -43
- package/dist/cjs/components/payment/payment-method-selector/index.cjs +7 -0
- package/dist/cjs/components/payment/payment-method-selector/payment-method-selector.cjs +55 -0
- package/dist/cjs/components/payment/payment-method-selector/payment-method-selector.styles.cjs +58 -0
- package/dist/cjs/contexts/auctane-pay-session-context.cjs +158 -0
- package/dist/cjs/contexts/index.cjs +8 -0
- package/dist/cjs/features/payment-method-settings/payment-method-settings.cjs +4 -3
- package/dist/cjs/hooks/financial-services/financial-service.cjs +464 -0
- package/dist/cjs/hooks/financial-services/index.cjs +9 -0
- package/dist/cjs/hooks/financial-services/use-financial-service.cjs +188 -0
- package/dist/cjs/locales/en/register-wallet.json.cjs +5 -0
- package/dist/cjs/package.json.cjs +1 -1
- package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.cjs +16 -5
- package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +6 -6
- package/dist/cjs/workflows/onboarding/components/funding-step/funding-step.cjs +7 -3
- package/dist/cjs/workflows/onboarding/onboarding.cjs +8 -5
- package/dist/esm/components/forms/edit-billing-form/edit-billing-form.js +88 -13
- package/dist/esm/components/forms/edit-billing-form/edit-billing-form.styles.js +15 -0
- package/dist/esm/components/forms/wallet-form/index.js +0 -1
- package/dist/esm/components/forms/wallet-form/wallet-form.js +155 -25
- package/dist/esm/components/forms/wallet-form/wallet-form.styles.js +15 -0
- package/dist/esm/components/forms/wallet-form/wallet-schema.js +1 -36
- package/dist/esm/components/payment/payment-method-selector/index.js +1 -0
- package/dist/esm/components/payment/payment-method-selector/payment-method-selector.js +53 -0
- package/dist/esm/components/payment/payment-method-selector/payment-method-selector.styles.js +56 -0
- package/dist/esm/contexts/auctane-pay-session-context.js +155 -0
- package/dist/esm/contexts/index.js +1 -0
- package/dist/esm/features/payment-method-settings/payment-method-settings.js +5 -4
- package/dist/esm/hooks/financial-services/financial-service.js +462 -0
- package/dist/esm/hooks/financial-services/index.js +2 -0
- package/dist/esm/hooks/financial-services/use-financial-service.js +186 -0
- package/dist/esm/locales/en/register-wallet.json.js +5 -0
- package/dist/esm/package.json.js +1 -1
- package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.js +16 -5
- package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +6 -6
- package/dist/esm/workflows/onboarding/components/funding-step/funding-step.js +7 -3
- package/dist/esm/workflows/onboarding/onboarding.js +8 -5
- package/dist/types/components/address-preference-context/address-preference-context.d.ts +0 -1
- package/dist/types/components/address-preference-context/address-preference-context.d.ts.map +1 -1
- package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts +2 -2
- package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts.map +1 -1
- package/dist/types/components/forms/edit-billing-form/edit-billing-form.styles.d.ts +14 -0
- package/dist/types/components/forms/edit-billing-form/edit-billing-form.styles.d.ts.map +1 -1
- package/dist/types/components/forms/wallet-form/index.d.ts +0 -1
- package/dist/types/components/forms/wallet-form/index.d.ts.map +1 -1
- package/dist/types/components/forms/wallet-form/wallet-form.d.ts +4 -1
- package/dist/types/components/forms/wallet-form/wallet-form.d.ts.map +1 -1
- package/dist/types/components/forms/wallet-form/wallet-form.styles.d.ts +14 -0
- package/dist/types/components/forms/wallet-form/wallet-form.styles.d.ts.map +1 -1
- package/dist/types/components/forms/wallet-form/wallet-schema.d.ts +3 -43
- package/dist/types/components/forms/wallet-form/wallet-schema.d.ts.map +1 -1
- package/dist/types/components/payment/payment-method-selector/index.d.ts +2 -0
- package/dist/types/components/payment/payment-method-selector/index.d.ts.map +1 -0
- package/dist/types/components/payment/payment-method-selector/payment-method-selector.d.ts +11 -0
- package/dist/types/components/payment/payment-method-selector/payment-method-selector.d.ts.map +1 -0
- package/dist/types/components/payment/payment-method-selector/payment-method-selector.styles.d.ts +52 -0
- package/dist/types/components/payment/payment-method-selector/payment-method-selector.styles.d.ts.map +1 -0
- package/dist/types/contexts/auctane-pay-session-context.d.ts +54 -0
- package/dist/types/contexts/auctane-pay-session-context.d.ts.map +1 -0
- package/dist/types/contexts/index.d.ts +3 -0
- package/dist/types/contexts/index.d.ts.map +1 -0
- package/dist/types/elements/customs-form/customs-form-element.d.ts +5 -0
- package/dist/types/elements/customs-form/customs-form-element.d.ts.map +1 -1
- package/dist/types/elements/labels-grid/labels-grid.d.ts +5 -0
- package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
- package/dist/types/elements/manage-carriers/manage-carriers.d.ts +5 -0
- package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
- package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +5 -0
- package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
- package/dist/types/elements/manage-funding/manage-funding-element.d.ts +5 -0
- package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
- package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +5 -0
- package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
- package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +5 -0
- package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
- package/dist/types/elements/purchase-label/purchase-label.d.ts +5 -0
- package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
- package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +5 -0
- package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
- package/dist/types/elements/shipment-summary/shipment-summary.d.ts +5 -0
- package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
- package/dist/types/elements/shipments-grid/shipments-grid.d.ts +5 -0
- package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
- package/dist/types/elements/theme-creator/theme-creator.d.ts +5 -0
- package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
- package/dist/types/elements/transaction-history/transaction-history-element.d.ts +5 -0
- package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
- package/dist/types/elements/unit-settings/unit-settings-element.d.ts +5 -0
- package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
- package/dist/types/elements/vat-settings/vat-settings-element.d.ts +5 -0
- package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
- package/dist/types/elements/void-label/void-label.d.ts +5 -0
- package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
- package/dist/types/elements-provider/elements-provider.d.ts.map +1 -1
- package/dist/types/features/payment-method-settings/payment-method-settings.d.ts.map +1 -1
- package/dist/types/hooks/financial-services/financial-service.d.ts +279 -0
- package/dist/types/hooks/financial-services/financial-service.d.ts.map +1 -0
- package/dist/types/hooks/financial-services/index.d.ts +5 -0
- package/dist/types/hooks/financial-services/index.d.ts.map +1 -0
- package/dist/types/hooks/financial-services/use-financial-service.d.ts +40 -0
- package/dist/types/hooks/financial-services/use-financial-service.d.ts.map +1 -0
- package/dist/types/locales/en/index.d.ts +5 -0
- package/dist/types/locales/en/index.d.ts.map +1 -1
- package/dist/types/types/financial-services.d.ts +34 -0
- package/dist/types/types/financial-services.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/workflows/account-settings/account-settings.d.ts +5 -0
- package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
- package/dist/types/workflows/carrier-services/carrier-services.d.ts +5 -0
- package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
- package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +5 -0
- package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
- package/dist/types/workflows/label-workflow/label-workflow.d.ts +5 -0
- package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
- package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.d.ts.map +1 -1
- package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
- package/dist/types/workflows/onboarding/components/funding-step/funding-step.d.ts.map +1 -1
- package/dist/types/workflows/onboarding/onboarding.d.ts +5 -0
- package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/cjs/components/forms/wallet-form/billing-fields.cjs +0 -71
- package/dist/esm/components/forms/wallet-form/billing-fields.js +0 -69
- package/dist/types/components/forms/wallet-form/billing-fields.d.ts +0 -7
- 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
|
},
|
|
@@ -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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
157
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
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(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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
|
-
|
|
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: [
|
|
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
|
-
}),
|
|
135
|
+
}), jsxs(GridChild, {
|
|
69
136
|
colSpan: 12,
|
|
70
|
-
children: jsx(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|