@primer-io/react-native 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +83 -0
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +244 -0
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +275 -0
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +14 -3
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -0
- package/android/src/main/java/com/primerioreactnative/huc/assets/AssetsManager.kt +56 -0
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +31 -0
- package/ios/Core/ReactNative-Bridging-Header.h +14 -0
- package/ios/DataModels/ImplementedRNCallbacks.swift +34 -9
- package/ios/DataModels/PrimerSettingsRN.swift +15 -16
- package/ios/Headless Universal Checkout/RNTPrimerCardNumberInputElementManager.m +23 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +62 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +493 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +14 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +117 -0
- package/ios/RNTPrimer.m +2 -0
- package/ios/RNTPrimer.swift +56 -51
- package/ios/ReactNative-Bridging-Header.h +1 -0
- package/lib/commonjs/Primer.js +6 -0
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/PrimerInput.js +80 -0
- package/lib/commonjs/PrimerInput.js.map +1 -0
- package/lib/commonjs/RNPrimer.js +11 -0
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +14 -0
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +286 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js +197 -0
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/{models/Primer.js → headless_checkout/types.js} +1 -1
- package/lib/commonjs/{models/Primer.js.map → headless_checkout/types.js.map} +0 -0
- package/lib/commonjs/index.js +13 -5
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/PrimerInterfaces.js +6 -0
- package/lib/{module/models/Primer.js.map → commonjs/models/PrimerInterfaces.js.map} +0 -0
- package/lib/module/Primer.js +7 -2
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/PrimerInput.js +46 -0
- package/lib/module/PrimerInput.js.map +1 -0
- package/lib/module/RNPrimer.js +11 -0
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +5 -0
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +273 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js +188 -0
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/headless_checkout/types.js +2 -0
- package/lib/module/headless_checkout/types.js.map +1 -0
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/PrimerInterfaces.js +2 -0
- package/lib/module/models/PrimerInterfaces.js.map +1 -0
- package/lib/typescript/MerchantExample/App.d.ts +11 -0
- package/lib/typescript/src/Primer.d.ts +2 -0
- package/lib/typescript/src/PrimerInput.d.ts +15 -0
- package/lib/typescript/{RNPrimer.d.ts → src/RNPrimer.d.ts} +1 -0
- package/lib/typescript/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +1 -0
- package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +11 -0
- package/lib/typescript/src/headless_checkout/RNPrimerHeadlessUniversalCheckout.d.ts +22 -0
- package/lib/typescript/src/headless_checkout/types.d.ts +22 -0
- package/lib/typescript/{index.d.ts → src/index.d.ts} +2 -1
- package/lib/typescript/{models → src/models}/PrimerCheckoutData.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerCheckoutPaymentMethodData.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerClientSession.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerCountryCode.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerCurrencyCode.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerError.d.ts +0 -0
- package/lib/typescript/{models/Primer.d.ts → src/models/PrimerInterfaces.d.ts} +2 -1
- package/lib/typescript/{models → src/models}/PrimerPaymentMethodTokenData.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerSessionIntent.d.ts +0 -0
- package/lib/typescript/{models → src/models}/PrimerSettings.d.ts +6 -2
- package/lib/typescript/{models → src/models}/PrimerTheme.d.ts +0 -0
- package/lib/typescript/{utils → src/utils}/index.d.ts +0 -0
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/Primer.ts +6 -1
- package/src/PrimerInput.tsx +73 -0
- package/src/RNPrimer.ts +13 -0
- package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +2 -0
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +327 -0
- package/src/headless_checkout/RNPrimerHeadlessUniversalCheckout.ts +252 -0
- package/src/headless_checkout/types.ts +32 -0
- package/src/index.tsx +4 -2
- package/src/models/{Primer.ts → PrimerInterfaces.ts} +2 -1
- package/src/models/PrimerSettings.ts +17 -2
- package/lib/module/models/Primer.js +0 -2
- package/lib/typescript/Primer.d.ts +0 -2
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
package com.primerioreactnative.huc.assets
|
|
2
|
+
|
|
3
|
+
import android.graphics.Bitmap
|
|
4
|
+
import android.graphics.Canvas
|
|
5
|
+
import android.graphics.drawable.BitmapDrawable
|
|
6
|
+
import android.graphics.drawable.Drawable
|
|
7
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
8
|
+
import java.io.File
|
|
9
|
+
import java.io.FileOutputStream
|
|
10
|
+
import java.util.*
|
|
11
|
+
|
|
12
|
+
internal object AssetsManager {
|
|
13
|
+
|
|
14
|
+
private const val ASSETS_DIRECTORY = "primer-sdk"
|
|
15
|
+
private const val COMPRESS_QUALITY = 100
|
|
16
|
+
|
|
17
|
+
fun drawableToBitmap(drawable: Drawable): Bitmap {
|
|
18
|
+
if (drawable is BitmapDrawable) {
|
|
19
|
+
return drawable.bitmap
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
val bitmap = Bitmap.createBitmap(
|
|
23
|
+
drawable.intrinsicWidth,
|
|
24
|
+
drawable.intrinsicHeight,
|
|
25
|
+
Bitmap.Config.ARGB_8888
|
|
26
|
+
)
|
|
27
|
+
val canvas = Canvas(bitmap)
|
|
28
|
+
drawable.setBounds(0, 0, canvas.width, canvas.height)
|
|
29
|
+
drawable.draw(canvas)
|
|
30
|
+
return bitmap
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
fun saveBitmapToFile(
|
|
34
|
+
file: File,
|
|
35
|
+
bitmap: Bitmap,
|
|
36
|
+
format: Bitmap.CompressFormat = Bitmap.CompressFormat.PNG,
|
|
37
|
+
) {
|
|
38
|
+
|
|
39
|
+
FileOutputStream(file).use {
|
|
40
|
+
bitmap.compress(format, COMPRESS_QUALITY, it)
|
|
41
|
+
it.close()
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
fun getFile(context: ReactApplicationContext, path: String): File {
|
|
46
|
+
val directory = File(context.filesDir, path)
|
|
47
|
+
if (!directory.exists()) directory.mkdirs()
|
|
48
|
+
val file = File(
|
|
49
|
+
context.filesDir,
|
|
50
|
+
ASSETS_DIRECTORY + File.pathSeparator + path.toLowerCase(Locale.ROOT)
|
|
51
|
+
)
|
|
52
|
+
if (!file.exists()) file.createNewFile()
|
|
53
|
+
return file
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.primerioreactnative.huc.events
|
|
2
|
+
|
|
3
|
+
internal enum class PrimerHeadlessUniversalCheckoutEvent(val eventName: String) {
|
|
4
|
+
ON_HUC_AVAILABLE_PAYMENT_METHODS_LOADED("onHUCAvailablePaymentMethodsLoaded"),
|
|
5
|
+
ON_HUC_PREPARE_START("onHUCPrepareStart"),
|
|
6
|
+
ON_HUC_PAYMENT_METHOD_SHOW("onHUCPaymentMethodShow"),
|
|
7
|
+
ON_HUC_TOKENIZE_START("onHUCTokenizeStart"),
|
|
8
|
+
ON_CHECKOUT_COMPLETE("onCheckoutComplete"),
|
|
9
|
+
ON_BEFORE_CLIENT_SESSION_UPDATE("onBeforeClientSessionUpdate"),
|
|
10
|
+
ON_CLIENT_SESSION_UPDATE("onClientSessionUpdate"),
|
|
11
|
+
ON_BEFORE_PAYMENT_CREATE("onBeforePaymentCreate"),
|
|
12
|
+
ON_TOKENIZE_SUCCESS("onTokenizeSuccess"),
|
|
13
|
+
ON_RESUME_SUCCESS("onResumeSuccess"),
|
|
14
|
+
ON_ERROR("onError"),
|
|
15
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
package com.primerioreactnative.utils
|
|
2
|
+
|
|
3
|
+
import kotlinx.serialization.SerialName
|
|
4
|
+
import kotlinx.serialization.Serializable
|
|
5
|
+
|
|
6
|
+
@Serializable
|
|
7
|
+
data class PrimerHeadlessUniversalCheckoutImplementedRNCallbacks(
|
|
8
|
+
@SerialName("onCheckoutComplete")
|
|
9
|
+
val isOnCheckoutCompleteImplemented: Boolean? = null,
|
|
10
|
+
@SerialName("onBeforeClientSessionUpdate")
|
|
11
|
+
val isOnBeforeClientSessionUpdateImplemented: Boolean? = null,
|
|
12
|
+
@SerialName("onClientSessionUpdate")
|
|
13
|
+
val isOnClientSessionUpdateImplemented: Boolean? = null,
|
|
14
|
+
@SerialName("onBeforePaymentCreate")
|
|
15
|
+
val isOnBeforePaymentCreateImplemented: Boolean? = null,
|
|
16
|
+
@SerialName("onError")
|
|
17
|
+
val isOnErrorImplemented: Boolean? = null,
|
|
18
|
+
@SerialName("onTokenizeSuccess")
|
|
19
|
+
val isOnTokenizeSuccessImplemented: Boolean? = null,
|
|
20
|
+
@SerialName("onResumeSuccess")
|
|
21
|
+
val isOnResumeSuccessImplemented: Boolean? = null,
|
|
22
|
+
@SerialName("onHUCTokenizeStart")
|
|
23
|
+
val isOnHUCTokenizeStartsImplemented: Boolean? = null,
|
|
24
|
+
@SerialName("onHUCPrepareStart")
|
|
25
|
+
val isOnHUCPrepareStartImplemented: Boolean? = null,
|
|
26
|
+
@SerialName("onHUCAvailablePaymentMethodsLoaded")
|
|
27
|
+
val isOnHUCAvailablePaymentMethodsLoadedImplemented: Boolean? = null,
|
|
28
|
+
@SerialName("onHUCPaymentMethodShow")
|
|
29
|
+
val isOnHUCPaymentMethodShowImplemented: Boolean? = null,
|
|
30
|
+
)
|
|
31
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
#import <React/RCTViewManager.h>
|
|
4
|
+
#import <React/RCTUIManager.h>
|
|
5
|
+
#import <React/RCTView.h>
|
|
6
|
+
|
|
7
|
+
// for view controller implementation https://stackoverflow.com/questions/45741903/react-native-ios-how-can-i-navigate-to-a-non-react-native-view-native-ios-vie/46007680#46007680
|
|
8
|
+
//#import "React/RCTBridge.h"
|
|
9
|
+
//#import "React/RCTEventDispatcher.h"
|
|
10
|
+
//#import "React/RCTRootView.h"
|
|
11
|
+
//#import "React/RCTUtils.h"
|
|
12
|
+
//#import "React/RCTConvert.h"
|
|
13
|
+
//#import "React/RCTBundleURLProvider.h"
|
|
14
|
+
//#import "RCTViewManager.h"
|
|
@@ -7,16 +7,20 @@
|
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
9
|
|
|
10
|
-
internal struct ImplementedRNCallbacks:
|
|
10
|
+
internal struct ImplementedRNCallbacks: Decodable {
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
internal var isOnCheckoutCompleteImplemented: Bool = false
|
|
13
|
+
internal var isOnBeforeClientSessionUpdateImplemented: Bool = false
|
|
14
|
+
internal var isOnClientSessionUpdateImplemented: Bool = false
|
|
15
|
+
internal var isOnBeforePaymentCreateImplemented: Bool = false
|
|
16
|
+
internal var isOnErrorImplemented: Bool = false
|
|
17
|
+
internal var isOnDismissImplemented: Bool = false
|
|
18
|
+
internal var isOnTokenizeSuccessImplemented: Bool = false
|
|
19
|
+
internal var isOnResumeSuccessImplemented: Bool = false
|
|
20
|
+
internal var isOnHUCTokenizeStartImplemented: Bool = false
|
|
21
|
+
internal var isOnHUCPrepareStartImplemented: Bool = false
|
|
22
|
+
internal var isOnHUCAvailablePaymentMethodsLoadedImplemented: Bool = false
|
|
23
|
+
internal var isOnHUCPaymentMethodShowImplemented: Bool = false
|
|
20
24
|
|
|
21
25
|
enum CodingKeys: String, CodingKey {
|
|
22
26
|
case isOnCheckoutCompleteImplemented = "onCheckoutComplete"
|
|
@@ -27,5 +31,26 @@ internal struct ImplementedRNCallbacks: Codable {
|
|
|
27
31
|
case isOnDismissImplemented = "onDismiss"
|
|
28
32
|
case isOnTokenizeSuccessImplemented = "onTokenizeSuccess"
|
|
29
33
|
case isOnResumeSuccessImplemented = "onResumeSuccess"
|
|
34
|
+
case isOnHUCTokenizeStartImplemented = "onHUCTokenizeStart"
|
|
35
|
+
case isOnHUCPrepareStartImplemented = "onHUCPrepareStart"
|
|
36
|
+
case isOnHUCAvailablePaymentMethodsLoadedImplemented = "onHUCAvailablePaymentMethodsLoaded"
|
|
37
|
+
case isOnHUCPaymentMethodShowImplemented = "onHUCPaymentMethodShow"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
init(from decoder: Decoder) throws {
|
|
41
|
+
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
42
|
+
|
|
43
|
+
self.isOnCheckoutCompleteImplemented = (try? container.decode(Bool?.self, forKey: .isOnCheckoutCompleteImplemented)) ?? false
|
|
44
|
+
self.isOnBeforeClientSessionUpdateImplemented = (try? container.decode(Bool?.self, forKey: .isOnBeforeClientSessionUpdateImplemented)) ?? false
|
|
45
|
+
self.isOnClientSessionUpdateImplemented = (try? container.decode(Bool?.self, forKey: .isOnClientSessionUpdateImplemented)) ?? false
|
|
46
|
+
self.isOnBeforePaymentCreateImplemented = (try? container.decode(Bool?.self, forKey: .isOnBeforePaymentCreateImplemented)) ?? false
|
|
47
|
+
self.isOnErrorImplemented = (try? container.decode(Bool?.self, forKey: .isOnErrorImplemented)) ?? false
|
|
48
|
+
self.isOnDismissImplemented = (try? container.decode(Bool?.self, forKey: .isOnDismissImplemented)) ?? false
|
|
49
|
+
self.isOnTokenizeSuccessImplemented = (try? container.decode(Bool?.self, forKey: .isOnTokenizeSuccessImplemented)) ?? false
|
|
50
|
+
self.isOnResumeSuccessImplemented = (try? container.decode(Bool?.self, forKey: .isOnResumeSuccessImplemented)) ?? false
|
|
51
|
+
self.isOnHUCTokenizeStartImplemented = (try? container.decode(Bool?.self, forKey: .isOnHUCTokenizeStartImplemented)) ?? false
|
|
52
|
+
self.isOnHUCPrepareStartImplemented = (try? container.decode(Bool?.self, forKey: .isOnHUCPrepareStartImplemented)) ?? false
|
|
53
|
+
self.isOnHUCAvailablePaymentMethodsLoadedImplemented = (try? container.decode(Bool?.self, forKey: .isOnHUCAvailablePaymentMethodsLoadedImplemented)) ?? false
|
|
54
|
+
self.isOnHUCPaymentMethodShowImplemented = (try? container.decode(Bool?.self, forKey: .isOnHUCPaymentMethodShowImplemented)) ?? false
|
|
30
55
|
}
|
|
31
56
|
}
|
|
@@ -8,80 +8,79 @@ extension PrimerSettings {
|
|
|
8
8
|
else {
|
|
9
9
|
return PrimerSettings()
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
guard let settingsJson = (try JSONSerialization.jsonObject(with: settingsData)) as? [String: Any]
|
|
13
13
|
else {
|
|
14
14
|
return PrimerSettings()
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
var paymentHandling: PrimerPaymentHandling = .auto
|
|
18
18
|
if let rnPaymentHandling = settingsJson["paymentHandling"] as? String,
|
|
19
19
|
rnPaymentHandling == "MANUAL" {
|
|
20
20
|
paymentHandling = .manual
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
let rnLocaleDataLanguageCode = (settingsJson["localeData"] as? [String: Any])?["languageCode"] as? String
|
|
24
24
|
let rnLocaleDataLocaleCode = (settingsJson["localeData"] as? [String: Any])?["localeCode"] as? String
|
|
25
25
|
let localeData = PrimerLocaleData(
|
|
26
26
|
languageCode: rnLocaleDataLanguageCode,
|
|
27
27
|
regionCode: rnLocaleDataLocaleCode)
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
let rnUrlScheme = ((settingsJson["paymentMethodOptions"] as? [String: Any])?["iOS"] as? [String: Any])?["urlScheme"] as? String
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
var applePayOptions: PrimerApplePayOptions?
|
|
32
32
|
if let rnApplePayOptions = ((settingsJson["paymentMethodOptions"] as? [String: Any])?["applePayOptions"] as? [String: Any]),
|
|
33
33
|
let rnApplePayMerchantIdentifier = rnApplePayOptions["merchantIdentifier"] as? String,
|
|
34
34
|
let rnApplePayMerchantName = rnApplePayOptions["merchantName"] as? String {
|
|
35
35
|
applePayOptions = PrimerApplePayOptions(merchantIdentifier: rnApplePayMerchantIdentifier, merchantName: rnApplePayMerchantName)
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
var klarnaOptions: PrimerKlarnaOptions?
|
|
39
39
|
if let rnKlarnaRecurringPaymentDescription = ((settingsJson["paymentMethodOptions"] as? [String: Any])?["klarnaOptions"] as? [String: Any])?["recurringPaymentDescription"] as? String {
|
|
40
40
|
klarnaOptions = PrimerKlarnaOptions(recurringPaymentDescription: rnKlarnaRecurringPaymentDescription)
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
var cardPaymentOptions: PrimerCardPaymentOptions?
|
|
44
44
|
if let rnIs3DSOnVaultingEnabled = ((settingsJson["paymentMethodOptions"] as? [String: Any])?["cardPaymentOptions"] as? [String: Any])?["is3DSOnVaultingEnabled"] as? Bool {
|
|
45
45
|
cardPaymentOptions = PrimerCardPaymentOptions(is3DSOnVaultingEnabled: rnIs3DSOnVaultingEnabled)
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
var uiOptions: PrimerUIOptions?
|
|
49
49
|
if let rnUIOptions = settingsJson["uiOptions"] as? [String: Any] {
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
var theme: PrimerTheme?
|
|
52
52
|
if let rnTheme = rnUIOptions["theme"] as? [String: Any] {
|
|
53
53
|
let rnThemeData = (try JSONSerialization.data(withJSONObject: rnTheme))
|
|
54
54
|
let rnTheme = try JSONDecoder().decode(PrimerThemeRN.self, from: rnThemeData)
|
|
55
55
|
theme = rnTheme.asPrimerTheme()
|
|
56
56
|
}
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
uiOptions = PrimerUIOptions(
|
|
59
59
|
isInitScreenEnabled: rnUIOptions["isInitScreenEnabled"] as? Bool,
|
|
60
60
|
isSuccessScreenEnabled: rnUIOptions["isSuccessScreenEnabled"] as? Bool,
|
|
61
61
|
isErrorScreenEnabled: rnUIOptions["isErrorScreenEnabled"] as? Bool,
|
|
62
62
|
theme: theme)
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
var debugOptions: PrimerDebugOptions?
|
|
66
66
|
if let rnIs3DSSanityCheckEnabled = (settingsJson["debugOptions"] as? [String: Any])?["is3DSSanityCheckEnabled"] as? Bool {
|
|
67
67
|
debugOptions = PrimerDebugOptions(is3DSSanityCheckEnabled: rnIs3DSSanityCheckEnabled)
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
|
|
71
70
|
let paymentMethodOptions = PrimerPaymentMethodOptions(
|
|
72
71
|
urlScheme: rnUrlScheme,
|
|
73
72
|
applePayOptions: applePayOptions,
|
|
74
73
|
klarnaOptions: klarnaOptions,
|
|
75
74
|
cardPaymentOptions: cardPaymentOptions)
|
|
76
|
-
|
|
75
|
+
|
|
77
76
|
let settings = PrimerSettings(
|
|
78
77
|
paymentHandling: paymentHandling,
|
|
79
78
|
localeData: localeData,
|
|
80
79
|
paymentMethodOptions: paymentMethodOptions,
|
|
81
80
|
uiOptions: uiOptions,
|
|
82
81
|
debugOptions: debugOptions)
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
|
|
83
|
+
|
|
85
84
|
return settings
|
|
86
85
|
}
|
|
87
86
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTPrimerCardNumberInputElementManager.m
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 3/3/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <React/RCTViewManager.h>
|
|
9
|
+
@import PrimerSDK;
|
|
10
|
+
|
|
11
|
+
@interface RNTPrimerCardNumberInputElementManager : RCTViewManager
|
|
12
|
+
@end
|
|
13
|
+
|
|
14
|
+
@implementation RNTPrimerCardNumberInputElementManager
|
|
15
|
+
|
|
16
|
+
RCT_EXPORT_MODULE(PrimerCardNumberEditText)
|
|
17
|
+
|
|
18
|
+
- (UIView *)view
|
|
19
|
+
{
|
|
20
|
+
return [[PrimerCardNumberInputElement alloc] init];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTPrimerHeadlessUniversalCheckout.m
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 8/3/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <React/RCTBridgeModule.h>
|
|
9
|
+
#import <React/RCTEventEmitter.h>
|
|
10
|
+
|
|
11
|
+
@interface RCT_EXTERN_MODULE(PrimerHeadlessUniversalCheckout, RCTEventEmitter)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(startWithClientToken:(NSString *)clientToken settingsStr:(NSString *)settingsStr errorCallback:(RCTResponseSenderBlock)errorCallback successCallback: (RCTResponseSenderBlock)successCallback)
|
|
14
|
+
|
|
15
|
+
RCT_EXTERN_METHOD(resumeWithClientToken:(NSString *)resumeToken)
|
|
16
|
+
|
|
17
|
+
RCT_EXTERN_METHOD(showPaymentMethod:(NSString *)paymentMethodTypeStr
|
|
18
|
+
resolver:(RCTPromiseResolveBlock)resolver
|
|
19
|
+
rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
20
|
+
|
|
21
|
+
RCT_EXTERN_METHOD(getAssetForPaymentMethodType:(NSString *)paymentMethodTypeStr
|
|
22
|
+
assetType:(NSString *)assetTypeStr
|
|
23
|
+
errorCallback:(RCTResponseSenderBlock)errorCallback
|
|
24
|
+
successCallback: (RCTResponseSenderBlock)successCallback)
|
|
25
|
+
|
|
26
|
+
RCT_EXTERN_METHOD(getAssetForCardNetwork:(NSString *)cardNetworkStr
|
|
27
|
+
assetType:(NSString *)assetTypeStr
|
|
28
|
+
errorCallback:(RCTResponseSenderBlock)errorCallback
|
|
29
|
+
successCallback: (RCTResponseSenderBlock)successCallback)
|
|
30
|
+
|
|
31
|
+
RCT_EXTERN_METHOD(disposePrimerHeadlessUniversalCheckout)
|
|
32
|
+
|
|
33
|
+
// MARK: - HELPERS
|
|
34
|
+
|
|
35
|
+
RCT_EXTERN_METHOD(setImplementedRNCallbacks:(NSString *)implementedRNCallbacksStr resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
36
|
+
|
|
37
|
+
// MARK: - DECISION HANDLERS
|
|
38
|
+
|
|
39
|
+
// MARK: Tokenization Handlers
|
|
40
|
+
|
|
41
|
+
RCT_EXTERN_METHOD(handleTokenizationNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
42
|
+
|
|
43
|
+
RCT_EXTERN_METHOD(handleTokenizationSuccess:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
44
|
+
|
|
45
|
+
RCT_EXTERN_METHOD(handleTokenizationFailure:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
46
|
+
|
|
47
|
+
// MARK: Resume Handlers
|
|
48
|
+
|
|
49
|
+
RCT_EXTERN_METHOD(handleResumeWithNewClientToken:(NSString *)newClientToken resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
50
|
+
|
|
51
|
+
RCT_EXTERN_METHOD(handleResumeSuccess:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
52
|
+
|
|
53
|
+
RCT_EXTERN_METHOD(handleResumeFailure:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
54
|
+
|
|
55
|
+
// MARK: Payment Creation Handlers
|
|
56
|
+
|
|
57
|
+
RCT_EXTERN_METHOD(handlePaymentCreationAbort:(NSString *)errorMessage resolver:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
58
|
+
|
|
59
|
+
RCT_EXTERN_METHOD(handlePaymentCreationContinue:(RCTPromiseResolveBlock)resolver rejecter:(RCTPromiseRejectBlock)rejecter)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@end
|