Skip to content

Commit cb8a063

Browse files
authored
Merge pull request #845 from Adyen/example-session-bug-fix
Example session bug fixes
2 parents 1a4ffc8 + dcb00c4 commit cb8a063

File tree

8 files changed

+65
-30
lines changed

8 files changed

+65
-30
lines changed

example/ios/Podfile.lock

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
PODS:
2-
- Adyen (5.20.1):
3-
- Adyen/Actions (= 5.20.1)
4-
- Adyen/Card (= 5.20.1)
5-
- Adyen/Components (= 5.20.1)
6-
- Adyen/Core (= 5.20.1)
7-
- Adyen/DropIn (= 5.20.1)
8-
- Adyen/Encryption (= 5.20.1)
9-
- Adyen/Session (= 5.20.1)
2+
- Adyen (5.22.1):
3+
- Adyen/Actions (= 5.22.1)
4+
- Adyen/Card (= 5.22.1)
5+
- Adyen/Components (= 5.22.1)
6+
- Adyen/Core (= 5.22.1)
7+
- Adyen/DropIn (= 5.22.1)
8+
- Adyen/Encryption (= 5.22.1)
9+
- Adyen/Session (= 5.22.1)
1010
- adyen-react-native (2.0.0-local.1):
11-
- Adyen (= 5.20.1)
11+
- Adyen (= 5.22.1)
1212
- DoubleConversion
1313
- glog
1414
- hermes-engine
@@ -29,28 +29,28 @@ PODS:
2929
- ReactCommon/turbomodule/bridging
3030
- ReactCommon/turbomodule/core
3131
- Yoga
32-
- Adyen/Actions (5.20.1):
32+
- Adyen/Actions (5.22.1):
3333
- Adyen/Core
34-
- Adyen3DS2 (= 2.4.3)
35-
- Adyen/Card (5.20.1):
34+
- Adyen3DS2 (= 2.4.4)
35+
- Adyen/Card (5.22.1):
3636
- Adyen/Core
3737
- Adyen/Encryption
38-
- Adyen/Components (5.20.1):
38+
- Adyen/Components (5.22.1):
3939
- Adyen/Core
4040
- Adyen/Encryption
41-
- Adyen/Core (5.20.1):
41+
- Adyen/Core (5.22.1):
4242
- AdyenNetworking (= 3.0.1)
43-
- Adyen/DropIn (5.20.1):
43+
- Adyen/DropIn (5.22.1):
4444
- Adyen/Actions
4545
- Adyen/Card
4646
- Adyen/Components
4747
- Adyen/Core
4848
- Adyen/Encryption
49-
- Adyen/Encryption (5.20.1)
50-
- Adyen/Session (5.20.1):
49+
- Adyen/Encryption (5.22.1)
50+
- Adyen/Session (5.22.1):
5151
- Adyen/Actions
5252
- Adyen/Core
53-
- Adyen3DS2 (2.4.3)
53+
- Adyen3DS2 (2.4.4)
5454
- AdyenNetworking (3.0.1)
5555
- boost (1.84.0)
5656
- DoubleConversion (1.1.6)
@@ -1938,9 +1938,9 @@ EXTERNAL SOURCES:
19381938
:path: "../node_modules/react-native/ReactCommon/yoga"
19391939

19401940
SPEC CHECKSUMS:
1941-
Adyen: 2be434e4fb7bfd98d5f5e2b0b0ab633c49281c10
1942-
adyen-react-native: 0a2795bf61b4389096d0161a8749f032270104ee
1943-
Adyen3DS2: 1973825d24193688a6c85246d8be333d9cb8bc72
1941+
Adyen: fdb961c61a9dadcefb1dfc262c248370204f25b8
1942+
adyen-react-native: 994fe3488c5149144bb3a07905f0ca62dc9c3b63
1943+
Adyen3DS2: 45cc4a1f5ca2081e987bfa5bceaa986ba95c289b
19441944
AdyenNetworking: eb6196954566a5b3e0c3c56fa12d8d69948603dc
19451945
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
19461946
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb

example/src/components/Checkout/SessionsCheckout.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { useEffect, useCallback, useState } from 'react';
22
import { Text, ActivityIndicator, View, Platform } from 'react-native';
3-
import { AdyenCheckout, AdyenDropIn } from '@adyen/react-native';
3+
import {
4+
AdyenCheckout,
5+
AdyenDropIn,
6+
ErrorCode,
7+
ResultCode,
8+
} from '@adyen/react-native';
49
import type {
510
AdyenError,
611
AdyenComponent,
@@ -51,6 +56,10 @@ const SessionsCheckout = ({ navigation }: PageProps) => {
5156

5257
const didFail = useCallback(
5358
async (error: AdyenError, nativeComponent: AdyenComponent) => {
59+
if (error.errorCode === ErrorCode.sessionError) {
60+
setError(error.message);
61+
return;
62+
}
5463
processAdyenError(error, nativeComponent);
5564
refreshSession();
5665
},
@@ -59,7 +68,7 @@ const SessionsCheckout = ({ navigation }: PageProps) => {
5968

6069
const didComplete = useCallback(
6170
async (result: SessionsResult, nativeComponent: AdyenComponent) => {
62-
if (result.resultCode === 'PresentToShopper') {
71+
if (result.resultCode === ResultCode.presentToShopper) {
6372
processResult(result, nativeComponent, navigation);
6473
return;
6574
}

example/src/components/Checkout/utils/processResult.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { AdyenComponent } from '@adyen/react-native';
22
import { isSuccess } from '../../utilities/isSuccess';
33
import type { PageProps } from '../../../State/RootStackParamList';
44
import type { PaymentResponse } from '../../../api/types';
5+
import { InteractionManager } from 'react-native';
56

67
export function processResult(
78
result: PaymentResponse,
@@ -10,6 +11,8 @@ export function processResult(
1011
) {
1112
const success = isSuccess(result.resultCode);
1213
nativeComponent.hide(success);
13-
navigation?.popToTop();
14-
navigation?.push('Result', { resultCode: result.resultCode });
14+
InteractionManager.runAfterInteractions(() => {
15+
navigation?.popToTop();
16+
navigation?.push('Result', { resultCode: result.resultCode });
17+
});
1518
}

example/tsconfig.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "@react-native/typescript-config/tsconfig.json",
3+
"compilerOptions": {
4+
"baseUrl": ".",
5+
"paths": {
6+
"@adyen/react-native": [".."]
7+
}
8+
},
9+
"include": ["src"]
10+
}

ios/Components/BaseModule.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ extension BaseModule {
189189
case paymentMethodNotFound(PaymentMethod.Type)
190190
case balanceCheck(message: String)
191191
case orderRequest(message: String)
192+
case sessionError
192193

193194
var errorCode: String {
194195
switch self {
@@ -212,6 +213,8 @@ extension BaseModule {
212213
return "balanceCheck"
213214
case .orderRequest:
214215
return "orderRequest"
216+
case .sessionError:
217+
return "sessionError"
215218
}
216219
}
217220

@@ -237,6 +240,8 @@ extension BaseModule {
237240
return "Balance check error: \(message)"
238241
case let .orderRequest(message):
239242
return "Order request error: \(message)"
243+
case .sessionError:
244+
return "Something went wrong while starting session"
240245
}
241246
}
242247
}

ios/Components/SessionHelperModule.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
//
66

77
import Adyen
8+
import AdyenNetworking
89
import React
910
import UIKit
1011

@@ -36,15 +37,16 @@ internal final class SessionHelperModule: BaseModule, AdyenSessionDelegate {
3637
resolver: @escaping RCTPromiseResolveBlock,
3738
rejecter: @escaping RCTPromiseRejectBlock) {
3839
let parser = RootConfigurationParser(configuration: configuration)
40+
let errorCode = NativeModuleError.sessionError.errorCode
3941
let context: AdyenContext
4042
do {
4143
context = try parser.fetchContext(session: BaseModule.session)
4244
} catch {
43-
return rejecter("session", nil, error)
45+
return rejecter(errorCode, nil, error)
4446
}
4547

4648
guard let id = sessionModelJSON["id"] as? String, let data = sessionModelJSON["sessionData"] as? String else {
47-
return rejecter("session", "Invalid session data", nil)
49+
return rejecter(errorCode, "Invalid session data", nil)
4850
}
4951

5052
let config = AdyenSession.Configuration(sessionIdentifier: id, initialSessionData: data, context: context)
@@ -56,7 +58,11 @@ internal final class SessionHelperModule: BaseModule, AdyenSessionDelegate {
5658
resolver(dto.jsonObject)
5759
BaseModule.session = session
5860
case let .failure(error):
59-
rejecter("session", nil, error)
61+
if error is HTTPResponse<EmptyErrorResponse> {
62+
rejecter(errorCode, NativeModuleError.sessionError.errorDescription, nil)
63+
} else {
64+
rejecter(errorCode, nil, error)
65+
}
6066
}
6167
}
6268
}

src/components/AdyenCheckout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import type {
2424
StoredPaymentMethod,
2525
SubmitModel,
2626
} from '../core';
27-
import { Event } from '../core';
27+
import { Event, ErrorCode } from '../core';
2828
import { AdyenCheckoutContext } from '../hooks/useAdyenCheckout';
2929
import { getWrapper } from '../modules/base/getWrapper';
3030
import { SessionHelper } from '../modules/session/SessionHelperModule';
@@ -122,7 +122,7 @@ export const AdyenCheckout: React.FC<AdyenCheckoutProps> = ({
122122
onError(
123123
{
124124
message: String(error),
125-
errorCode: 'sessionError',
125+
errorCode: ErrorCode.sessionError,
126126
},
127127
SessionHelper
128128
);

src/core/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export enum ErrorCode {
4444
notSupportedAction = 'notSupportedAction',
4545
/** Can not find selected payment method type in provided list. */
4646
noPaymentMethod = 'noPaymentMethod',
47+
/** Session failed to be created. */
48+
sessionError = 'sessionError',
4749
}
4850

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

0 commit comments

Comments
 (0)