From 49d806b04c9edeb6e9cc9a7b3389fdb1a9face5e Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:11:31 -0500 Subject: [PATCH 1/8] connectingReader reset on error --- example/src/screens/DiscoverReadersScreen.tsx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/example/src/screens/DiscoverReadersScreen.tsx b/example/src/screens/DiscoverReadersScreen.tsx index d19fa3b3..6a8c2a58 100644 --- a/example/src/screens/DiscoverReadersScreen.tsx +++ b/example/src/screens/DiscoverReadersScreen.tsx @@ -15,6 +15,7 @@ import { Reader, } from 'stripe-terminal-react-native'; import type { NavigationAction } from '@react-navigation/routers'; +import type { StripeError } from 'stripe-terminal-react-native'; import { colors } from '../colors'; import { useNavigation, useRoute } from '@react-navigation/core'; import { Picker } from '@react-native-picker/picker'; @@ -132,23 +133,22 @@ export default function DiscoverReadersScreen() { }, []); const handleConnectReader = async (reader: Reader.Type) => { + let error: StripeError; if (discoveryMethod === 'internet') { - const { error } = await handleConnectInternetReader(reader); - if (error) { - Alert.alert(error.code, error.message); - } else if (selectedUpdatePlan !== 'required') { - navigation.goBack(); - } + const result = await handleConnectInternetReader(reader); + error = result.error; } else if ( discoveryMethod === 'bluetoothScan' || discoveryMethod === 'bluetoothProximity' ) { - const { error } = await handleConnectBluetoothReader(reader); - if (error) { - Alert.alert(error.code, error.message); - } else if (selectedUpdatePlan !== 'required') { - navigation.goBack(); - } + const result = await handleConnectBluetoothReader(reader); + error = result.error; + } + if (error) { + setConnectingReader(null); + Alert.alert(error.code, error.message); + } else if (selectedUpdatePlan !== 'required') { + navigation.goBack(); } }; From b4d1ab20e088370247e3e81b666682e9e76cacd3 Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:12:51 -0500 Subject: [PATCH 2/8] locationId required for connectBluetoothReader --- .../StripeTerminalReactNativeModule.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt index f7b19719..d34cbc61 100644 --- a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt +++ b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt @@ -261,7 +261,15 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : return } - val locationId = getStringOr(params, "locationId") ?: selectedReader.location?.id.orEmpty() + val locationId = getStringOr(params, "locationId") ?: selectedReader.location?.id ?: run { + promise.resolve( + createError( + CommonErrorType.Failed.toString(), + "You must provide a locationId" + ) + ) + return + } val connectionConfig = ConnectionConfiguration.BluetoothConnectionConfiguration( locationId From 5e3da026d557abd9d4173ad2234b403f38ac6358 Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:13:11 -0500 Subject: [PATCH 3/8] code style --- .../StripeTerminalReactNativeModule.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt index d34cbc61..09eacf6c 100644 --- a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt +++ b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt @@ -558,7 +558,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : @Suppress("unused") fun createSetupIntent(params: ReadableMap, promise: Promise) { val intentParams = getStringOr(params, "customer")?.let { customerId -> - SetupIntentParameters.Builder().setCustomer(customerId).build() + SetupIntentParameters.Builder().setCustomer(customerId).build() } ?: SetupIntentParameters.NULL Terminal.getInstance().createSetupIntent(intentParams, object : SetupIntentCallback { @@ -857,9 +857,9 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : @ReactMethod @Suppress("unused") fun readReusableCard(params: ReadableMap, promise: Promise) { - val reusableCardParams = getStringOr(params, "customer") ?.let { customerId -> - ReadReusableCardParameters.Builder().setCustomer(customerId).build() - } ?: ReadReusableCardParameters.NULL + val reusableCardParams = getStringOr(params, "customer")?.let { customerId -> + ReadReusableCardParameters.Builder().setCustomer(customerId).build() + } ?: ReadReusableCardParameters.NULL readReusableCardCancelable = Terminal.getInstance() .readReusableCard(reusableCardParams, object : PaymentMethodCallback { From 0a3f6aad6b61d41595320a3f7634396dda0c85f0 Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:39:13 -0500 Subject: [PATCH 4/8] onUnexpectedReaderDisconnect sends didFinishDiscoveringReaders event --- .../StripeTerminalReactNativeModule.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt index 09eacf6c..51ede477 100644 --- a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt +++ b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt @@ -62,7 +62,10 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : CommonErrorType.Failed.toString(), "Reader has been disconnected unexpectedly" ) - sendEvent("didUpdateDiscoveredReaders", error) + val result = WritableNativeMap().apply { + putMap("result", error) + } + sendEvent("didFinishDiscoveringReaders", result) } override fun onConnectionStatusChange(status: ConnectionStatus) { From 8f76d0ee4ba46d1bc1c4c988947c960d22f7f200 Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:39:47 -0500 Subject: [PATCH 5/8] DiscoverReaders failure triggers navigation.goBack --- example/src/screens/DiscoverReadersScreen.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/example/src/screens/DiscoverReadersScreen.tsx b/example/src/screens/DiscoverReadersScreen.tsx index 6a8c2a58..e48e907a 100644 --- a/example/src/screens/DiscoverReadersScreen.tsx +++ b/example/src/screens/DiscoverReadersScreen.tsx @@ -53,6 +53,7 @@ export default function DiscoverReadersScreen() { 'Discover readers error', `${finishError.code}, ${finishError.message}` ); + navigation.goBack(); } else { console.log('onFinishDiscoveringReaders success'); } From 1bbbcb71ae4aba8c91670a1a6f4ac72b4d256c3b Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:46:35 -0500 Subject: [PATCH 6/8] typecheck --- example/src/screens/DiscoverReadersScreen.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/src/screens/DiscoverReadersScreen.tsx b/example/src/screens/DiscoverReadersScreen.tsx index e48e907a..50efb042 100644 --- a/example/src/screens/DiscoverReadersScreen.tsx +++ b/example/src/screens/DiscoverReadersScreen.tsx @@ -134,7 +134,7 @@ export default function DiscoverReadersScreen() { }, []); const handleConnectReader = async (reader: Reader.Type) => { - let error: StripeError; + let error: StripeError | undefined; if (discoveryMethod === 'internet') { const result = await handleConnectInternetReader(reader); error = result.error; @@ -146,7 +146,7 @@ export default function DiscoverReadersScreen() { error = result.error; } if (error) { - setConnectingReader(null); + setConnectingReader(undefined); Alert.alert(error.code, error.message); } else if (selectedUpdatePlan !== 'required') { navigation.goBack(); From 5b459477f030e0cf5e470460e7b172f66221309a Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 12:55:06 -0500 Subject: [PATCH 7/8] replacing undefined with null --- example/src/screens/DiscoverReadersScreen.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/src/screens/DiscoverReadersScreen.tsx b/example/src/screens/DiscoverReadersScreen.tsx index 50efb042..1edadde3 100644 --- a/example/src/screens/DiscoverReadersScreen.tsx +++ b/example/src/screens/DiscoverReadersScreen.tsx @@ -134,7 +134,7 @@ export default function DiscoverReadersScreen() { }, []); const handleConnectReader = async (reader: Reader.Type) => { - let error: StripeError | undefined; + let error: StripeError | null = null; if (discoveryMethod === 'internet') { const result = await handleConnectInternetReader(reader); error = result.error; From 8fb8834deac6c8e39196000ff9b9ee558b9840aa Mon Sep 17 00:00:00 2001 From: David Henry Date: Thu, 3 Mar 2022 13:14:05 -0500 Subject: [PATCH 8/8] back to undefined --- example/src/screens/DiscoverReadersScreen.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/src/screens/DiscoverReadersScreen.tsx b/example/src/screens/DiscoverReadersScreen.tsx index 1edadde3..50efb042 100644 --- a/example/src/screens/DiscoverReadersScreen.tsx +++ b/example/src/screens/DiscoverReadersScreen.tsx @@ -134,7 +134,7 @@ export default function DiscoverReadersScreen() { }, []); const handleConnectReader = async (reader: Reader.Type) => { - let error: StripeError | null = null; + let error: StripeError | undefined; if (discoveryMethod === 'internet') { const result = await handleConnectInternetReader(reader); error = result.error;