@primer-io/react-native 0.16.2 → 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/README.md +114 -24
- package/android/build.gradle +10 -2
- package/android/gradle.properties +3 -3
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +124 -150
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +212 -128
- 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 +2 -2
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +54 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +6 -9
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +4 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +43 -125
- package/android/src/main/java/com/primerioreactnative/extensions/Payment.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +11 -7
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -3
- package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +45 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerHeadlessUniversalCheckoutImplementedRNCallbacks.kt +31 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +16 -6
- package/ios/Core/ReactNative-Bridging-Header.h +10 -0
- package/ios/DataModels/ImplementedRNCallbacks.swift +56 -0
- package/ios/DataModels/PrimerErrorRN.swift +0 -17
- package/ios/DataModels/PrimerSettingsRN.swift +78 -156
- package/ios/DataModels/PrimerThemeRN.swift +1 -10
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +33 -1
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +306 -54
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +5 -1
- package/ios/RNTPrimer.m +28 -12
- package/ios/RNTPrimer.swift +273 -222
- package/ios/ReactNative-Bridging-Header.h +4 -0
- package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
- package/lib/commonjs/Primer.js +206 -149
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +113 -41
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +240 -71
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js +197 -0
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/headless_checkout/types.js +4 -0
- package/lib/commonjs/index.js +118 -24
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/PrimerCheckoutData.js +9 -0
- package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -0
- package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +2 -0
- package/lib/commonjs/models/{action-request.js.map → PrimerCheckoutPaymentMethodData.js.map} +0 -0
- package/lib/commonjs/models/PrimerClientSession.js +2 -0
- package/lib/commonjs/models/{client-session-actions-request.js.map → PrimerClientSession.js.map} +0 -0
- package/lib/commonjs/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
- package/lib/commonjs/models/PrimerCountryCode.js.map +1 -0
- package/lib/commonjs/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
- package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -0
- package/lib/commonjs/models/PrimerError.js +28 -0
- package/lib/commonjs/models/PrimerError.js.map +1 -0
- package/lib/commonjs/models/{primer-settings.js → PrimerInterfaces.js} +1 -1
- package/lib/commonjs/models/{primer-callbacks.js.map → PrimerInterfaces.js.map} +0 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +14 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -0
- package/lib/commonjs/models/PrimerSessionIntent.js +14 -0
- package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -0
- package/lib/commonjs/models/{primer.js → PrimerSettings.js} +1 -1
- package/lib/commonjs/models/{primer-config.js.map → PrimerSettings.js.map} +0 -0
- package/lib/commonjs/models/PrimerTheme.js +2 -0
- package/lib/commonjs/models/{primer-request.js.map → PrimerTheme.js.map} +0 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/Primer.js +205 -136
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +113 -41
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +243 -70
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- 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 +1 -1
- package/lib/module/index.js +10 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/PrimerCheckoutData.js +7 -0
- package/lib/module/models/PrimerCheckoutData.js.map +1 -0
- package/lib/module/models/PrimerCheckoutPaymentMethodData.js +2 -0
- package/lib/{commonjs/models/primer-settings.js.map → module/models/PrimerCheckoutPaymentMethodData.js.map} +0 -0
- package/lib/module/models/PrimerClientSession.js +2 -0
- package/lib/{commonjs/models/primer-theme.js.map → module/models/PrimerClientSession.js.map} +0 -0
- package/lib/module/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
- package/lib/module/models/PrimerCountryCode.js.map +1 -0
- package/lib/module/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
- package/lib/module/models/PrimerCurrencyCode.js.map +1 -0
- package/lib/module/models/PrimerError.js +19 -0
- package/lib/module/models/PrimerError.js.map +1 -0
- package/lib/module/models/PrimerInterfaces.js +2 -0
- package/lib/{commonjs/models/primer.js.map → module/models/PrimerInterfaces.js.map} +0 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js +7 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -0
- package/lib/module/models/PrimerSessionIntent.js +7 -0
- package/lib/module/models/PrimerSessionIntent.js.map +1 -0
- package/lib/module/models/PrimerSettings.js +2 -0
- package/lib/module/models/{action-request.js.map → PrimerSettings.js.map} +0 -0
- package/lib/module/models/PrimerTheme.js +2 -0
- package/lib/module/models/{client-session-actions-request.js.map → PrimerTheme.js.map} +0 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/MerchantExample/App.d.ts +11 -0
- package/lib/typescript/src/Primer.d.ts +2 -0
- package/lib/typescript/{PrimerInput.d.ts → src/PrimerInput.d.ts} +0 -0
- package/lib/typescript/src/RNPrimer.d.ts +32 -0
- package/lib/typescript/{RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts → src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts} +0 -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/src/index.d.ts +10 -0
- package/lib/typescript/src/models/PrimerCheckoutData.d.ts +15 -0
- package/lib/typescript/src/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
- package/lib/typescript/src/models/PrimerClientSession.d.ts +45 -0
- package/lib/typescript/{models/utils/countryCode.d.ts → src/models/PrimerCountryCode.d.ts} +1 -1
- package/lib/typescript/{models/utils/currencyCode.d.ts → src/models/PrimerCurrencyCode.d.ts} +1 -1
- package/lib/typescript/src/models/PrimerError.d.ts +11 -0
- package/lib/typescript/src/models/PrimerInterfaces.d.ts +27 -0
- package/lib/typescript/src/models/PrimerPaymentMethodTokenData.d.ts +116 -0
- package/lib/typescript/src/models/PrimerSessionIntent.d.ts +4 -0
- package/lib/typescript/src/models/PrimerSettings.d.ts +77 -0
- package/lib/typescript/{models/primer-theme.d.ts → src/models/PrimerTheme.d.ts} +1 -1
- package/lib/typescript/{utils → src/utils}/index.d.ts +1 -1
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/Primer.ts +231 -170
- package/src/RNPrimer.ts +148 -51
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +281 -94
- package/src/headless_checkout/RNPrimerHeadlessUniversalCheckout.ts +252 -0
- package/src/headless_checkout/types.ts +26 -12
- package/src/index.tsx +36 -8
- package/src/models/PrimerCheckoutData.ts +18 -0
- package/src/models/PrimerCheckoutPaymentMethodData.ts +5 -0
- package/src/models/PrimerClientSession.ts +53 -0
- package/src/models/{utils/countryCode.ts → PrimerCountryCode.ts} +1 -1
- package/src/models/{utils/currencyCode.ts → PrimerCurrencyCode.ts} +1 -1
- package/src/models/PrimerError.ts +20 -0
- package/src/models/PrimerInterfaces.ts +36 -0
- package/src/models/PrimerPaymentMethodTokenData.ts +130 -0
- package/src/models/PrimerSessionIntent.ts +4 -0
- package/src/models/PrimerSettings.ts +108 -0
- package/src/models/{primer-theme.ts → PrimerTheme.ts} +1 -1
- package/src/utils/index.ts +1 -1
- package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +0 -198
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +0 -11
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIntentRN.kt +0 -80
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +0 -65
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +0 -9
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerThemeRN.kt +0 -51
- package/android/src/main/java/com/primerioreactnative/huc/extensions/Map.kt +0 -10
- package/android/src/main/java/com/primerioreactnative/utils/Keys.kt +0 -7
- package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -30
- package/ios/DataModels/PrimerIntentRN.swift +0 -10
- package/ios/DataModels/PrimerRequestRN.swift +0 -14
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -110
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/models/action-request.js +0 -2
- package/lib/commonjs/models/client-session-actions-request.js +0 -2
- package/lib/commonjs/models/payment-instrument-token.js +0 -30
- package/lib/commonjs/models/payment-instrument-token.js.map +0 -1
- package/lib/commonjs/models/primer-callbacks.js +0 -6
- package/lib/commonjs/models/primer-config.js +0 -6
- package/lib/commonjs/models/primer-error.js +0 -4
- package/lib/commonjs/models/primer-error.js.map +0 -1
- package/lib/commonjs/models/primer-intent.js +0 -4
- package/lib/commonjs/models/primer-intent.js.map +0 -1
- package/lib/commonjs/models/primer-request.js +0 -2
- package/lib/commonjs/models/primer-theme.js +0 -2
- package/lib/commonjs/models/utils/countryCode.js.map +0 -1
- package/lib/commonjs/models/utils/currencyCode.js.map +0 -1
- package/lib/commonjs/models/utils/redirectScheme.js +0 -4
- package/lib/commonjs/models/utils/redirectScheme.js.map +0 -1
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -98
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/models/action-request.js +0 -2
- package/lib/module/models/client-session-actions-request.js +0 -2
- package/lib/module/models/payment-instrument-token.js +0 -28
- package/lib/module/models/payment-instrument-token.js.map +0 -1
- package/lib/module/models/primer-callbacks.js +0 -2
- package/lib/module/models/primer-callbacks.js.map +0 -1
- package/lib/module/models/primer-config.js +0 -2
- package/lib/module/models/primer-config.js.map +0 -1
- package/lib/module/models/primer-error.js +0 -2
- package/lib/module/models/primer-error.js.map +0 -1
- package/lib/module/models/primer-intent.js +0 -2
- package/lib/module/models/primer-intent.js.map +0 -1
- package/lib/module/models/primer-request.js +0 -2
- package/lib/module/models/primer-request.js.map +0 -1
- package/lib/module/models/primer-settings.js +0 -2
- package/lib/module/models/primer-settings.js.map +0 -1
- package/lib/module/models/primer-theme.js +0 -2
- package/lib/module/models/primer-theme.js.map +0 -1
- package/lib/module/models/primer.js +0 -2
- package/lib/module/models/primer.js.map +0 -1
- package/lib/module/models/utils/countryCode.js.map +0 -1
- package/lib/module/models/utils/currencyCode.js.map +0 -1
- package/lib/module/models/utils/redirectScheme.js +0 -2
- package/lib/module/models/utils/redirectScheme.js.map +0 -1
- package/lib/typescript/Primer.d.ts +0 -15
- package/lib/typescript/RNPrimer.d.ts +0 -24
- package/lib/typescript/headless_checkout/NativePrimerHeadlessUniversalCheckout.d.ts +0 -13
- package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +0 -13
- package/lib/typescript/headless_checkout/types.d.ts +0 -16
- package/lib/typescript/index.d.ts +0 -5
- package/lib/typescript/models/action-request.d.ts +0 -10
- package/lib/typescript/models/client-session-actions-request.d.ts +0 -15
- package/lib/typescript/models/payment-instrument-token.d.ts +0 -76
- package/lib/typescript/models/primer-callbacks.d.ts +0 -10
- package/lib/typescript/models/primer-config.d.ts +0 -44
- package/lib/typescript/models/primer-error.d.ts +0 -8
- package/lib/typescript/models/primer-intent.d.ts +0 -13
- package/lib/typescript/models/primer-request.d.ts +0 -7
- package/lib/typescript/models/primer-settings.d.ts +0 -65
- package/lib/typescript/models/primer.d.ts +0 -33
- package/lib/typescript/models/utils/redirectScheme.d.ts +0 -3
- package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +0 -132
- package/src/models/action-request.ts +0 -12
- package/src/models/client-session-actions-request.ts +0 -21
- package/src/models/payment-instrument-token.ts +0 -109
- package/src/models/primer-callbacks.ts +0 -14
- package/src/models/primer-config.ts +0 -55
- package/src/models/primer-error.ts +0 -19
- package/src/models/primer-intent.ts +0 -49
- package/src/models/primer-request.ts +0 -7
- package/src/models/primer-settings.ts +0 -73
- package/src/models/primer.ts +0 -41
- package/src/models/utils/redirectScheme.ts +0 -5
package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
package com.primerioreactnative
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.Callback
|
|
5
|
+
import com.facebook.react.bridge.Promise
|
|
6
|
+
import com.primerioreactnative.datamodels.*
|
|
7
|
+
import com.primerioreactnative.extensions.toPrimerCheckoutDataRN
|
|
8
|
+
import com.primerioreactnative.extensions.toPrimerClientSessionRN
|
|
9
|
+
import com.primerioreactnative.extensions.toPrimerPaymentMethodDataRN
|
|
10
|
+
import com.primerioreactnative.huc.events.PrimerHeadlessUniversalCheckoutEvent
|
|
11
|
+
import com.primerioreactnative.utils.PrimerHeadlessUniversalCheckoutImplementedRNCallbacks
|
|
12
|
+
import com.primerioreactnative.utils.errorTo
|
|
13
|
+
import io.primer.android.ExperimentalPrimerApi
|
|
14
|
+
import io.primer.android.completion.PrimerPaymentCreationDecisionHandler
|
|
15
|
+
import io.primer.android.completion.PrimerResumeDecisionHandler
|
|
16
|
+
import io.primer.android.components.PrimerHeadlessUniversalCheckoutListener
|
|
17
|
+
import io.primer.android.components.domain.core.models.PrimerHeadlessUniversalCheckoutPaymentMethod
|
|
18
|
+
import io.primer.android.data.configuration.models.PrimerPaymentMethodType
|
|
19
|
+
import io.primer.android.domain.PrimerCheckoutData
|
|
20
|
+
import io.primer.android.domain.action.models.PrimerClientSession
|
|
21
|
+
import io.primer.android.domain.error.models.PrimerError
|
|
22
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodData
|
|
23
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodTokenData
|
|
24
|
+
import kotlinx.serialization.encodeToString
|
|
25
|
+
import kotlinx.serialization.json.Json
|
|
26
|
+
import org.json.JSONObject
|
|
27
|
+
|
|
28
|
+
@OptIn(ExperimentalPrimerApi::class)
|
|
29
|
+
class PrimerRNHeadlessUniversalCheckoutListener : PrimerHeadlessUniversalCheckoutListener {
|
|
30
|
+
private var paymentCreationDecisionHandler: ((errorMessage: String?) -> Unit)? = null
|
|
31
|
+
private var tokenizeSuccessDecisionHandler: ((resumeToken: String?, errorMessage: String?) -> Unit)? =
|
|
32
|
+
null
|
|
33
|
+
private var resumeSuccessDecisionHandler: ((resumeToken: String?, errorMessage: String?) -> Unit)? =
|
|
34
|
+
null
|
|
35
|
+
private var implementedRNCallbacks: PrimerHeadlessUniversalCheckoutImplementedRNCallbacks? = null
|
|
36
|
+
|
|
37
|
+
var sendEvent: ((eventName: String, paramsJson: JSONObject?) -> Unit)? = null
|
|
38
|
+
|
|
39
|
+
var sendError: ((error: PrimerErrorRN) -> Unit)? = null
|
|
40
|
+
var sendErrorWithCheckoutData: ((error: PrimerErrorRN, checkoutData: PrimerCheckoutDataRN?) -> Unit)? =
|
|
41
|
+
null
|
|
42
|
+
|
|
43
|
+
var successCallback: Callback? = null
|
|
44
|
+
|
|
45
|
+
override fun onAvailablePaymentMethodsLoaded(paymentMethods: List<PrimerHeadlessUniversalCheckoutPaymentMethod>) {
|
|
46
|
+
sendEvent?.invoke(
|
|
47
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_HUC_AVAILABLE_PAYMENT_METHODS_LOADED.eventName,
|
|
48
|
+
JSONObject().apply {
|
|
49
|
+
put("paymentMethodTypes", paymentMethods.map { it.paymentMethodType.name })
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
successCallback?.invoke(
|
|
53
|
+
Arguments.fromList(paymentMethods.map { it.paymentMethodType.name })
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
override fun onPreparationStarted(paymentMethodType: PrimerPaymentMethodType) {
|
|
58
|
+
sendEvent?.invoke(
|
|
59
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_HUC_PREPARE_START.eventName,
|
|
60
|
+
JSONObject(Json.encodeToString(PrimerPaymentMethodDataRN(paymentMethodType)))
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
override fun onPaymentMethodShowed(paymentMethodType: PrimerPaymentMethodType) {
|
|
65
|
+
sendEvent?.invoke(
|
|
66
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_HUC_PAYMENT_METHOD_SHOW.eventName,
|
|
67
|
+
JSONObject(Json.encodeToString(PrimerPaymentMethodDataRN(paymentMethodType)))
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
override fun onTokenizationStarted(paymentMethodType: PrimerPaymentMethodType) {
|
|
72
|
+
sendEvent?.invoke(
|
|
73
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_HUC_TOKENIZE_START.eventName,
|
|
74
|
+
JSONObject(Json.encodeToString(PrimerPaymentMethodDataRN(paymentMethodType)))
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override fun onCheckoutCompleted(checkoutData: PrimerCheckoutData) {
|
|
79
|
+
if (implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true) {
|
|
80
|
+
sendEvent?.invoke(
|
|
81
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_CHECKOUT_COMPLETE.eventName,
|
|
82
|
+
JSONObject(Json.encodeToString(checkoutData.toPrimerCheckoutDataRN()))
|
|
83
|
+
)
|
|
84
|
+
} else {
|
|
85
|
+
sendError?.invoke(
|
|
86
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
87
|
+
errorTo "Callback [onCheckoutComplete] should be implemented."
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
override fun onBeforePaymentCreated(
|
|
93
|
+
paymentMethodData: PrimerPaymentMethodData,
|
|
94
|
+
createPaymentHandler: PrimerPaymentCreationDecisionHandler
|
|
95
|
+
) {
|
|
96
|
+
if (implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true) {
|
|
97
|
+
paymentCreationDecisionHandler = { errorMessage ->
|
|
98
|
+
when {
|
|
99
|
+
errorMessage != null -> createPaymentHandler.abortPaymentCreation(errorMessage.ifBlank { null })
|
|
100
|
+
else -> createPaymentHandler.continuePaymentCreation()
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
sendEvent?.invoke(
|
|
104
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_BEFORE_PAYMENT_CREATE.eventName,
|
|
105
|
+
JSONObject(Json.encodeToString(paymentMethodData.toPrimerPaymentMethodDataRN()))
|
|
106
|
+
)
|
|
107
|
+
} else {
|
|
108
|
+
super.onBeforePaymentCreated(paymentMethodData, createPaymentHandler)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
override fun onBeforeClientSessionUpdated() {
|
|
113
|
+
if (implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true) {
|
|
114
|
+
sendEvent?.invoke(
|
|
115
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_BEFORE_CLIENT_SESSION_UPDATE.eventName,
|
|
116
|
+
null
|
|
117
|
+
)
|
|
118
|
+
} else {
|
|
119
|
+
super.onBeforeClientSessionUpdated()
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
override fun onClientSessionUpdated(clientSession: PrimerClientSession) {
|
|
124
|
+
if (implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true) {
|
|
125
|
+
sendEvent?.invoke(
|
|
126
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_CLIENT_SESSION_UPDATE.eventName,
|
|
127
|
+
JSONObject(Json.encodeToString(clientSession.toPrimerClientSessionRN()))
|
|
128
|
+
)
|
|
129
|
+
} else {
|
|
130
|
+
super.onClientSessionUpdated(clientSession)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
override fun onTokenizeSuccess(
|
|
135
|
+
paymentMethodTokenData: PrimerPaymentMethodTokenData,
|
|
136
|
+
decisionHandler: PrimerResumeDecisionHandler
|
|
137
|
+
) {
|
|
138
|
+
if (implementedRNCallbacks?.isOnTokenizeSuccessImplemented == true) {
|
|
139
|
+
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(paymentMethodTokenData)
|
|
140
|
+
val request = JSONObject(Json.encodeToString(token))
|
|
141
|
+
tokenizeSuccessDecisionHandler = { newClientToken, err ->
|
|
142
|
+
when {
|
|
143
|
+
err != null -> decisionHandler.handleFailure(err.ifBlank { null })
|
|
144
|
+
newClientToken != null -> decisionHandler.continueWithNewClientToken(newClientToken)
|
|
145
|
+
else -> decisionHandler.handleSuccess()
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
sendEvent?.invoke(PrimerHeadlessUniversalCheckoutEvent.ON_TOKENIZE_SUCCESS.eventName, request)
|
|
149
|
+
} else {
|
|
150
|
+
sendError?.invoke(
|
|
151
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
152
|
+
errorTo "Callback [onTokenizeSuccess] should be implemented."
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
override fun onResumeSuccess(
|
|
158
|
+
resumeToken: String,
|
|
159
|
+
decisionHandler: PrimerResumeDecisionHandler
|
|
160
|
+
) {
|
|
161
|
+
if (implementedRNCallbacks?.isOnResumeSuccessImplemented == true) {
|
|
162
|
+
resumeSuccessDecisionHandler = { newClientToken, err ->
|
|
163
|
+
when {
|
|
164
|
+
err != null -> decisionHandler.handleFailure(err.ifBlank { null })
|
|
165
|
+
newClientToken != null -> decisionHandler.continueWithNewClientToken(newClientToken)
|
|
166
|
+
else -> decisionHandler.handleSuccess()
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
val resumeToken = mapOf(Keys.RESUME_TOKEN to resumeToken)
|
|
171
|
+
sendEvent?.invoke(
|
|
172
|
+
PrimerHeadlessUniversalCheckoutEvent.ON_RESUME_SUCCESS.eventName,
|
|
173
|
+
JSONObject(Json.encodeToString(resumeToken))
|
|
174
|
+
)
|
|
175
|
+
} else {
|
|
176
|
+
sendError?.invoke(
|
|
177
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
178
|
+
errorTo "Callback [onResumeSuccess] should be implemented."
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
override fun onFailed(
|
|
184
|
+
error: PrimerError,
|
|
185
|
+
checkoutData: PrimerCheckoutData?,
|
|
186
|
+
) {
|
|
187
|
+
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
188
|
+
sendErrorWithCheckoutData?.invoke(
|
|
189
|
+
PrimerErrorRN(
|
|
190
|
+
error.errorId,
|
|
191
|
+
error.description,
|
|
192
|
+
error.recoverySuggestion
|
|
193
|
+
), checkoutData?.toPrimerCheckoutDataRN()
|
|
194
|
+
)
|
|
195
|
+
} else {
|
|
196
|
+
super.onFailed(error, checkoutData)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
override fun onFailed(error: PrimerError) {
|
|
201
|
+
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
202
|
+
sendError?.invoke(PrimerErrorRN(error.errorId, error.description, error.recoverySuggestion))
|
|
203
|
+
} else {
|
|
204
|
+
super.onFailed(error)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// region tokenization handlers
|
|
209
|
+
fun handleTokenizationNewClientToken(newClientToken: String) {
|
|
210
|
+
tokenizeSuccessDecisionHandler?.invoke(newClientToken, null)
|
|
211
|
+
tokenizeSuccessDecisionHandler = null
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
fun handleTokenizationSuccess(promise: Promise) {
|
|
215
|
+
val error =
|
|
216
|
+
ErrorTypeRN.NativeBridgeFailed errorTo "PrimerTokenizationHandler's " +
|
|
217
|
+
"handleSuccess function is not available on HUC."
|
|
218
|
+
promise.reject(error.errorId, error.description)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
fun handleTokenizationFailure(errorMessage: String, promise: Promise) {
|
|
222
|
+
val error =
|
|
223
|
+
ErrorTypeRN.NativeBridgeFailed errorTo "PrimerTokenizationHandler's " +
|
|
224
|
+
"handleFailure function is not available on HUC."
|
|
225
|
+
promise.reject(error.errorId, error.description)
|
|
226
|
+
}
|
|
227
|
+
// endregion
|
|
228
|
+
|
|
229
|
+
// region resume handlers
|
|
230
|
+
fun handleResumeNewClientToken(newClientToken: String) {
|
|
231
|
+
resumeSuccessDecisionHandler?.invoke(newClientToken, null)
|
|
232
|
+
resumeSuccessDecisionHandler = null
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
fun handleResumeSuccess(promise: Promise) {
|
|
236
|
+
val error =
|
|
237
|
+
ErrorTypeRN.NativeBridgeFailed errorTo "PrimerResumeHandler's " +
|
|
238
|
+
"handleSuccess function is not available on HUC."
|
|
239
|
+
promise.reject(error.errorId, error.description)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
fun handleResumeFailure(errorMessage: String, promise: Promise) {
|
|
243
|
+
val error =
|
|
244
|
+
ErrorTypeRN.NativeBridgeFailed errorTo "PrimerResumeHandler's " +
|
|
245
|
+
"handleFailure function is not available on HUC."
|
|
246
|
+
promise.reject(error.errorId, error.description)
|
|
247
|
+
}
|
|
248
|
+
// endregion
|
|
249
|
+
|
|
250
|
+
// region payment create handlers
|
|
251
|
+
fun handlePaymentCreationContinue() {
|
|
252
|
+
paymentCreationDecisionHandler?.invoke(null)
|
|
253
|
+
paymentCreationDecisionHandler = null
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
fun handlePaymentCreationAbort(errorMessage: String) {
|
|
257
|
+
paymentCreationDecisionHandler?.invoke(errorMessage)
|
|
258
|
+
paymentCreationDecisionHandler = null
|
|
259
|
+
}
|
|
260
|
+
// endregion
|
|
261
|
+
|
|
262
|
+
fun setImplementedCallbacks(
|
|
263
|
+
implementedRNCallbacks:
|
|
264
|
+
PrimerHeadlessUniversalCheckoutImplementedRNCallbacks
|
|
265
|
+
) {
|
|
266
|
+
this.implementedRNCallbacks = implementedRNCallbacks
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
fun removeCallbacksAndHandlers() {
|
|
270
|
+
paymentCreationDecisionHandler = null
|
|
271
|
+
tokenizeSuccessDecisionHandler = null
|
|
272
|
+
resumeSuccessDecisionHandler = null
|
|
273
|
+
implementedRNCallbacks = null
|
|
274
|
+
}
|
|
275
|
+
}
|
|
@@ -12,8 +12,8 @@ class ReactNativePackage : ReactPackage {
|
|
|
12
12
|
|
|
13
13
|
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
14
14
|
return listOf(
|
|
15
|
-
PrimerRN(reactContext),
|
|
16
|
-
|
|
15
|
+
PrimerRN(reactContext, json),
|
|
16
|
+
PrimerRNHeadlessUniversalCheckout(reactContext, json)
|
|
17
17
|
)
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
import kotlinx.serialization.Serializable
|
|
4
|
+
|
|
5
|
+
@Serializable
|
|
6
|
+
data class PrimerCheckoutDataRN(val paymentRN: PrimerPaymentRN)
|
|
7
|
+
|
|
8
|
+
@Serializable
|
|
9
|
+
data class PrimerPaymentRN(
|
|
10
|
+
val id: String,
|
|
11
|
+
val orderId: String,
|
|
12
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
import io.primer.android.data.configuration.models.CountryCode
|
|
4
|
+
import io.primer.android.domain.action.models.*
|
|
5
|
+
import kotlinx.serialization.Serializable
|
|
6
|
+
|
|
7
|
+
@Serializable
|
|
8
|
+
data class PrimerClientSessionRN(
|
|
9
|
+
val customerId: String?,
|
|
10
|
+
val orderId: String?,
|
|
11
|
+
val currencyCode: String?,
|
|
12
|
+
val totalAmount: Int?,
|
|
13
|
+
val lineItems: List<PrimerLineItemRN>?,
|
|
14
|
+
val orderDetails: PrimerOrderRN?,
|
|
15
|
+
val customer: PrimerCustomerRN?,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
@Serializable
|
|
19
|
+
data class PrimerCustomerRN(
|
|
20
|
+
val emailAddress: String?,
|
|
21
|
+
val mobileNumber: String?,
|
|
22
|
+
val firstName: String?,
|
|
23
|
+
val lastName: String?,
|
|
24
|
+
val billingAddress: PrimerAddressRN?,
|
|
25
|
+
val shippingAddress: PrimerAddressRN?,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@Serializable
|
|
29
|
+
data class PrimerOrderRN(
|
|
30
|
+
val countryCode: CountryCode?,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@Serializable
|
|
34
|
+
data class PrimerLineItemRN(
|
|
35
|
+
val itemId: String?,
|
|
36
|
+
val itemDescription: String?,
|
|
37
|
+
val amount: Int?,
|
|
38
|
+
val discountAmount: Int?,
|
|
39
|
+
val quantity: Int?,
|
|
40
|
+
val taxCode: String?,
|
|
41
|
+
val taxAmount: Int?
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@Serializable
|
|
45
|
+
data class PrimerAddressRN(
|
|
46
|
+
val firstName: String? = null,
|
|
47
|
+
val lastName: String? = null,
|
|
48
|
+
val addressLine1: String? = null,
|
|
49
|
+
val addressLine2: String? = null,
|
|
50
|
+
val postalCode: String? = null,
|
|
51
|
+
val city: String? = null,
|
|
52
|
+
val state: String? = null,
|
|
53
|
+
val countryCode: CountryCode? = null,
|
|
54
|
+
)
|
|
@@ -2,20 +2,17 @@ package com.primerioreactnative.datamodels
|
|
|
2
2
|
|
|
3
3
|
import kotlinx.serialization.Serializable
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
@Serializable
|
|
7
6
|
data class PrimerErrorRN(
|
|
8
7
|
val errorId: String? = null,
|
|
9
|
-
val
|
|
8
|
+
val description: String? = null,
|
|
10
9
|
val recoverySuggestion: String? = null
|
|
11
10
|
)
|
|
12
11
|
|
|
13
12
|
@Serializable
|
|
14
|
-
enum class ErrorTypeRN {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
AssetMissing,
|
|
20
|
-
AssetMismatch
|
|
13
|
+
enum class ErrorTypeRN(val errorId: String) {
|
|
14
|
+
NativeBridgeFailed("native-bridge"),
|
|
15
|
+
AssetMissing("missing-asset"),
|
|
16
|
+
AssetMismatch("mismatch-asset"),
|
|
17
|
+
InvalidPaymentMethodType("invalid-payment-method-type")
|
|
21
18
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
internal enum class PrimerEvents(val eventName: String) {
|
|
4
|
+
|
|
5
|
+
ON_CHECKOUT_COMPLETE("onCheckoutComplete"),
|
|
6
|
+
ON_BEFORE_CLIENT_SESSION_UPDATE("onBeforeClientSessionUpdate"),
|
|
7
|
+
ON_CLIENT_SESSION_UPDATE("onClientSessionUpdate"),
|
|
8
|
+
ON_BEFORE_PAYMENT_CREATE("onBeforePaymentCreate"),
|
|
9
|
+
ON_DISMISS("onDismiss"),
|
|
10
|
+
ON_TOKENIZE_SUCCESS("onTokenizeSuccess"),
|
|
11
|
+
ON_RESUME_SUCCESS("onResumeSuccess"),
|
|
12
|
+
ON_ERROR("onError"),
|
|
13
|
+
}
|
package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
package com.primerioreactnative.datamodels
|
|
2
2
|
|
|
3
|
-
import io.primer.android.
|
|
4
|
-
import io.primer.android.
|
|
5
|
-
import io.primer.android.
|
|
3
|
+
import io.primer.android.data.tokenization.models.PaymentInstrumentData
|
|
4
|
+
import io.primer.android.data.tokenization.models.TokenType
|
|
5
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodTokenData
|
|
6
6
|
import kotlinx.serialization.Serializable
|
|
7
7
|
|
|
8
8
|
@Serializable
|
|
@@ -31,7 +31,7 @@ data class PrimerPaymentInstrumentTokenRN(
|
|
|
31
31
|
)
|
|
32
32
|
|
|
33
33
|
companion object {
|
|
34
|
-
fun fromPaymentMethodToken(token:
|
|
34
|
+
fun fromPaymentMethodToken(token: PrimerPaymentMethodTokenData): PrimerPaymentInstrumentTokenRN {
|
|
35
35
|
return PrimerPaymentInstrumentTokenRN(
|
|
36
36
|
token.token,
|
|
37
37
|
token.analyticsId,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels
|
|
2
|
+
|
|
3
|
+
import io.primer.android.data.configuration.models.PrimerPaymentMethodType
|
|
4
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodData
|
|
5
|
+
import kotlinx.serialization.Serializable
|
|
6
|
+
|
|
7
|
+
@Serializable
|
|
8
|
+
data class PrimerPaymentMethodDataRN(val paymentMethodType: PrimerPaymentMethodType)
|
|
@@ -1,145 +1,63 @@
|
|
|
1
1
|
package com.primerioreactnative.datamodels
|
|
2
2
|
|
|
3
|
-
import io.primer.android.
|
|
4
|
-
import io.primer.android.
|
|
3
|
+
import io.primer.android.data.settings.*
|
|
4
|
+
import io.primer.android.ui.settings.PrimerUIOptions
|
|
5
|
+
import kotlinx.serialization.SerialName
|
|
5
6
|
import kotlinx.serialization.Serializable
|
|
7
|
+
import java.util.*
|
|
6
8
|
|
|
7
9
|
@Serializable
|
|
8
|
-
class PrimerSettingsRN(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
val order = order?.format() ?: Order()
|
|
16
|
-
val customer = customer?.format() ?: Customer()
|
|
17
|
-
val business = business?.format() ?: Business()
|
|
18
|
-
val options = options?.format() ?: Options()
|
|
19
|
-
return PrimerSettings(order, customer, business, options)
|
|
20
|
-
}
|
|
21
|
-
}
|
|
10
|
+
data class PrimerSettingsRN(
|
|
11
|
+
var paymentHandling: PrimerPaymentHandling = PrimerPaymentHandling.AUTO,
|
|
12
|
+
var localeData: LocaleSettingsRN = LocaleSettingsRN(),
|
|
13
|
+
var paymentMethodOptions: PrimerPaymentMethodOptionsRN = PrimerPaymentMethodOptionsRN(),
|
|
14
|
+
var uiOptions: PrimerUIOptions = PrimerUIOptions(),
|
|
15
|
+
var debugOptions: PrimerDebugOptions = PrimerDebugOptions(),
|
|
16
|
+
)
|
|
22
17
|
|
|
23
18
|
@Serializable
|
|
24
|
-
data class
|
|
25
|
-
val
|
|
26
|
-
val
|
|
27
|
-
|
|
28
|
-
val items: List<OrderItemRN>? = null,
|
|
29
|
-
val shipping: PrimerAddressRN? = null,
|
|
30
|
-
) {
|
|
31
|
-
fun format(): Order {
|
|
32
|
-
return Order(
|
|
33
|
-
amount = amount,
|
|
34
|
-
currency = currency,
|
|
35
|
-
countryCode = countryCode?.let { CountryCode.valueOf(it) },
|
|
19
|
+
data class LocaleSettingsRN(
|
|
20
|
+
val languageCode: String? = null,
|
|
21
|
+
val localeCode: String? = null
|
|
22
|
+
)
|
|
36
23
|
|
|
37
|
-
|
|
24
|
+
fun LocaleSettingsRN.toLocale(): Locale {
|
|
25
|
+
return when {
|
|
26
|
+
languageCode == null -> Locale.getDefault()
|
|
27
|
+
localeCode == null -> Locale(languageCode)
|
|
28
|
+
else -> Locale(languageCode, localeCode)
|
|
38
29
|
}
|
|
39
30
|
}
|
|
40
31
|
|
|
41
32
|
@Serializable
|
|
42
|
-
data class
|
|
43
|
-
|
|
44
|
-
val
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
data class PrimerPaymentMethodOptionsRN(
|
|
34
|
+
@SerialName("android")
|
|
35
|
+
val androidSettingsRN: AndroidSettingsRN = AndroidSettingsRN(),
|
|
36
|
+
var cardPaymentOptions: PrimerCardPaymentOptions = PrimerCardPaymentOptions(),
|
|
37
|
+
var googlePayOptions: PrimerGooglePayOptions = PrimerGooglePayOptions(),
|
|
38
|
+
var klarnaOptions: PrimerKlarnaOptions = PrimerKlarnaOptions(),
|
|
39
|
+
var apayaOptions: PrimerApayaOptions = PrimerApayaOptions(),
|
|
40
|
+
var goCardlessOptions: PrimerGoCardlessOptions = PrimerGoCardlessOptions()
|
|
47
41
|
)
|
|
48
42
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
fun format(): Business {
|
|
59
|
-
return Business(
|
|
60
|
-
name = name,
|
|
61
|
-
registrationNumber = registrationNumber,
|
|
62
|
-
email = email,
|
|
63
|
-
phone = phone,
|
|
64
|
-
address = address?.format(),
|
|
65
|
-
)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@Serializable
|
|
70
|
-
data class CustomerRN(
|
|
71
|
-
val id: String? = null,
|
|
72
|
-
val firstName: String? = null,
|
|
73
|
-
val lastName: String? = null,
|
|
74
|
-
val email: String? = null,
|
|
75
|
-
val phone: String? = null,
|
|
76
|
-
val billing: PrimerAddressRN? = null,
|
|
77
|
-
) {
|
|
78
|
-
fun format(): Customer {
|
|
79
|
-
return Customer(
|
|
80
|
-
id = id,
|
|
81
|
-
firstName = firstName,
|
|
82
|
-
lastName = lastName,
|
|
83
|
-
email = email,
|
|
84
|
-
homePhone = phone,
|
|
85
|
-
billingAddress = billing?.format(),
|
|
86
|
-
)
|
|
87
|
-
}
|
|
88
|
-
}
|
|
43
|
+
fun PrimerPaymentMethodOptionsRN.toPrimerPaymentMethodOptions() = PrimerPaymentMethodOptions(
|
|
44
|
+
androidSettingsRN.redirectScheme,
|
|
45
|
+
cardPaymentOptions,
|
|
46
|
+
googlePayOptions,
|
|
47
|
+
klarnaOptions,
|
|
48
|
+
apayaOptions,
|
|
49
|
+
goCardlessOptions
|
|
50
|
+
)
|
|
89
51
|
|
|
90
52
|
@Serializable
|
|
91
|
-
data class
|
|
92
|
-
val isResultScreenEnabled: Boolean? = null,
|
|
93
|
-
val isLoadingScreenEnabled: Boolean? = null,
|
|
94
|
-
val isFullScreenEnabled: Boolean? = null,
|
|
95
|
-
val is3DSOnVaultingEnabled: Boolean? = null,
|
|
96
|
-
val locale: String? = null,
|
|
97
|
-
val android: AndroidOptionsRN? = null,
|
|
98
|
-
val is3DSDevelopmentModeEnabled: Boolean = true
|
|
99
|
-
) {
|
|
100
|
-
fun format(): Options {
|
|
101
|
-
return Options(
|
|
102
|
-
showUI = isLoadingScreenEnabled ?: true,
|
|
103
|
-
redirectScheme = android?.redirectScheme,
|
|
104
|
-
is3DSOnVaultingEnabled = is3DSOnVaultingEnabled ?: false,
|
|
105
|
-
debugOptions = PrimerDebugOptions(
|
|
106
|
-
is3DSSanityCheckEnabled = !is3DSDevelopmentModeEnabled, // false on emulator
|
|
107
|
-
),
|
|
108
|
-
)
|
|
109
|
-
}
|
|
110
|
-
}
|
|
53
|
+
data class AndroidSettingsRN(val redirectScheme: String? = null)
|
|
111
54
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
55
|
+
fun PrimerSettingsRN.toPrimerSettings() = PrimerSettings(
|
|
56
|
+
paymentHandling,
|
|
57
|
+
localeData.toLocale(),
|
|
58
|
+
paymentMethodOptions.toPrimerPaymentMethodOptions(),
|
|
59
|
+
uiOptions,
|
|
60
|
+
debugOptions
|
|
115
61
|
)
|
|
116
62
|
|
|
117
|
-
@Serializable
|
|
118
|
-
data class PrimerAddressRN(
|
|
119
|
-
val line1: String?,
|
|
120
|
-
val line2: String? = null,
|
|
121
|
-
val postalCode: String?,
|
|
122
|
-
val state: String? = null,
|
|
123
|
-
val city: String?,
|
|
124
|
-
val country: String?,
|
|
125
|
-
) {
|
|
126
|
-
|
|
127
|
-
fun format(): Address? {
|
|
128
|
-
if (
|
|
129
|
-
line1 == null ||
|
|
130
|
-
postalCode == null ||
|
|
131
|
-
city == null ||
|
|
132
|
-
country == null
|
|
133
|
-
) {
|
|
134
|
-
return null
|
|
135
|
-
}
|
|
136
63
|
|
|
137
|
-
return Address(
|
|
138
|
-
line1 = line1,
|
|
139
|
-
line2 = line2,
|
|
140
|
-
city = city,
|
|
141
|
-
countryCode = CountryCode.valueOf(country),
|
|
142
|
-
postalCode = postalCode,
|
|
143
|
-
)
|
|
144
|
-
}
|
|
145
|
-
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.primerioreactnative.extensions
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.PrimerAddressRN
|
|
4
|
+
import io.primer.android.domain.action.models.PrimerAddress
|
|
5
|
+
|
|
6
|
+
internal fun PrimerAddress.toPrimerAddressRN() = PrimerAddressRN(
|
|
7
|
+
firstName,
|
|
8
|
+
lastName,
|
|
9
|
+
addressLine1,
|
|
10
|
+
addressLine2,
|
|
11
|
+
postalCode,
|
|
12
|
+
city,
|
|
13
|
+
state,
|
|
14
|
+
countryCode
|
|
15
|
+
)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
package com.primerioreactnative.extensions
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.PrimerCheckoutDataRN
|
|
4
|
+
import io.primer.android.domain.PrimerCheckoutData
|
|
5
|
+
|
|
6
|
+
internal fun PrimerCheckoutData.toPrimerCheckoutDataRN() =
|
|
7
|
+
PrimerCheckoutDataRN(payment.toPrimerPaymentRN())
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.primerioreactnative.extensions
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.PrimerClientSessionRN
|
|
4
|
+
import io.primer.android.domain.action.models.PrimerClientSession
|
|
5
|
+
|
|
6
|
+
internal fun PrimerClientSession.toPrimerClientSessionRN() =
|
|
7
|
+
PrimerClientSessionRN(
|
|
8
|
+
customerId,
|
|
9
|
+
orderId,
|
|
10
|
+
currencyCode,
|
|
11
|
+
totalAmount,
|
|
12
|
+
lineItems?.map { it.toPrimerLineItemRN() },
|
|
13
|
+
orderDetails?.toPrimerOrderRN(),
|
|
14
|
+
customer?.toPrimerCustomerRN()
|
|
15
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package com.primerioreactnative.extensions
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.PrimerCustomerRN
|
|
4
|
+
import io.primer.android.domain.action.models.PrimerCustomer
|
|
5
|
+
|
|
6
|
+
internal fun PrimerCustomer.toPrimerCustomerRN() = PrimerCustomerRN(
|
|
7
|
+
emailAddress,
|
|
8
|
+
mobileNumber,
|
|
9
|
+
firstName,
|
|
10
|
+
lastName,
|
|
11
|
+
billingAddress?.toPrimerAddressRN(),
|
|
12
|
+
shippingAddress?.toPrimerAddressRN()
|
|
13
|
+
)
|