Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 21 additions & 21 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
PODS:
- Adyen (5.20.1):
- Adyen/Actions (= 5.20.1)
- Adyen/Card (= 5.20.1)
- Adyen/Components (= 5.20.1)
- Adyen/Core (= 5.20.1)
- Adyen/DropIn (= 5.20.1)
- Adyen/Encryption (= 5.20.1)
- Adyen/Session (= 5.20.1)
- Adyen (5.22.1):
- Adyen/Actions (= 5.22.1)
- Adyen/Card (= 5.22.1)
- Adyen/Components (= 5.22.1)
- Adyen/Core (= 5.22.1)
- Adyen/DropIn (= 5.22.1)
- Adyen/Encryption (= 5.22.1)
- Adyen/Session (= 5.22.1)
- adyen-react-native (2.0.0-local.1):
- Adyen (= 5.20.1)
- Adyen (= 5.22.1)
- DoubleConversion
- glog
- hermes-engine
Expand All @@ -29,28 +29,28 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- Adyen/Actions (5.20.1):
- Adyen/Actions (5.22.1):
- Adyen/Core
- Adyen3DS2 (= 2.4.3)
- Adyen/Card (5.20.1):
- Adyen3DS2 (= 2.4.4)
- Adyen/Card (5.22.1):
- Adyen/Core
- Adyen/Encryption
- Adyen/Components (5.20.1):
- Adyen/Components (5.22.1):
- Adyen/Core
- Adyen/Encryption
- Adyen/Core (5.20.1):
- Adyen/Core (5.22.1):
- AdyenNetworking (= 3.0.1)
- Adyen/DropIn (5.20.1):
- Adyen/DropIn (5.22.1):
- Adyen/Actions
- Adyen/Card
- Adyen/Components
- Adyen/Core
- Adyen/Encryption
- Adyen/Encryption (5.20.1)
- Adyen/Session (5.20.1):
- Adyen/Encryption (5.22.1)
- Adyen/Session (5.22.1):
- Adyen/Actions
- Adyen/Core
- Adyen3DS2 (2.4.3)
- Adyen3DS2 (2.4.4)
- AdyenNetworking (3.0.1)
- boost (1.84.0)
- DoubleConversion (1.1.6)
Expand Down Expand Up @@ -1938,9 +1938,9 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"

SPEC CHECKSUMS:
Adyen: 2be434e4fb7bfd98d5f5e2b0b0ab633c49281c10
adyen-react-native: 0a2795bf61b4389096d0161a8749f032270104ee
Adyen3DS2: 1973825d24193688a6c85246d8be333d9cb8bc72
Adyen: fdb961c61a9dadcefb1dfc262c248370204f25b8
adyen-react-native: 994fe3488c5149144bb3a07905f0ca62dc9c3b63
Adyen3DS2: 45cc4a1f5ca2081e987bfa5bceaa986ba95c289b
AdyenNetworking: eb6196954566a5b3e0c3c56fa12d8d69948603dc
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
Expand Down
13 changes: 11 additions & 2 deletions example/src/components/Checkout/SessionsCheckout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { useEffect, useCallback, useState } from 'react';
import { Text, ActivityIndicator, View, Platform } from 'react-native';
import { AdyenCheckout, AdyenDropIn } from '@adyen/react-native';
import {
AdyenCheckout,
AdyenDropIn,
ErrorCode,
ResultCode,
} from '@adyen/react-native';
import type {
AdyenError,
AdyenComponent,
Expand Down Expand Up @@ -51,6 +56,10 @@ const SessionsCheckout = ({ navigation }: PageProps) => {

const didFail = useCallback(
async (error: AdyenError, nativeComponent: AdyenComponent) => {
if (error.errorCode === ErrorCode.sessionError) {
setError(error.message);
return;
}
processAdyenError(error, nativeComponent);
refreshSession();
},
Expand All @@ -59,7 +68,7 @@ const SessionsCheckout = ({ navigation }: PageProps) => {

const didComplete = useCallback(
async (result: SessionsResult, nativeComponent: AdyenComponent) => {
if (result.resultCode === 'PresentToShopper') {
if (result.resultCode === ResultCode.presentToShopper) {
processResult(result, nativeComponent, navigation);
return;
}
Expand Down
7 changes: 5 additions & 2 deletions example/src/components/Checkout/utils/processResult.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { AdyenComponent } from '@adyen/react-native';
import { isSuccess } from '../../utilities/isSuccess';
import type { PageProps } from '../../../State/RootStackParamList';
import type { PaymentResponse } from '../../../api/types';
import { InteractionManager } from 'react-native';

export function processResult(
result: PaymentResponse,
Expand All @@ -10,6 +11,8 @@ export function processResult(
) {
const success = isSuccess(result.resultCode);
nativeComponent.hide(success);
navigation?.popToTop();
navigation?.push('Result', { resultCode: result.resultCode });
InteractionManager.runAfterInteractions(() => {
navigation?.popToTop();
navigation?.push('Result', { resultCode: result.resultCode });
});
}
10 changes: 10 additions & 0 deletions example/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "@react-native/typescript-config/tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@adyen/react-native": [".."]
}
},
"include": ["src"]
}
5 changes: 5 additions & 0 deletions ios/Components/BaseModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ extension BaseModule {
case paymentMethodNotFound(PaymentMethod.Type)
case balanceCheck(message: String)
case orderRequest(message: String)
case sessionError

var errorCode: String {
switch self {
Expand All @@ -212,6 +213,8 @@ extension BaseModule {
return "balanceCheck"
case .orderRequest:
return "orderRequest"
case .sessionError:
return "sessionError"
}
}

Expand All @@ -237,6 +240,8 @@ extension BaseModule {
return "Balance check error: \(message)"
case let .orderRequest(message):
return "Order request error: \(message)"
case .sessionError:
return "Something went wrong while starting session"
}
}
}
Expand Down
12 changes: 9 additions & 3 deletions ios/Components/SessionHelperModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
//

import Adyen
import AdyenNetworking
import React
import UIKit

Expand Down Expand Up @@ -36,15 +37,16 @@ internal final class SessionHelperModule: BaseModule, AdyenSessionDelegate {
resolver: @escaping RCTPromiseResolveBlock,
rejecter: @escaping RCTPromiseRejectBlock) {
let parser = RootConfigurationParser(configuration: configuration)
let errorCode = NativeModuleError.sessionError.errorCode
let context: AdyenContext
do {
context = try parser.fetchContext(session: BaseModule.session)
} catch {
return rejecter("session", nil, error)
return rejecter(errorCode, nil, error)
}

guard let id = sessionModelJSON["id"] as? String, let data = sessionModelJSON["sessionData"] as? String else {
return rejecter("session", "Invalid session data", nil)
return rejecter(errorCode, "Invalid session data", nil)
}

let config = AdyenSession.Configuration(sessionIdentifier: id, initialSessionData: data, context: context)
Expand All @@ -56,7 +58,11 @@ internal final class SessionHelperModule: BaseModule, AdyenSessionDelegate {
resolver(dto.jsonObject)
BaseModule.session = session
case let .failure(error):
rejecter("session", nil, error)
if error is HTTPResponse<EmptyErrorResponse> {
rejecter(errorCode, NativeModuleError.sessionError.errorDescription, nil)
} else {
rejecter(errorCode, nil, error)
}
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/components/AdyenCheckout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import type {
StoredPaymentMethod,
SubmitModel,
} from '../core';
import { Event } from '../core';
import { Event, ErrorCode } from '../core';
import { AdyenCheckoutContext } from '../hooks/useAdyenCheckout';
import { getWrapper } from '../modules/base/getWrapper';
import { SessionHelper } from '../modules/session/SessionHelperModule';
Expand Down Expand Up @@ -122,7 +122,7 @@ export const AdyenCheckout: React.FC<AdyenCheckoutProps> = ({
onError(
{
message: String(error),
errorCode: 'sessionError',
errorCode: ErrorCode.sessionError,
},
SessionHelper
);
Expand Down
2 changes: 2 additions & 0 deletions src/core/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ export enum ErrorCode {
notSupportedAction = 'notSupportedAction',
/** Can not find selected payment method type in provided list. */
noPaymentMethod = 'noPaymentMethod',
/** Session failed to be created. */
sessionError = 'sessionError',
}

/** Collection of available result codes that represent payments current state, as well as any actions you should take. */
Expand Down
Loading