From 5879bc3b8d27ac83a220f15a79cc5f6cf1a009f1 Mon Sep 17 00:00:00 2001 From: guilhermer Date: Thu, 21 Dec 2023 13:26:02 -0300 Subject: [PATCH] always resolving --- .../internal/UIElement/UIElement.tsx | 5 +- packages/lib/src/core/core.ts | 7 +- packages/lib/src/core/types.ts | 28 ++++---- packages/lib/src/types/global-types.ts | 9 +-- packages/playground/src/handlers.js | 55 ++++++++-------- .../playground/src/pages/Dropin/manual.js | 65 ++++++++----------- 6 files changed, 82 insertions(+), 87 deletions(-) diff --git a/packages/lib/src/components/internal/UIElement/UIElement.tsx b/packages/lib/src/components/internal/UIElement/UIElement.tsx index 5efcc788bf..96b63cd0c9 100644 --- a/packages/lib/src/components/internal/UIElement/UIElement.tsx +++ b/packages/lib/src/components/internal/UIElement/UIElement.tsx @@ -9,7 +9,6 @@ import { Resources } from '../../../core/Context/Resources'; import { NewableComponent } from '../../../core/core.registry'; import { ComponentMethodsRef, IUIElement, PayButtonFunctionProps, UIElementProps, UIElementStatus } from './types'; import { - OnPaymentFailedData, Order, PaymentAction, PaymentData, @@ -311,11 +310,13 @@ export abstract class UIElement

* * @param result */ - protected handleFailedResult = (result: OnPaymentFailedData): void => { + protected handleFailedResult = (result: PaymentResponseData): void => { if (this.props.setStatusAutomatically) { this.setElementStatus('error'); } + cleanupFinalResult(result); + this.props.onPaymentFailed?.(result, this.elementRef); }; diff --git a/packages/lib/src/core/core.ts b/packages/lib/src/core/core.ts index c8d0de5a3b..ca4cbf1e6b 100644 --- a/packages/lib/src/core/core.ts +++ b/packages/lib/src/core/core.ts @@ -5,7 +5,7 @@ import PaymentMethods from './ProcessResponse/PaymentMethods'; import getComponentForAction from './ProcessResponse/PaymentAction'; import { resolveEnvironment, resolveCDNEnvironment } from './Environment'; import Analytics from './Analytics'; -import { OnPaymentFailedData, PaymentAction, PaymentResponseData } from '../types/global-types'; +import { PaymentAction, PaymentResponseData } from '../types/global-types'; import { CoreConfiguration, ICore } from './types'; import { processGlobalOptions } from './utils'; import Session from './CheckoutSession'; @@ -147,8 +147,9 @@ class Core implements ICore { cleanupFinalResult(response); this.options.onPaymentCompleted?.(response); }) - .catch((result: OnPaymentFailedData) => { - this.options.onPaymentFailed?.(result); + .catch((response: PaymentResponseData) => { + cleanupFinalResult(response); + this.options.onPaymentFailed?.(response); }); } diff --git a/packages/lib/src/core/types.ts b/packages/lib/src/core/types.ts index 945c4daa64..190e6cdbd6 100644 --- a/packages/lib/src/core/types.ts +++ b/packages/lib/src/core/types.ts @@ -5,11 +5,11 @@ import { PaymentAction, PaymentMethodsResponse, ActionHandledReturnObject, - OnPaymentCompletedData, PaymentData, PaymentResponseAdvancedFlow, - OnPaymentFailedData, - PaymentMethodsRequestData + PaymentMethodsRequestData, + SessionsResponse, + ResultCode } from '../types/global-types'; import { AnalyticsOptions } from './Analytics/types'; import { RiskModuleOptions } from './RiskModule/RiskModule'; @@ -51,12 +51,12 @@ export interface ICore { export type AdyenEnvironment = 'test' | 'live' | 'live-us' | 'live-au' | 'live-apse' | 'live-in' | string; -export type onSubmitReject = { - error?: { - googlePayError?: Partial; - applePayError?: ApplePayJS.ApplePayError[] | ApplePayJS.ApplePayError; - }; -}; +// export type onSubmitReject = { +// error?: { +// googlePayError?: Partial; +// applePayError?: ApplePayJS.ApplePayError[] | ApplePayJS.ApplePayError; +// }; +// }; export interface CoreConfiguration { session?: any; @@ -182,7 +182,7 @@ export interface CoreConfiguration { * @param data * @param element */ - onPaymentCompleted?(data: OnPaymentCompletedData, element?: UIElement): void; + onPaymentCompleted?(data: SessionsResponse | { resultCode: ResultCode }, element?: UIElement): void; /** * Called when the payment fails. @@ -193,14 +193,15 @@ export interface CoreConfiguration { * @param data * @param element */ - onPaymentFailed?(data?: OnPaymentFailedData, element?: UIElement): void; + onPaymentFailed?(data?: SessionsResponse | { resultCode: ResultCode }, element?: UIElement): void; onSubmit?( state: any, element: UIElement, actions: { resolve: (response: PaymentResponseAdvancedFlow) => void; - reject: (error?: onSubmitReject) => void; + reject: () => void; + // reject: (error?: onSubmitReject) => void; } ): void; @@ -216,7 +217,8 @@ export interface CoreConfiguration { element: UIElement, actions: { resolve: (response: PaymentResponseAdvancedFlow) => void; - reject: (error?: onSubmitReject) => void; + reject: () => void; + // reject: (error?: onSubmitReject) => void; } ): void; diff --git a/packages/lib/src/types/global-types.ts b/packages/lib/src/types/global-types.ts index e78fc5699f..2619a51dfa 100644 --- a/packages/lib/src/types/global-types.ts +++ b/packages/lib/src/types/global-types.ts @@ -1,6 +1,6 @@ import { ADDRESS_SCHEMA } from '../components/internal/Address/constants'; import actionTypes from '../core/ProcessResponse/PaymentAction/actionTypes'; -import { onSubmitReject } from '../core/types'; +// import { onSubmitReject } from '../core/types'; export type PaymentActionsType = keyof typeof actionTypes; @@ -335,9 +335,6 @@ export type SessionsResponse = { sessionResult: string; resultCode: ResultCode; }; -export type OnPaymentCompletedData = SessionsResponse | { resultCode: ResultCode }; - -export type OnPaymentFailedData = SessionsResponse | onSubmitReject; //TODO double check these values export interface PaymentMethodsRequestData { @@ -351,6 +348,10 @@ export interface PaymentResponseAdvancedFlow { action?: PaymentAction; order?: Order; donationToken?: string; + error?: { + googlePayError?: Partial; + applePayError?: ApplePayJS.ApplePayError[] | ApplePayJS.ApplePayError; + }; } export interface PaymentResponseData { diff --git a/packages/playground/src/handlers.js b/packages/playground/src/handlers.js index ccaae50d34..487fee13dc 100644 --- a/packages/playground/src/handlers.js +++ b/packages/playground/src/handlers.js @@ -32,42 +32,43 @@ export function handleError(obj) { export async function handleSubmit(state, component, actions) { component.setStatus('loading'); + console.log('onSubmit', state, actions); + try { - const result = await makePayment(state.data); + const { action, order, resultCode, donationToken } = await makePayment(state.data); - if (!result.resultCode) actions.reject(); + if (!resultCode) actions.reject(); - if (result.resultCode.includes('Refused', 'Cancelled', 'Error')) { - actions.reject({ - resultCode: result.resultCode, - error: { - googlePayError: {}, - applePayError: {} - } - }); - } else { - actions.resolve({ - action: result.action, - order: result.order, - resultCode: result.resultCode, - donationToken: result.donationToken - }); - } + actions.resolve({ + resultCode, + action, + order, + donationToken + }); } catch (error) { console.error('## onSubmit - critical error', error); actions.reject(); } } -export function handleAdditionalDetails(details, component) { - // component.setStatus('processing'); +export async function handleAdditionalDetails(state, component, actions) { + try { + console.log('onAdditionalDetails', state, component, actions); + + const { resultCode, action, order, resultCode, donationToken } = await makeDetailsCall(state.data); - return makeDetailsCall(details.data) - .then(response => { - component.setStatus('ready'); - handleResponse(response, component); - }) - .catch(error => { - throw Error(error); + if (!resultCode) actions.reject(); + + actions.resolve({ + resultCode, + action, + order, + donationToken + // error: {}, }); + return; + } catch (error) { + console.error('## onAdditionalDetails - critical error', error); + actions.reject(); + } } diff --git a/packages/playground/src/pages/Dropin/manual.js b/packages/playground/src/pages/Dropin/manual.js index c21c2c4304..aaa4e81c0f 100644 --- a/packages/playground/src/pages/Dropin/manual.js +++ b/packages/playground/src/pages/Dropin/manual.js @@ -42,26 +42,21 @@ export async function initManual() { console.log('onSubmit', state, component.authorizedEvent); try { - const result = await makePayment(state.data); - - if (!result.resultCode) actions.reject(); - - if (result.resultCode.includes('Refused', 'Cancelled', 'Error')) { - actions.reject({ - resultCode: result.resultCode - // error: { - // googlePayError: {}, - // applePayError: {} - // } - }); - } else { - actions.resolve({ - action: result.action, - order: result.order, - resultCode: result.resultCode, - donationToken: result.donationToken - }); - } + const { action, order, resultCode, donationToken } = await makePayment(state.data); + + if (!resultCode) actions.reject(); + + actions.resolve({ + resultCode, + action, + order, + donationToken + // error: { + // googlePayError: {}, + // applePayError: {} + // } + // } + }); } catch (error) { console.error('## onSubmit - critical error', error); actions.reject(); @@ -81,26 +76,20 @@ export async function initManual() { onAdditionalDetails: async (state, component, actions) => { try { - const result = await makeDetailsCall(state.data); + console.log('onAdditionalDetails', state, component, actions); - if (!result.resultCode) actions.reject(); + const { resultCode, action, order, resultCode, donationToken } = await makeDetailsCall(state.data); - if (result.resultCode.includes('Refused', 'Cancelled', 'Error')) { - actions.reject({ - resultCode: result.resultCode - // error: { - // googlePayError: {}, - // applePayError: {} - // } - }); - } else { - actions.resolve({ - action: result.action, - order: result.order, - resultCode: result.resultCode, - donationToken: result.donationToken - }); - } + if (!resultCode) actions.reject(); + + actions.resolve({ + resultCode, + action, + order, + donationToken + // error: {}, + }); + return; } catch (error) { console.error('## onAdditionalDetails - critical error', error); actions.reject();