@primer-io/react-native 0.16.0 → 2.0.1
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/ReactNativePackage.kt +3 -14
- 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 +3 -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/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/PrimerImplementedRNCallbacks.kt +16 -6
- package/ios/DataModels/ImplementedRNCallbacks.swift +31 -0
- package/ios/DataModels/PrimerErrorRN.swift +0 -17
- package/ios/DataModels/PrimerSettingsRN.swift +70 -147
- package/ios/DataModels/PrimerThemeRN.swift +1 -10
- package/ios/RNTPrimer.m +26 -12
- package/ios/RNTPrimer.swift +295 -249
- package/ios/{Core/ReactNative-Bridging-Header.h → ReactNative-Bridging-Header.h} +0 -1
- package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
- package/lib/commonjs/Primer.js +201 -150
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +102 -41
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/index.js +110 -24
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/{primer.js → Primer.js} +1 -1
- package/lib/commonjs/{headless_checkout/types.js.map → models/Primer.js.map} +0 -0
- 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/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-config.js → PrimerSettings.js} +1 -1
- package/lib/commonjs/models/{primer-callbacks.js.map → PrimerSettings.js.map} +0 -0
- package/lib/commonjs/models/PrimerTheme.js +2 -0
- package/lib/commonjs/models/{primer-config.js.map → PrimerTheme.js.map} +0 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/Primer.js +201 -137
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +102 -41
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/index.js +9 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/Primer.js +2 -0
- package/lib/{commonjs/models/primer-request.js.map → module/models/Primer.js.map} +0 -0
- 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/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/{commonjs/models/primer.js.map → module/models/PrimerSettings.js.map} +0 -0
- package/lib/module/models/PrimerTheme.js +2 -0
- package/lib/module/{headless_checkout/types.js.map → models/PrimerTheme.js.map} +0 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/Primer.d.ts +2 -15
- package/lib/typescript/RNPrimer.d.ts +16 -9
- package/lib/typescript/index.d.ts +9 -5
- package/lib/typescript/models/Primer.d.ts +26 -0
- package/lib/typescript/models/PrimerCheckoutData.d.ts +15 -0
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
- package/lib/typescript/models/PrimerClientSession.d.ts +45 -0
- package/lib/typescript/models/{utils/countryCode.d.ts → PrimerCountryCode.d.ts} +1 -1
- package/lib/typescript/models/{utils/currencyCode.d.ts → PrimerCurrencyCode.d.ts} +1 -1
- package/lib/typescript/models/PrimerError.d.ts +11 -0
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +116 -0
- package/lib/typescript/models/PrimerSessionIntent.d.ts +4 -0
- package/lib/typescript/models/PrimerSettings.d.ts +73 -0
- package/lib/typescript/models/{primer-theme.d.ts → PrimerTheme.d.ts} +1 -1
- package/lib/typescript/utils/index.d.ts +1 -1
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/Primer.ts +228 -172
- package/src/RNPrimer.ts +135 -51
- package/src/index.tsx +33 -7
- package/src/models/Primer.ts +35 -0
- 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/PrimerPaymentMethodTokenData.ts +130 -0
- package/src/models/PrimerSessionIntent.ts +4 -0
- package/src/models/PrimerSettings.ts +93 -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/PrimerCardNumberEditTextManager.kt +0 -83
- 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/assets/AssetsManager.kt +0 -56
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +0 -11
- 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/ios/Headless Universal Checkout/RNTPrimerCardNumberInputElementManager.m +0 -23
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +0 -30
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +0 -241
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +0 -14
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +0 -113
- package/lib/commonjs/PrimerInput.js +0 -80
- package/lib/commonjs/PrimerInput.js.map +0 -1
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -14
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +0 -1
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +0 -110
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -117
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/commonjs/headless_checkout/types.js +0 -2
- 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-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-settings.js +0 -6
- 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/PrimerInput.js +0 -46
- package/lib/module/PrimerInput.js.map +0 -1
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +0 -5
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.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/headless_checkout/PrimerHeadlessUniversalCheckout.js +0 -100
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +0 -1
- package/lib/module/headless_checkout/types.js +0 -2
- package/lib/module/models/action-request.js +0 -2
- package/lib/module/models/action-request.js.map +0 -1
- package/lib/module/models/client-session-actions-request.js +0 -2
- package/lib/module/models/client-session-actions-request.js.map +0 -1
- 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/PrimerInput.d.ts +0 -15
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +0 -1
- 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/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/PrimerInput.tsx +0 -73
- package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +0 -2
- package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +0 -132
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +0 -140
- package/src/headless_checkout/types.ts +0 -18
- 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
|
@@ -1,170 +1,254 @@
|
|
|
1
1
|
package com.primerioreactnative
|
|
2
2
|
|
|
3
|
-
import android.util.Log
|
|
4
3
|
import com.primerioreactnative.datamodels.*
|
|
5
|
-
import com.primerioreactnative.
|
|
4
|
+
import com.primerioreactnative.extensions.toPrimerCheckoutDataRN
|
|
5
|
+
import com.primerioreactnative.extensions.toPrimerClientSessionRN
|
|
6
|
+
import com.primerioreactnative.extensions.toPrimerPaymentMethodDataRN
|
|
6
7
|
import com.primerioreactnative.utils.PrimerImplementedRNCallbacks
|
|
7
|
-
import com.primerioreactnative.utils.asError
|
|
8
8
|
import com.primerioreactnative.utils.errorTo
|
|
9
|
-
import io.primer.android.
|
|
10
|
-
import io.primer.android.completion.
|
|
11
|
-
import io.primer.android.
|
|
9
|
+
import io.primer.android.PrimerCheckoutListener
|
|
10
|
+
import io.primer.android.completion.PrimerErrorDecisionHandler
|
|
11
|
+
import io.primer.android.completion.PrimerPaymentCreationDecisionHandler
|
|
12
|
+
import io.primer.android.completion.PrimerResumeDecisionHandler
|
|
13
|
+
import io.primer.android.domain.PrimerCheckoutData
|
|
14
|
+
import io.primer.android.domain.action.models.PrimerClientSession
|
|
15
|
+
import io.primer.android.domain.error.models.PrimerError
|
|
16
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodData
|
|
17
|
+
import io.primer.android.domain.tokenization.models.PrimerPaymentMethodTokenData
|
|
12
18
|
import kotlinx.serialization.encodeToString
|
|
13
19
|
import kotlinx.serialization.json.Json
|
|
14
20
|
import org.json.JSONObject
|
|
15
21
|
|
|
16
|
-
class PrimerRNEventListener :
|
|
22
|
+
class PrimerRNEventListener : PrimerCheckoutListener {
|
|
17
23
|
|
|
18
|
-
private var
|
|
19
|
-
private var
|
|
20
|
-
private var
|
|
21
|
-
|
|
24
|
+
private var paymentCreationDecisionHandler: ((errorMessage: String?) -> Unit)? = null
|
|
25
|
+
private var primerErrorDecisionHandler: ((errorMessage: String?) -> Unit)? = null
|
|
26
|
+
private var tokenizeSuccessDecisionHandler: ((resumeToken: String?, errorMessage: String?) -> Unit)? =
|
|
27
|
+
null
|
|
28
|
+
private var resumeSuccessDecisionHandler: ((resumeToken: String?, errorMessage: String?) -> Unit)? =
|
|
29
|
+
null
|
|
22
30
|
private var implementedRNCallbacks: PrimerImplementedRNCallbacks? = null
|
|
23
31
|
|
|
24
|
-
private var resumeHandler: ResumeHandler? = null
|
|
25
|
-
|
|
26
32
|
var sendEvent: ((eventName: String, paramsJson: JSONObject?) -> Unit)? = null
|
|
27
33
|
var sendError: ((error: PrimerErrorRN) -> Unit)? = null
|
|
34
|
+
var sendErrorWithCheckoutData: ((error: PrimerErrorRN, checkoutData: PrimerCheckoutDataRN?) -> Unit)? =
|
|
35
|
+
null
|
|
36
|
+
|
|
37
|
+
override fun onCheckoutCompleted(checkoutData: PrimerCheckoutData) {
|
|
38
|
+
if (implementedRNCallbacks?.isOnCheckoutCompleteImplemented == true) {
|
|
39
|
+
sendEvent?.invoke(
|
|
40
|
+
PrimerEvents.ON_CHECKOUT_COMPLETE.eventName,
|
|
41
|
+
JSONObject(Json.encodeToString(checkoutData.toPrimerCheckoutDataRN()))
|
|
42
|
+
)
|
|
43
|
+
} else {
|
|
44
|
+
sendError?.invoke(
|
|
45
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
46
|
+
errorTo "Callback [onCheckoutComplete] should be implemented."
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
28
50
|
|
|
29
|
-
override fun
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
else ->
|
|
51
|
+
override fun onBeforePaymentCreated(
|
|
52
|
+
paymentMethodData: PrimerPaymentMethodData,
|
|
53
|
+
decisionHandler: PrimerPaymentCreationDecisionHandler
|
|
54
|
+
) {
|
|
55
|
+
if (implementedRNCallbacks?.isOnBeforePaymentCreateImplemented == true) {
|
|
56
|
+
paymentCreationDecisionHandler = { errorMessage ->
|
|
57
|
+
when {
|
|
58
|
+
errorMessage != null -> decisionHandler.abortPaymentCreation(errorMessage.ifBlank { null })
|
|
59
|
+
else -> decisionHandler.continuePaymentCreation()
|
|
60
|
+
}
|
|
38
61
|
}
|
|
62
|
+
sendEvent?.invoke(
|
|
63
|
+
PrimerEvents.ON_BEFORE_PAYMENT_CREATE.eventName,
|
|
64
|
+
JSONObject(Json.encodeToString(paymentMethodData.toPrimerPaymentMethodDataRN()))
|
|
65
|
+
)
|
|
66
|
+
} else {
|
|
67
|
+
super.onBeforePaymentCreated(paymentMethodData, decisionHandler)
|
|
39
68
|
}
|
|
69
|
+
}
|
|
40
70
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
when {
|
|
52
|
-
err != null -> resumeHandler?.handleError(err.asError())
|
|
53
|
-
newClientToken != null -> resumeHandler?.handleNewClientToken(newClientToken)
|
|
54
|
-
else -> resumeHandler?.handleSuccess()
|
|
55
|
-
}
|
|
56
|
-
}
|
|
71
|
+
override fun onBeforeClientSessionUpdated() {
|
|
72
|
+
if (implementedRNCallbacks?.isOnBeforeClientSessionUpdateImplemented == true) {
|
|
73
|
+
sendEvent?.invoke(
|
|
74
|
+
PrimerEvents.ON_BEFORE_CLIENT_SESSION_UPDATE.eventName,
|
|
75
|
+
null
|
|
76
|
+
)
|
|
77
|
+
} else {
|
|
78
|
+
super.onBeforeClientSessionUpdated()
|
|
79
|
+
}
|
|
80
|
+
}
|
|
57
81
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
else -> resumeHandler?.handleSuccess()
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
resumeHandler = e.resumeHandler
|
|
73
|
-
val resumeToken = mapOf(Keys.RESUME_TOKEN to token)
|
|
74
|
-
sendEvent?.invoke(
|
|
75
|
-
PrimerEventsRN.OnResumeSuccess.string,
|
|
76
|
-
JSONObject(Json.encodeToString(resumeToken))
|
|
77
|
-
)
|
|
78
|
-
} else {
|
|
79
|
-
sendError?.invoke(ErrorTypeRN.InitFailed
|
|
80
|
-
errorTo "Callback [onResumeSuccess] should had been implemented.")
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
is CheckoutEvent.ApiError -> {
|
|
84
|
-
Log.e("PrimerRN", "ApiError: ${e.data}")
|
|
85
|
-
val exception = ErrorTypeRN.CheckoutFlowFailed errorTo e.data.description
|
|
86
|
-
sendError?.invoke(exception)
|
|
87
|
-
}
|
|
88
|
-
is CheckoutEvent.TokenAddedToVault -> {
|
|
89
|
-
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(e.data)
|
|
90
|
-
val request = JSONObject(Json.encodeToString(token))
|
|
91
|
-
sendEvent?.invoke(
|
|
92
|
-
PrimerEventsRN.OnVaultSuccess.string,
|
|
93
|
-
request
|
|
94
|
-
)
|
|
95
|
-
}
|
|
96
|
-
is CheckoutEvent.TokenSelected -> {
|
|
97
|
-
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(e.data)
|
|
98
|
-
val request = JSONObject(Json.encodeToString(token))
|
|
99
|
-
onTokenizeSuccess = { newClientToken, err ->
|
|
100
|
-
when {
|
|
101
|
-
err != null -> resumeHandler?.handleError(err.asError())
|
|
102
|
-
newClientToken != null -> resumeHandler?.handleNewClientToken(newClientToken)
|
|
103
|
-
else -> resumeHandler?.handleSuccess()
|
|
104
|
-
}
|
|
105
|
-
}
|
|
82
|
+
override fun onClientSessionUpdated(clientSession: PrimerClientSession) {
|
|
83
|
+
if (implementedRNCallbacks?.isOnClientSessionUpdateImplemented == true) {
|
|
84
|
+
sendEvent?.invoke(
|
|
85
|
+
PrimerEvents.ON_CLIENT_SESSION_UPDATE.eventName,
|
|
86
|
+
JSONObject(Json.encodeToString(clientSession.toPrimerClientSessionRN()))
|
|
87
|
+
)
|
|
88
|
+
} else {
|
|
89
|
+
super.onClientSessionUpdated(clientSession)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
106
92
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
errorTo "Callback [onCheckoutDismissed] should had been implemented.")
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
is CheckoutEvent.TokenizationError -> {
|
|
123
|
-
if (implementedRNCallbacks?.isCheckoutFailedImplemented == true) {
|
|
124
|
-
Log.e("PrimerRN", "TokenizationError: ${e.data}")
|
|
125
|
-
val exception = ErrorTypeRN.TokenizationFailed errorTo e.data.description
|
|
126
|
-
sendError?.invoke(exception)
|
|
127
|
-
} else {
|
|
128
|
-
sendError?.invoke(ErrorTypeRN.InitFailed
|
|
129
|
-
errorTo "Callback [onError] should had been implemented.")
|
|
93
|
+
override fun onTokenizeSuccess(
|
|
94
|
+
paymentMethodTokenData: PrimerPaymentMethodTokenData,
|
|
95
|
+
decisionHandler: PrimerResumeDecisionHandler
|
|
96
|
+
) {
|
|
97
|
+
if (implementedRNCallbacks?.isOnTokenizeSuccessImplemented == true) {
|
|
98
|
+
val token = PrimerPaymentInstrumentTokenRN.fromPaymentMethodToken(paymentMethodTokenData)
|
|
99
|
+
val request = JSONObject(Json.encodeToString(token))
|
|
100
|
+
tokenizeSuccessDecisionHandler = { newClientToken, err ->
|
|
101
|
+
when {
|
|
102
|
+
err != null -> decisionHandler.handleFailure(err.ifBlank { null })
|
|
103
|
+
newClientToken != null -> decisionHandler.continueWithNewClientToken(newClientToken)
|
|
104
|
+
else -> decisionHandler.handleSuccess()
|
|
130
105
|
}
|
|
131
106
|
}
|
|
132
|
-
|
|
107
|
+
sendEvent?.invoke(PrimerEvents.ON_TOKENIZE_SUCCESS.eventName, request)
|
|
108
|
+
} else {
|
|
109
|
+
sendError?.invoke(
|
|
110
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
111
|
+
errorTo "Callback [onTokenizeSuccess] should be implemented."
|
|
112
|
+
)
|
|
133
113
|
}
|
|
134
114
|
}
|
|
135
115
|
|
|
136
|
-
fun
|
|
137
|
-
|
|
138
|
-
|
|
116
|
+
override fun onResumeSuccess(
|
|
117
|
+
resumeToken: String,
|
|
118
|
+
decisionHandler: PrimerResumeDecisionHandler
|
|
119
|
+
) {
|
|
120
|
+
if (implementedRNCallbacks?.isOnResumeSuccessImplemented == true) {
|
|
121
|
+
resumeSuccessDecisionHandler = { newClientToken, err ->
|
|
122
|
+
when {
|
|
123
|
+
err != null -> decisionHandler.handleFailure(err.ifBlank { null })
|
|
124
|
+
newClientToken != null -> decisionHandler.continueWithNewClientToken(newClientToken)
|
|
125
|
+
else -> decisionHandler.handleSuccess()
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
val resumeToken = mapOf(Keys.RESUME_TOKEN to resumeToken)
|
|
130
|
+
sendEvent?.invoke(
|
|
131
|
+
PrimerEvents.ON_RESUME_SUCCESS.eventName,
|
|
132
|
+
JSONObject(Json.encodeToString(resumeToken))
|
|
133
|
+
)
|
|
134
|
+
} else {
|
|
135
|
+
sendError?.invoke(
|
|
136
|
+
ErrorTypeRN.NativeBridgeFailed
|
|
137
|
+
errorTo "Callback [onResumeSuccess] should be implemented."
|
|
138
|
+
)
|
|
139
|
+
}
|
|
139
140
|
}
|
|
140
141
|
|
|
141
|
-
fun
|
|
142
|
-
if (implementedRNCallbacks?.
|
|
143
|
-
|
|
142
|
+
override fun onDismissed() {
|
|
143
|
+
if (implementedRNCallbacks?.isOnDismissImplemented == true) {
|
|
144
|
+
sendEvent?.invoke(
|
|
145
|
+
PrimerEvents.ON_DISMISS.eventName,
|
|
146
|
+
null
|
|
147
|
+
)
|
|
144
148
|
}
|
|
149
|
+
removeCallbacksAndHandlers()
|
|
145
150
|
}
|
|
146
151
|
|
|
147
|
-
fun
|
|
148
|
-
|
|
152
|
+
override fun onFailed(
|
|
153
|
+
error: PrimerError,
|
|
154
|
+
checkoutData: PrimerCheckoutData?,
|
|
155
|
+
errorHandler: PrimerErrorDecisionHandler?
|
|
156
|
+
) {
|
|
157
|
+
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
158
|
+
primerErrorDecisionHandler = { errorMessage: String? ->
|
|
159
|
+
errorHandler?.showErrorMessage(errorMessage?.ifBlank { null })
|
|
160
|
+
}
|
|
161
|
+
sendErrorWithCheckoutData?.invoke(
|
|
162
|
+
PrimerErrorRN(
|
|
163
|
+
error.errorId,
|
|
164
|
+
error.description,
|
|
165
|
+
error.recoverySuggestion
|
|
166
|
+
), checkoutData?.toPrimerCheckoutDataRN()
|
|
167
|
+
)
|
|
168
|
+
} else {
|
|
169
|
+
super.onFailed(error, checkoutData, errorHandler)
|
|
170
|
+
}
|
|
149
171
|
}
|
|
150
172
|
|
|
151
|
-
fun
|
|
152
|
-
if (implementedRNCallbacks?.
|
|
153
|
-
|
|
173
|
+
override fun onFailed(error: PrimerError, errorHandler: PrimerErrorDecisionHandler?) {
|
|
174
|
+
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
175
|
+
primerErrorDecisionHandler = { errorMessage: String? ->
|
|
176
|
+
errorHandler?.showErrorMessage(errorMessage)
|
|
177
|
+
}
|
|
178
|
+
sendError?.invoke(PrimerErrorRN(error.errorId, error.description, error.recoverySuggestion))
|
|
154
179
|
} else {
|
|
155
|
-
|
|
156
|
-
errorTo "Callback [onResumeSuccess] should had been implemented.")
|
|
180
|
+
super.onFailed(error, errorHandler)
|
|
157
181
|
}
|
|
158
182
|
}
|
|
159
183
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
184
|
+
// region tokenization handlers
|
|
185
|
+
fun handleTokenizationNewClientToken(newClientToken: String) {
|
|
186
|
+
tokenizeSuccessDecisionHandler?.invoke(newClientToken, null)
|
|
187
|
+
tokenizeSuccessDecisionHandler = null
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
fun handleTokenizationSuccess() {
|
|
191
|
+
tokenizeSuccessDecisionHandler?.invoke(null, null)
|
|
192
|
+
tokenizeSuccessDecisionHandler = null
|
|
165
193
|
}
|
|
166
194
|
|
|
195
|
+
fun handleTokenizationFailure(errorMessage: String) {
|
|
196
|
+
tokenizeSuccessDecisionHandler?.invoke(
|
|
197
|
+
null,
|
|
198
|
+
errorMessage.ifBlank { null }
|
|
199
|
+
)
|
|
200
|
+
tokenizeSuccessDecisionHandler = null
|
|
201
|
+
}
|
|
202
|
+
// endregion
|
|
203
|
+
|
|
204
|
+
// region resume handlers
|
|
205
|
+
fun handleResumeNewClientToken(newClientToken: String) {
|
|
206
|
+
resumeSuccessDecisionHandler?.invoke(newClientToken, null)
|
|
207
|
+
resumeSuccessDecisionHandler = null
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
fun handleResumeSuccess() {
|
|
211
|
+
resumeSuccessDecisionHandler?.invoke(null, null)
|
|
212
|
+
resumeSuccessDecisionHandler = null
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
fun handleResumeFailure(errorMessage: String) {
|
|
216
|
+
resumeSuccessDecisionHandler?.invoke(
|
|
217
|
+
null,
|
|
218
|
+
errorMessage.ifBlank { null }
|
|
219
|
+
)
|
|
220
|
+
resumeSuccessDecisionHandler = null
|
|
221
|
+
}
|
|
222
|
+
// endregion
|
|
223
|
+
|
|
224
|
+
// region payment create handlers
|
|
225
|
+
fun handlePaymentCreationContinue() {
|
|
226
|
+
paymentCreationDecisionHandler?.invoke(null)
|
|
227
|
+
paymentCreationDecisionHandler = null
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
fun handlePaymentCreationAbort(errorMessage: String) {
|
|
231
|
+
paymentCreationDecisionHandler?.invoke(errorMessage)
|
|
232
|
+
paymentCreationDecisionHandler = null
|
|
233
|
+
}
|
|
234
|
+
// endregion
|
|
235
|
+
|
|
236
|
+
// region error handlers
|
|
237
|
+
fun handleErrorMessage(errorMessage: String) {
|
|
238
|
+
primerErrorDecisionHandler?.invoke(errorMessage)
|
|
239
|
+
primerErrorDecisionHandler = null
|
|
240
|
+
}
|
|
241
|
+
// endregion
|
|
242
|
+
|
|
167
243
|
fun setImplementedCallbacks(implementedRNCallbacks: PrimerImplementedRNCallbacks) {
|
|
168
244
|
this.implementedRNCallbacks = implementedRNCallbacks
|
|
169
245
|
}
|
|
246
|
+
|
|
247
|
+
private fun removeCallbacksAndHandlers() {
|
|
248
|
+
paymentCreationDecisionHandler = null
|
|
249
|
+
primerErrorDecisionHandler = null
|
|
250
|
+
tokenizeSuccessDecisionHandler = null
|
|
251
|
+
resumeSuccessDecisionHandler = null
|
|
252
|
+
implementedRNCallbacks = null
|
|
253
|
+
}
|
|
170
254
|
}
|
|
@@ -4,26 +4,15 @@ import com.facebook.react.ReactPackage
|
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
6
|
import com.facebook.react.uimanager.ViewManager
|
|
7
|
-
import kotlinx.serialization.json.Json
|
|
8
7
|
|
|
9
|
-
class ReactNativePackage : ReactPackage {
|
|
10
|
-
|
|
11
|
-
private val json = Json { ignoreUnknownKeys = true }
|
|
12
8
|
|
|
9
|
+
class ReactNativePackage : ReactPackage {
|
|
13
10
|
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
|
|
14
|
-
return listOf(
|
|
15
|
-
PrimerRN(reactContext),
|
|
16
|
-
PrimerHeadlessUniversalCheckout(reactContext, json)
|
|
17
|
-
)
|
|
11
|
+
return listOf(PrimerRN(reactContext))
|
|
18
12
|
}
|
|
19
13
|
|
|
20
14
|
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
21
|
-
return
|
|
22
|
-
PrimerCardNumberEditTextManager(),
|
|
23
|
-
PrimerCardholderNameEditTextManager(),
|
|
24
|
-
PrimerExpiryEditTextManager(),
|
|
25
|
-
PrimerCvvEditTextManager(),
|
|
26
|
-
)
|
|
15
|
+
return emptyList()
|
|
27
16
|
}
|
|
28
17
|
}
|
|
29
18
|
|
|
@@ -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,14 @@ 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
|
-
InitFailed,
|
|
17
|
-
CheckoutFlowFailed,
|
|
18
|
-
TokenizationFailed,
|
|
19
|
-
AssetMissing,
|
|
20
|
-
AssetMismatch
|
|
13
|
+
enum class ErrorTypeRN(val errorId: String) {
|
|
14
|
+
NativeBridgeFailed("native-bridge"),
|
|
21
15
|
}
|
|
@@ -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)
|