From 3fa9163ffd943d3ebc19ed9765208ab4fca812db Mon Sep 17 00:00:00 2001 From: dhenry-stripe <83039776+dhenry-stripe@users.noreply.github.com> Date: Wed, 16 Mar 2022 11:42:00 -0400 Subject: [PATCH] Replaced event name string matching with ReactNative exported constants (#164) * Exporting event name constants from Android and iOS, consuming in JS * Updated exported event names * Unique log name keys * overriding hasConstants * react native constants used by iOS SDK * merge fix --- README.md | 4 +- .../ReactNativeConstants.kt | 16 ++++ .../StripeTerminalReactNativeModule.kt | 92 +++++++++++++++---- example/src/screens/LogScreen.tsx | 8 +- ios/StripeTerminalReactNative.swift | 73 +++++++-------- ios/TokenProvider.swift | 6 +- src/components/StripeTerminalProvider.tsx | 6 +- src/hooks/useStripeTerminal.tsx | 87 +++++++----------- src/index.tsx | 18 ++-- 9 files changed, 180 insertions(+), 130 deletions(-) create mode 100644 android/src/main/java/com/stripeterminalreactnative/ReactNativeConstants.kt diff --git a/README.md b/README.md index 7df191e9..6a8ba6d9 100644 --- a/README.md +++ b/README.md @@ -240,13 +240,13 @@ Example: import { withStripeTerminal, WithStripeTerminalProps, - CHANGE_CONNECTION_STATUS_LISTENER_NAME, + CHANGE_CONNECTION_STATUS, Reader, componentDidMount() { this.discoverReaders(); const eventSubscription = props.emitter.addListener( - CHANGE_CONNECTION_STATUS_LISTENER_NAME, // didChangeConnectionStatus + CHANGE_CONNECTION_STATUS, // didChangeConnectionStatus (status: Reader.ConnectionStatus) => { // access to the current connection status } diff --git a/android/src/main/java/com/stripeterminalreactnative/ReactNativeConstants.kt b/android/src/main/java/com/stripeterminalreactnative/ReactNativeConstants.kt new file mode 100644 index 00000000..4edc8f3f --- /dev/null +++ b/android/src/main/java/com/stripeterminalreactnative/ReactNativeConstants.kt @@ -0,0 +1,16 @@ +package com.stripeterminalreactnative + +enum class ReactNativeConstants(val listenerName: String) { + CHANGE_CONNECTION_STATUS("didChangeConnectionStatus"), + CHANGE_PAYMENT_STATUS("didChangePaymentStatus"), + FETCH_TOKEN_PROVIDER("onFetchTokenProviderListener"), + FINISH_DISCOVERING_READERS("didFinishDiscoveringReaders"), + FINISH_INSTALLING_UPDATE("didFinishInstallingUpdate"), + REQUEST_READER_DISPLAY_MESSAGE("didRequestReaderDisplayMessage"), + REQUEST_READER_INPUT("didRequestReaderInput"), + REPORT_AVAILABLE_UPDATE("didReportAvailableUpdate"), + REPORT_UNEXPECTED_READER_DISCONNECT("didReportUnexpectedReaderDisconnect"), + REPORT_UPDATE_PROGRESS("didReportReaderSoftwareUpdateProgress"), + START_INSTALLING_UPDATE("didStartInstallingUpdate"), + UPDATE_DISCOVERED_READERS("didUpdateDiscoveredReaders"), +} diff --git a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt index df949282..bd62a68d 100644 --- a/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt +++ b/android/src/main/java/com/stripeterminalreactnative/StripeTerminalReactNativeModule.kt @@ -3,14 +3,63 @@ package com.stripeterminalreactnative import android.app.Application import android.content.ComponentCallbacks2 import android.content.res.Configuration -import com.facebook.react.bridge.* +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.UiThreadUtil +import com.facebook.react.bridge.WritableNativeArray +import com.facebook.react.bridge.WritableNativeMap import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter import com.stripe.stripeterminal.Terminal import com.stripe.stripeterminal.TerminalApplicationDelegate.onCreate import com.stripe.stripeterminal.TerminalApplicationDelegate.onTrimMemory -import com.stripe.stripeterminal.external.callable.* +import com.stripe.stripeterminal.external.callable.BluetoothReaderListener import com.stripe.stripeterminal.external.callable.Callback -import com.stripe.stripeterminal.external.models.* +import com.stripe.stripeterminal.external.callable.Cancelable +import com.stripe.stripeterminal.external.callable.DiscoveryListener +import com.stripe.stripeterminal.external.callable.LocationListCallback +import com.stripe.stripeterminal.external.callable.PaymentIntentCallback +import com.stripe.stripeterminal.external.callable.PaymentMethodCallback +import com.stripe.stripeterminal.external.callable.ReaderCallback +import com.stripe.stripeterminal.external.callable.RefundCallback +import com.stripe.stripeterminal.external.callable.SetupIntentCallback +import com.stripe.stripeterminal.external.callable.TerminalListener +import com.stripe.stripeterminal.external.models.Cart +import com.stripe.stripeterminal.external.models.ConnectionConfiguration +import com.stripe.stripeterminal.external.models.ConnectionStatus +import com.stripe.stripeterminal.external.models.DiscoveryConfiguration +import com.stripe.stripeterminal.external.models.ListLocationsParameters +import com.stripe.stripeterminal.external.models.Location +import com.stripe.stripeterminal.external.models.PaymentIntent +import com.stripe.stripeterminal.external.models.PaymentIntentParameters +import com.stripe.stripeterminal.external.models.PaymentMethod +import com.stripe.stripeterminal.external.models.PaymentStatus +import com.stripe.stripeterminal.external.models.ReadReusableCardParameters +import com.stripe.stripeterminal.external.models.Reader +import com.stripe.stripeterminal.external.models.ReaderDisplayMessage +import com.stripe.stripeterminal.external.models.ReaderInputOptions +import com.stripe.stripeterminal.external.models.ReaderSoftwareUpdate +import com.stripe.stripeterminal.external.models.Refund +import com.stripe.stripeterminal.external.models.RefundParameters +import com.stripe.stripeterminal.external.models.SetupIntent +import com.stripe.stripeterminal.external.models.SetupIntentCancellationParameters +import com.stripe.stripeterminal.external.models.SetupIntentParameters +import com.stripe.stripeterminal.external.models.SimulatorConfiguration +import com.stripe.stripeterminal.external.models.TerminalException +import com.stripeterminalreactnative.ReactNativeConstants.CHANGE_CONNECTION_STATUS +import com.stripeterminalreactnative.ReactNativeConstants.CHANGE_PAYMENT_STATUS +import com.stripeterminalreactnative.ReactNativeConstants.FETCH_TOKEN_PROVIDER +import com.stripeterminalreactnative.ReactNativeConstants.FINISH_DISCOVERING_READERS +import com.stripeterminalreactnative.ReactNativeConstants.FINISH_INSTALLING_UPDATE +import com.stripeterminalreactnative.ReactNativeConstants.REPORT_AVAILABLE_UPDATE +import com.stripeterminalreactnative.ReactNativeConstants.REPORT_UNEXPECTED_READER_DISCONNECT +import com.stripeterminalreactnative.ReactNativeConstants.REPORT_UPDATE_PROGRESS +import com.stripeterminalreactnative.ReactNativeConstants.REQUEST_READER_DISPLAY_MESSAGE +import com.stripeterminalreactnative.ReactNativeConstants.REQUEST_READER_INPUT +import com.stripeterminalreactnative.ReactNativeConstants.START_INSTALLING_UPDATE +import com.stripeterminalreactnative.ReactNativeConstants.UPDATE_DISCOVERED_READERS class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : @@ -25,16 +74,12 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : private var paymentIntents: HashMap = HashMap() private var setupIntents: HashMap = HashMap() - override fun getName(): String { - return "StripeTerminalReactNative" - } - init { TokenProvider.tokenProviderCallback = object : TokenProviderCallback { override fun invoke() { reactApplicationContext .getJSModule(RCTDeviceEventEmitter::class.java) - .emit("onFetchTokenProviderListener", null) + .emit(FETCH_TOKEN_PROVIDER.listenerName, null) } } @@ -49,6 +94,13 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : }) } + override fun getConstants(): MutableMap = + ReactNativeConstants.values().associate { it.name to it.listenerName }.toMutableMap() + + override fun getName(): String = "StripeTerminalReactNative" + + override fun hasConstants(): Boolean = true + @ReactMethod @Suppress("unused") fun initialize(params: ReadableMap, promise: Promise) { @@ -64,7 +116,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : "Reader has been disconnected unexpectedly" ) ) - sendEvent("didReportUnexpectedReaderDisconnect", error) + sendEvent(REPORT_UNEXPECTED_READER_DISCONNECT.listenerName, error) } override fun onConnectionStatusChange(status: ConnectionStatus) { @@ -73,7 +125,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap() result.putString("result", mapFromConnectionStatus(status)) - sendEvent("didChangeConnectionStatus", result) + sendEvent(CHANGE_CONNECTION_STATUS.listenerName, result) } override fun onPaymentStatusChange(status: PaymentStatus) { @@ -82,7 +134,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap() result.putString("result", mapFromPaymentStatus(status)) - sendEvent("didChangePaymentStatus", result) + sendEvent(CHANGE_PAYMENT_STATUS.listenerName, result) } } val result = WritableNativeMap() @@ -214,7 +266,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap() result.putArray("readers", readersArray) - sendEvent("didUpdateDiscoveredReaders", result) + sendEvent(UPDATE_DISCOVERED_READERS.listenerName, result) } }, object : Callback { @@ -222,14 +274,14 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap().apply { putMap("result", WritableNativeMap()) } - sendEvent("didFinishDiscoveringReaders", result) + sendEvent(FINISH_DISCOVERING_READERS.listenerName, result) } override fun onFailure(e: TerminalException) { val result = WritableNativeMap().apply { putMap("result", createError(e)) } - sendEvent("didFinishDiscoveringReaders", result) + sendEvent(FINISH_DISCOVERING_READERS.listenerName, result) } } ) @@ -311,7 +363,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : super.onReportAvailableUpdate(update) val result = WritableNativeMap() result.putMap("result", mapFromReaderSoftwareUpdate(update)) - sendEvent("didReportAvailableUpdate", result) + sendEvent(REPORT_AVAILABLE_UPDATE.listenerName, result) } override fun onStartInstallingUpdate( @@ -324,7 +376,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap() result.putMap("result", mapFromReaderSoftwareUpdate(update)) - sendEvent("didStartInstallingUpdate", result) + sendEvent(START_INSTALLING_UPDATE.listenerName, result) } override fun onReportReaderSoftwareUpdateProgress(progress: Float) { @@ -333,7 +385,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val map = WritableNativeMap() map.putString("progress", progress.toString()) result.putMap("result", map) - sendEvent("didReportReaderSoftwareUpdateProgress", result) + sendEvent(REPORT_UPDATE_PROGRESS.listenerName, result) } override fun onFinishInstallingUpdate( @@ -347,7 +399,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : } ?: run { result.putMap("result", WritableNativeMap()) } - sendEvent("didFinishInstallingUpdate", result) + sendEvent(FINISH_INSTALLING_UPDATE.listenerName, result) } override fun onRequestReaderInput(options: ReaderInputOptions) { @@ -355,7 +407,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap() result.putArray("result", mapFromReaderInputOptions(options)) - sendEvent("didRequestReaderInput", result) + sendEvent(REQUEST_READER_INPUT.listenerName, result) } override fun onRequestReaderDisplayMessage(message: ReaderDisplayMessage) { @@ -363,7 +415,7 @@ class StripeTerminalReactNativeModule(reactContext: ReactApplicationContext) : val result = WritableNativeMap() result.putString("result", mapFromReaderDisplayMessage(message)) - sendEvent("didRequestReaderDisplayMessage", result) + sendEvent(REQUEST_READER_DISPLAY_MESSAGE.listenerName, result) } } diff --git a/example/src/screens/LogScreen.tsx b/example/src/screens/LogScreen.tsx index dd73548c..dbf229ba 100644 --- a/example/src/screens/LogScreen.tsx +++ b/example/src/screens/LogScreen.tsx @@ -21,8 +21,12 @@ const LogScreen = () => { {event.description} {metadata && ( - {Object.keys(metadata).map((key) => ( - + {Object.keys(metadata).map((key, index) => ( + ))} )} diff --git a/ios/StripeTerminalReactNative.swift b/ios/StripeTerminalReactNative.swift index bd2f1c8b..38d5da35 100644 --- a/ios/StripeTerminalReactNative.swift +++ b/ios/StripeTerminalReactNative.swift @@ -1,17 +1,19 @@ import StripeTerminal -let UPDATE_DISCOVERED_READERS_LISTENER_NAME = "didUpdateDiscoveredReaders"; -let FINISH_DISCOVERING_READERS_LISTENER_NAME = "didFinishDiscoveringReaders"; -let REPORT_UNEXPECTED_READER_DISCONNECT_LISTENER_NAME = "didReportUnexpectedReaderDisconnect"; -let REPORT_AVAILABLE_UPDATE_LISTENER_NAME = "didReportAvailableUpdate" -let START_INSTALLING_UPDATE_LISTENER_NAME = "didStartInstallingUpdate" -let REPORT_UPDATE_PROGRESS_LISTENER_NAME = "didReportReaderSoftwareUpdateProgress" -let FINISH_INSTALLING_UPDATE_LISTENER_NAME = "didFinishInstallingUpdate" -let FETCH_TOKEN_PROVIDER_LISTENER_NAME = "onFetchTokenProviderListener" -let REQUEST_READER_INPUT_LISTENER_NAME = "didRequestReaderInput" -let REQUEST_READER_DISPLAY_MESSAGE = "didRequestReaderDisplayMessage" -let CHANGE_PAYMENT_STATUS_LISTENER_NAME = "didChangePaymentStatus" -let CHANGE_CONNECTION_STATUS_LISTENER_NAME = "didChangeConnectionStatus" +enum ReactNativeConstants: String, CaseIterable { + case UPDATE_DISCOVERED_READERS = "didUpdateDiscoveredReaders" + case FINISH_DISCOVERING_READERS = "didFinishDiscoveringReaders" + case REPORT_UNEXPECTED_READER_DISCONNECT = "didReportUnexpectedReaderDisconnect" + case REPORT_AVAILABLE_UPDATE = "didReportAvailableUpdate" + case START_INSTALLING_UPDATE = "didStartInstallingUpdate" + case REPORT_UPDATE_PROGRESS = "didReportReaderSoftwareUpdateProgress" + case FINISH_INSTALLING_UPDATE = "didFinishInstallingUpdate" + case FETCH_TOKEN_PROVIDER = "onFetchTokenProviderListener" + case REQUEST_READER_INPUT = "didRequestReaderInput" + case REQUEST_READER_DISPLAY_MESSAGE = "didRequestReaderDisplayMessage" + case CHANGE_PAYMENT_STATUS = "didChangePaymentStatus" + case CHANGE_CONNECTION_STATUS = "didChangeConnectionStatus" +} @objc(StripeTerminalReactNative) class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothReaderDelegate, TerminalDelegate { @@ -20,20 +22,15 @@ class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothRe var setupIntents: [AnyHashable : SetupIntent] = [:] override func supportedEvents() -> [String]! { - return [ - UPDATE_DISCOVERED_READERS_LISTENER_NAME, - FINISH_DISCOVERING_READERS_LISTENER_NAME, - REPORT_UNEXPECTED_READER_DISCONNECT_LISTENER_NAME, - REPORT_AVAILABLE_UPDATE_LISTENER_NAME, - START_INSTALLING_UPDATE_LISTENER_NAME, - REPORT_UPDATE_PROGRESS_LISTENER_NAME, - FINISH_INSTALLING_UPDATE_LISTENER_NAME, - FETCH_TOKEN_PROVIDER_LISTENER_NAME, - REQUEST_READER_INPUT_LISTENER_NAME, - REQUEST_READER_DISPLAY_MESSAGE, - CHANGE_PAYMENT_STATUS_LISTENER_NAME, - CHANGE_CONNECTION_STATUS_LISTENER_NAME - ] + return ReactNativeConstants.allCases.map { + $0.rawValue + } + } + + @objc override func constantsToExport() -> [AnyHashable : Any]! { + return ReactNativeConstants.allCases.reduce(into: [String: String]()) { + $0[String(describing: $1)] = $1.rawValue + } } @objc override static func requiresMainQueueSetup() -> Bool { @@ -50,7 +47,7 @@ class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothRe discoveredReadersList = readers guard terminal.connectionStatus == .notConnected else { return } - sendEvent(withName: UPDATE_DISCOVERED_READERS_LISTENER_NAME, body: ["readers": Mappers.mapFromReaders(readers)]) + sendEvent(withName: ReactNativeConstants.UPDATE_DISCOVERED_READERS.rawValue, body: ["readers": Mappers.mapFromReaders(readers)]) } @objc(initialize:resolver:rejecter:) @@ -154,10 +151,10 @@ class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothRe if let error = error { let _error = Errors.createError(code: CommonErrorType.Failed.rawValue, message: error.localizedDescription) - self.sendEvent(withName: FINISH_DISCOVERING_READERS_LISTENER_NAME, body: ["result": _error]) + self.sendEvent(withName: ReactNativeConstants.FINISH_DISCOVERING_READERS.rawValue, body: ["result": _error]) self.discoverCancelable = nil } else { - self.sendEvent(withName: FINISH_DISCOVERING_READERS_LISTENER_NAME, body: ["result": ["error": nil]]) + self.sendEvent(withName: ReactNativeConstants.FINISH_DISCOVERING_READERS.rawValue, body: ["result": ["error": nil]]) self.discoverCancelable = nil } } @@ -253,7 +250,7 @@ class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothRe func terminal(_ terminal: Terminal, didReportUnexpectedReaderDisconnect reader: Reader) { let error = Errors.createError(code: CommonErrorType.Failed.rawValue, message: "Reader has been disconnected unexpectedly") - sendEvent(withName: REPORT_UNEXPECTED_READER_DISCONNECT_LISTENER_NAME, body: error) + sendEvent(withName: ReactNativeConstants.REPORT_UNEXPECTED_READER_DISCONNECT.rawValue, body: error) } @objc(createPaymentIntent:resolver:rejecter:) @@ -373,12 +370,12 @@ class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothRe func terminal(_ terminal: Terminal, didChangePaymentStatus status: PaymentStatus) { let result = Mappers.mapFromPaymentStatus(status) - sendEvent(withName: CHANGE_PAYMENT_STATUS_LISTENER_NAME, body: ["result": result]) + sendEvent(withName: ReactNativeConstants.CHANGE_PAYMENT_STATUS.rawValue, body: ["result": result]) } func terminal(_ terminal: Terminal, didChangeConnectionStatus status: ConnectionStatus) { let result = Mappers.mapFromConnectionStatus(status) - sendEvent(withName: CHANGE_CONNECTION_STATUS_LISTENER_NAME, body: ["result": result]) + sendEvent(withName: ReactNativeConstants.CHANGE_CONNECTION_STATUS.rawValue, body: ["result": result]) } @objc(cancelPaymentIntent:resolver:rejecter:) @@ -617,33 +614,33 @@ class StripeTerminalReactNative: RCTEventEmitter, DiscoveryDelegate, BluetoothRe } func reader(_ reader: Reader, didReportAvailableUpdate update: ReaderSoftwareUpdate) { - sendEvent(withName: REPORT_AVAILABLE_UPDATE_LISTENER_NAME, body: ["result": Mappers.mapFromReaderSoftwareUpdate(update) ?? [:]]) + sendEvent(withName: ReactNativeConstants.REPORT_AVAILABLE_UPDATE.rawValue, body: ["result": Mappers.mapFromReaderSoftwareUpdate(update) ?? [:]]) } func reader(_ reader: Reader, didStartInstallingUpdate update: ReaderSoftwareUpdate, cancelable: Cancelable?) { self.installUpdateCancelable = cancelable - sendEvent(withName: START_INSTALLING_UPDATE_LISTENER_NAME, body: ["result": Mappers.mapFromReaderSoftwareUpdate(update) ?? [:]]) + sendEvent(withName: ReactNativeConstants.START_INSTALLING_UPDATE.rawValue, body: ["result": Mappers.mapFromReaderSoftwareUpdate(update) ?? [:]]) } func reader(_ reader: Reader, didReportReaderSoftwareUpdateProgress progress: Float) { let result: [AnyHashable : Any?] = [ "progress": String(progress), ] - sendEvent(withName: REPORT_UPDATE_PROGRESS_LISTENER_NAME, body: ["result": result]) + sendEvent(withName: ReactNativeConstants.REPORT_UPDATE_PROGRESS.rawValue, body: ["result": result]) } func reader(_ reader: Reader, didFinishInstallingUpdate update: ReaderSoftwareUpdate?, error: Error?) { let result = Mappers.mapFromReaderSoftwareUpdate(update) - sendEvent(withName: FINISH_INSTALLING_UPDATE_LISTENER_NAME, body: ["result": result ?? [:]]) + sendEvent(withName: ReactNativeConstants.FINISH_INSTALLING_UPDATE.rawValue, body: ["result": result ?? [:]]) } func reader(_ reader: Reader, didRequestReaderInput inputOptions: ReaderInputOptions = []) { let result = Mappers.mapFromReaderInputOptions(inputOptions) - sendEvent(withName: REQUEST_READER_INPUT_LISTENER_NAME, body: ["result": result]) + sendEvent(withName: ReactNativeConstants.REQUEST_READER_INPUT.rawValue, body: ["result": result]) } func reader(_ reader: Reader, didRequestReaderDisplayMessage displayMessage: ReaderDisplayMessage) { let result = Mappers.mapFromReaderDisplayMessage(displayMessage) - sendEvent(withName: REQUEST_READER_DISPLAY_MESSAGE, body: ["result": result]) + sendEvent(withName: ReactNativeConstants.REQUEST_READER_DISPLAY_MESSAGE.rawValue, body: ["result": result]) } } diff --git a/ios/TokenProvider.swift b/ios/TokenProvider.swift index 5c8b3363..5a33fbb2 100644 --- a/ios/TokenProvider.swift +++ b/ios/TokenProvider.swift @@ -7,9 +7,9 @@ enum TokenError: Error { class TokenProvider: ConnectionTokenProvider { static let shared = TokenProvider() var completionCallback: ConnectionTokenCompletionBlock? = nil - + static var delegate: RCTEventEmitter? = nil - + func setConnectionToken(token: String?, error: String?) { let unwrappedToken = token ?? "" if (!unwrappedToken.isEmpty) { @@ -21,6 +21,6 @@ class TokenProvider: ConnectionTokenProvider { func fetchConnectionToken(_ completion: @escaping ConnectionTokenCompletionBlock) { self.completionCallback = completion - TokenProvider.delegate?.sendEvent(withName: "onFetchTokenProviderListener", body: [:]) + TokenProvider.delegate?.sendEvent(withName: ReactNativeConstants.FETCH_TOKEN_PROVIDER.rawValue, body: [:]) } } diff --git a/src/components/StripeTerminalProvider.tsx b/src/components/StripeTerminalProvider.tsx index 2536a992..700a5c9e 100644 --- a/src/components/StripeTerminalProvider.tsx +++ b/src/components/StripeTerminalProvider.tsx @@ -3,8 +3,10 @@ import type { Reader, InitParams, LogLevel } from '../types'; import { StripeTerminalContext } from './StripeTerminalContext'; import { initialize, setConnectionToken } from '../functions'; import { useListener } from '../hooks/useListener'; +import { NativeModules } from 'react-native'; -const FETCH_TOKEN_PROVIDER_LISTENER_NAME = 'onFetchTokenProviderListener'; +const { FETCH_TOKEN_PROVIDER } = + NativeModules.StripeTerminalReactNative.getConstants(); /** * StripeTerminalProvider Component Props @@ -75,7 +77,7 @@ export function StripeTerminalProvider({ } }; - useListener(FETCH_TOKEN_PROVIDER_LISTENER_NAME, tokenProviderHandler); + useListener(FETCH_TOKEN_PROVIDER, tokenProviderHandler); const _initialize = useCallback( async (params: InitParams) => { diff --git a/src/hooks/useStripeTerminal.tsx b/src/hooks/useStripeTerminal.tsx index fa607a1f..023d01fd 100644 --- a/src/hooks/useStripeTerminal.tsx +++ b/src/hooks/useStripeTerminal.tsx @@ -48,27 +48,21 @@ import { import { StripeTerminalContext } from '../components/StripeTerminalContext'; import { useListener } from './useListener'; import EventEmitter from 'react-native/Libraries/vendor/emitter/EventEmitter'; - -// TODO: Get events names from react native constants -export const UPDATE_DISCOVERED_READERS_LISTENER_NAME = - 'didUpdateDiscoveredReaders'; -export const FINISH_DISCOVERING_READERS_LISTENER_NAME = - 'didFinishDiscoveringReaders'; -export const REPORT_UNEXPECTED_READER_DISCONNECT = - 'didReportUnexpectedReaderDisconnect'; - -export const REPORT_AVAILABLE_UPDATE_LISTENER_NAME = 'didReportAvailableUpdate'; -export const START_INSTALLING_UPDATE_LISTENER_NAME = 'didStartInstallingUpdate'; -export const REPORT_UPDATE_PROGRESS_LISTENER_NAME = - 'didReportReaderSoftwareUpdateProgress'; -export const FINISH_INSTALLING_UPDATE_LISTENER_NAME = - 'didFinishInstallingUpdate'; -export const REQUEST_READER_INPUT_LISTENER_NAME = 'didRequestReaderInput'; -export const REQUEST_READER_DISPLAY_MESSAGE = 'didRequestReaderDisplayMessage'; - -export const CHANGE_PAYMENT_STATUS_LISTENER_NAME = 'didChangePaymentStatus'; -export const CHANGE_CONNECTION_STATUS_LISTENER_NAME = - 'didChangeConnectionStatus'; +import { NativeModules } from 'react-native'; + +export const { + CHANGE_CONNECTION_STATUS, + CHANGE_PAYMENT_STATUS, + FINISH_DISCOVERING_READERS, + FINISH_INSTALLING_UPDATE, + REQUEST_READER_DISPLAY_MESSAGE, + REQUEST_READER_INPUT, + REPORT_AVAILABLE_UPDATE, + REPORT_UNEXPECTED_READER_DISCONNECT, + REPORT_UPDATE_PROGRESS, + START_INSTALLING_UPDATE, + UPDATE_DISCOVERED_READERS, +} = NativeModules.StripeTerminalReactNative.getConstants(); /** * useStripeTerminal hook Props @@ -148,7 +142,7 @@ export function useStripeTerminal(props?: Props) { setDiscoveredReaders(readers); onUpdateDiscoveredReaders?.(readers); - emitter.emit(UPDATE_DISCOVERED_READERS_LISTENER_NAME); + emitter.emit(UPDATE_DISCOVERED_READERS); }, [onUpdateDiscoveredReaders, setDiscoveredReaders, log] ); @@ -163,7 +157,7 @@ export function useStripeTerminal(props?: Props) { ); } onFinishDiscoveringReaders?.(result.error); - emitter.emit(FINISH_DISCOVERING_READERS_LISTENER_NAME); + emitter.emit(FINISH_DISCOVERING_READERS); }, [onFinishDiscoveringReaders, log] ); @@ -190,7 +184,7 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult) => { log('didReportAvailableUpdate', result); onDidReportAvailableUpdate?.(result); - emitter.emit(REPORT_AVAILABLE_UPDATE_LISTENER_NAME); + emitter.emit(REPORT_AVAILABLE_UPDATE); }, [onDidReportAvailableUpdate, log] ); @@ -199,7 +193,7 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult) => { log('didStartInstallingUpdate', result); onDidStartInstallingUpdate?.(result); - emitter.emit(START_INSTALLING_UPDATE_LISTENER_NAME); + emitter.emit(START_INSTALLING_UPDATE); }, [onDidStartInstallingUpdate, log] ); @@ -208,7 +202,7 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult<{ progress: string }>) => { log('didReportReaderSoftwareUpdateProgress', result); onDidReportReaderSoftwareUpdateProgress?.(result.progress); - emitter.emit(REPORT_UPDATE_PROGRESS_LISTENER_NAME); + emitter.emit(REPORT_UPDATE_PROGRESS); }, [onDidReportReaderSoftwareUpdateProgress, log] ); @@ -217,7 +211,7 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult) => { log('didFinishInstallingUpdate', result); onDidFinishInstallingUpdate?.(result); - emitter.emit(FINISH_INSTALLING_UPDATE_LISTENER_NAME); + emitter.emit(FINISH_INSTALLING_UPDATE); }, [onDidFinishInstallingUpdate, log] ); @@ -226,7 +220,7 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult) => { log('didRequestReaderInput', result); onDidRequestReaderInput?.(result); - emitter.emit(REQUEST_READER_INPUT_LISTENER_NAME); + emitter.emit(REQUEST_READER_INPUT); }, [onDidRequestReaderInput, log] ); @@ -244,7 +238,7 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult) => { log('didChangePaymentStatus', result); onDidChangePaymentStatus?.(result); - emitter.emit(CHANGE_PAYMENT_STATUS_LISTENER_NAME); + emitter.emit(CHANGE_PAYMENT_STATUS); }, [onDidChangePaymentStatus, log] ); @@ -253,41 +247,26 @@ export function useStripeTerminal(props?: Props) { ({ result }: EventResult) => { log('didChangeConnectionStatus', result); onDidChangeConnectionStatus?.(result); - emitter.emit(CHANGE_CONNECTION_STATUS_LISTENER_NAME); + emitter.emit(CHANGE_CONNECTION_STATUS); }, [onDidChangeConnectionStatus, log] ); - useListener(REPORT_AVAILABLE_UPDATE_LISTENER_NAME, didReportAvailableUpdate); - useListener(START_INSTALLING_UPDATE_LISTENER_NAME, didStartInstallingUpdate); - useListener( - REPORT_UPDATE_PROGRESS_LISTENER_NAME, - didReportReaderSoftwareUpdateProgress - ); - useListener( - FINISH_INSTALLING_UPDATE_LISTENER_NAME, - didFinishInstallingUpdate - ); + useListener(REPORT_AVAILABLE_UPDATE, didReportAvailableUpdate); + useListener(START_INSTALLING_UPDATE, didStartInstallingUpdate); + useListener(REPORT_UPDATE_PROGRESS, didReportReaderSoftwareUpdateProgress); + useListener(FINISH_INSTALLING_UPDATE, didFinishInstallingUpdate); - useListener( - UPDATE_DISCOVERED_READERS_LISTENER_NAME, - didUpdateDiscoveredReaders - ); - useListener( - FINISH_DISCOVERING_READERS_LISTENER_NAME, - didFinishDiscoveringReaders - ); + useListener(UPDATE_DISCOVERED_READERS, didUpdateDiscoveredReaders); + useListener(FINISH_DISCOVERING_READERS, didFinishDiscoveringReaders); useListener( REPORT_UNEXPECTED_READER_DISCONNECT, didReportUnexpectedReaderDisconnect ); - useListener(REQUEST_READER_INPUT_LISTENER_NAME, didRequestReaderInput); + useListener(REQUEST_READER_INPUT, didRequestReaderInput); useListener(REQUEST_READER_DISPLAY_MESSAGE, didRequestReaderDisplayMessage); - useListener(CHANGE_PAYMENT_STATUS_LISTENER_NAME, didChangePaymentStatus); - useListener( - CHANGE_CONNECTION_STATUS_LISTENER_NAME, - didChangeConnectionStatus - ); + useListener(CHANGE_PAYMENT_STATUS, didChangePaymentStatus); + useListener(CHANGE_CONNECTION_STATUS, didChangeConnectionStatus); const _discoverReaders = useCallback( async (params: DiscoverReadersParams) => { diff --git a/src/index.tsx b/src/index.tsx index bd3ec8d8..26aca6ec 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -5,17 +5,17 @@ export * from './functions'; export { useStripeTerminal, Props as UseStripeTerminalProps, - CHANGE_CONNECTION_STATUS_LISTENER_NAME, - CHANGE_PAYMENT_STATUS_LISTENER_NAME, - FINISH_DISCOVERING_READERS_LISTENER_NAME, - FINISH_INSTALLING_UPDATE_LISTENER_NAME, - REPORT_AVAILABLE_UPDATE_LISTENER_NAME, + CHANGE_CONNECTION_STATUS, + CHANGE_PAYMENT_STATUS, + FINISH_DISCOVERING_READERS, + FINISH_INSTALLING_UPDATE, + REPORT_AVAILABLE_UPDATE, REPORT_UNEXPECTED_READER_DISCONNECT, - REPORT_UPDATE_PROGRESS_LISTENER_NAME, + REPORT_UPDATE_PROGRESS, REQUEST_READER_DISPLAY_MESSAGE, - REQUEST_READER_INPUT_LISTENER_NAME, - START_INSTALLING_UPDATE_LISTENER_NAME, - UPDATE_DISCOVERED_READERS_LISTENER_NAME, + REQUEST_READER_INPUT, + START_INSTALLING_UPDATE, + UPDATE_DISCOVERED_READERS, } from './hooks/useStripeTerminal'; // components