@primer-io/react-native 2.21.1 → 2.23.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 +23 -6
- package/android/config/coverage-scripts/kover.gradle +26 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +1 -2
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +10 -8
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +12 -10
- package/android/src/main/java/com/primerioreactnative/PrimerRNViewModelStoreOwner.kt +9 -0
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +9 -1
- package/android/src/main/java/com/primerioreactnative/components/events/PrimerHeadlessUniversalCheckoutComponentEvent.kt +10 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +8 -13
- package/android/src/main/java/com/primerioreactnative/components/manager/banks/PrimerRNHeadlessUniversalCheckoutBanksComponent.kt +284 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerKlarnaPaymentViewManager.kt +103 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt +334 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +10 -8
- package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/components/manager/vault/PrimerRNHeadlessUniversalCheckoutVaultManager.kt +5 -9
- package/android/src/main/java/com/primerioreactnative/datamodels/NamedComponentStepRN.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/NamedComponentValidatableDataRN.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIssuingBankRN.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksCollectableDataRN.kt +17 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/banks/BanksStepRN.kt +20 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksCollectableData.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/banks/BanksStep.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCategoryRN.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentCollectableDataRN.kt +21 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/klarna/KlarnaPaymentStepRN.kt +31 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerError.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerIssuingBank.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategory.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategoryRN.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCollectableData.kt +14 -0
- package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentStep.kt +21 -0
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +3 -2
- package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +8 -1
- package/android/src/test/java/com/primerioreactnative/utils/ErrorHelperTest.kt +24 -0
- package/ios/ReactNative-Bridging-Header.h +1 -0
- package/ios/Sources/DataModels/Banks Component/RNTBanksCollectableData.swift +42 -0
- package/ios/Sources/DataModels/Banks Component/RNTBanksStep.swift +36 -0
- package/ios/Sources/DataModels/Klarna Component/PrimerHeadlessUniversalCheckoutComponentEvent.swift +36 -0
- package/ios/Sources/DataModels/Klarna Component/RNTKlarnaCollectableData.swift +36 -0
- package/ios/Sources/DataModels/Klarna Component/RNTKlarnaPaymentCategory.swift +33 -0
- package/ios/Sources/DataModels/Klarna Component/RNTKlarnaStep.swift +61 -0
- package/ios/Sources/DataModels/Klarna Component/RNTPrimerError.swift +67 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/KlarnaPaymentView Manager/RNTPrimerKlarnaPaymentViewManager.h +14 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/KlarnaPaymentView Manager/RNTPrimerKlarnaPaymentViewManager.m +25 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.m +27 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +283 -0
- package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.m +25 -0
- package/ios/Sources/Headless Universal Checkout/Managers/RNTRedirectManager.swift +182 -0
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +5 -5
- package/ios/Sources/RNTPrimer.swift +12 -8
- package/ios/Sources/version.swift +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +9 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +103 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +99 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +4 -4
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js +8 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +3 -2
- package/lib/commonjs/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/commonjs/Primer.js +2 -1
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/index.js +186 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/IssuingBank.js +2 -0
- package/lib/commonjs/models/IssuingBank.js.map +1 -0
- package/lib/commonjs/models/NamedComponentStep.js +2 -0
- package/lib/commonjs/models/NamedComponentStep.js.map +1 -0
- package/lib/commonjs/models/NamedComponentValidatableData.js +2 -0
- package/lib/commonjs/models/NamedComponentValidatableData.js.map +1 -0
- package/lib/commonjs/models/PrimerComponentDataValidation.js +6 -0
- package/lib/commonjs/models/PrimerComponentDataValidation.js.map +1 -0
- package/lib/commonjs/models/PrimerError.js +2 -1
- package/lib/commonjs/models/PrimerError.js.map +1 -1
- package/lib/commonjs/models/banks/BanksCollectableData.js +6 -0
- package/lib/commonjs/models/banks/BanksCollectableData.js.map +1 -0
- package/lib/commonjs/models/banks/BanksSteps.js +6 -0
- package/lib/commonjs/models/banks/BanksSteps.js.map +1 -0
- package/lib/commonjs/models/klarna/KlarnaPaymentCategory.js +2 -0
- package/lib/commonjs/models/klarna/KlarnaPaymentCategory.js.map +1 -0
- package/lib/commonjs/models/klarna/KlarnaPaymentCollectableData.js +6 -0
- package/lib/commonjs/models/klarna/KlarnaPaymentCollectableData.js.map +1 -0
- package/lib/commonjs/models/klarna/KlarnaPaymentSteps.js +6 -0
- package/lib/commonjs/models/klarna/KlarnaPaymentSteps.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js +3 -0
- package/lib/module/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +96 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +92 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js +4 -4
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.js.map +1 -1
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js +2 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js +3 -2
- package/lib/module/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/module/Primer.js +2 -1
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/index.js +24 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/IssuingBank.js +2 -0
- package/lib/module/models/IssuingBank.js.map +1 -0
- package/lib/module/models/NamedComponentStep.js +2 -0
- package/lib/module/models/NamedComponentStep.js.map +1 -0
- package/lib/module/models/NamedComponentValidatableData.js +2 -0
- package/lib/module/models/NamedComponentValidatableData.js.map +1 -0
- package/lib/module/models/PrimerComponentDataValidation.js +2 -0
- package/lib/module/models/PrimerComponentDataValidation.js.map +1 -0
- package/lib/module/models/PrimerError.js +2 -1
- package/lib/module/models/PrimerError.js.map +1 -1
- package/lib/module/models/banks/BanksCollectableData.js +2 -0
- package/lib/module/models/banks/BanksCollectableData.js.map +1 -0
- package/lib/module/models/banks/BanksSteps.js +2 -0
- package/lib/module/models/banks/BanksSteps.js.map +1 -0
- package/lib/module/models/klarna/KlarnaPaymentCategory.js +2 -0
- package/lib/module/models/klarna/KlarnaPaymentCategory.js.map +1 -0
- package/lib/module/models/klarna/KlarnaPaymentCollectableData.js +2 -0
- package/lib/module/models/klarna/KlarnaPaymentCollectableData.js.map +1 -0
- package/lib/module/models/klarna/KlarnaPaymentSteps.js +2 -0
- package/lib/module/models/klarna/KlarnaPaymentSteps.js.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts +2 -0
- package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts +54 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts +50 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.d.ts +3 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.d.ts.map +1 -1
- package/lib/typescript/Primer.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +26 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/IssuingBank.d.ts +9 -0
- package/lib/typescript/models/IssuingBank.d.ts.map +1 -0
- package/lib/typescript/models/NamedComponentStep.d.ts +12 -0
- package/lib/typescript/models/NamedComponentStep.d.ts.map +1 -0
- package/lib/typescript/models/NamedComponentValidatableData.d.ts +12 -0
- package/lib/typescript/models/NamedComponentValidatableData.d.ts.map +1 -0
- package/lib/typescript/models/PrimerComponentDataValidation.d.ts +54 -0
- package/lib/typescript/models/PrimerComponentDataValidation.d.ts.map +1 -0
- package/lib/typescript/models/PrimerError.d.ts +2 -6
- package/lib/typescript/models/PrimerError.d.ts.map +1 -1
- package/lib/typescript/models/PrimerValidationError.d.ts +3 -3
- package/lib/typescript/models/PrimerValidationError.d.ts.map +1 -1
- package/lib/typescript/models/banks/BanksCollectableData.d.ts +23 -0
- package/lib/typescript/models/banks/BanksCollectableData.d.ts.map +1 -0
- package/lib/typescript/models/banks/BanksSteps.d.ts +20 -0
- package/lib/typescript/models/banks/BanksSteps.d.ts.map +1 -0
- package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts +24 -0
- package/lib/typescript/models/klarna/KlarnaPaymentCategory.d.ts.map +1 -0
- package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts +24 -0
- package/lib/typescript/models/klarna/KlarnaPaymentCollectableData.d.ts.map +1 -0
- package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts +36 -0
- package/lib/typescript/models/klarna/KlarnaPaymentSteps.d.ts.map +1 -0
- package/package.json +4 -9
- package/primer-io-react-native.podspec +1 -1
- package/src/HeadlessUniversalCheckout/Components/PrimerKlarnaPaymentView.tsx +5 -0
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +161 -0
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.ts +147 -0
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/RawDataManager.ts +4 -4
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/Utils/EventType.ts +10 -0
- package/src/HeadlessUniversalCheckout/PrimerHeadlessUniversalCheckout.ts +3 -2
- package/src/Primer.ts +2 -1
- package/src/index.tsx +62 -62
- package/src/models/IssuingBank.ts +8 -0
- package/src/models/NamedComponentStep.ts +11 -0
- package/src/models/NamedComponentValidatableData.ts +11 -0
- package/src/models/PrimerComponentDataValidation.ts +60 -0
- package/src/models/PrimerError.ts +8 -14
- package/src/models/PrimerValidationError.ts +3 -3
- package/src/models/banks/BanksCollectableData.ts +25 -0
- package/src/models/banks/BanksSteps.ts +22 -0
- package/src/models/klarna/KlarnaPaymentCategory.ts +23 -0
- package/src/models/klarna/KlarnaPaymentCollectableData.ts +26 -0
- package/src/models/klarna/KlarnaPaymentSteps.ts +36 -0
- /package/ios/Sources/Headless Universal Checkout/Managers/{RNTAssetsManager.m → Assets Manager/RNTAssetsManager.m} +0 -0
- /package/ios/Sources/Headless Universal Checkout/Managers/{RNTAssetsManager.swift → Assets Manager/RNTAssetsManager.swift} +0 -0
package/android/build.gradle
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
buildscript {
|
|
2
2
|
// Buildscript is evaluated before everything else so we can't use getExtOrDefault
|
|
3
3
|
def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['ReactNative_kotlinVersion']
|
|
4
|
-
|
|
4
|
+
def kover_version = '0.7.6'
|
|
5
5
|
repositories {
|
|
6
6
|
google()
|
|
7
7
|
mavenCentral()
|
|
@@ -9,16 +9,18 @@ buildscript {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
dependencies {
|
|
12
|
-
classpath 'com.android.tools.build:gradle:
|
|
12
|
+
classpath 'com.android.tools.build:gradle:8.2.2'
|
|
13
13
|
// noinspection DifferentKotlinGradleVersion
|
|
14
14
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
15
15
|
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
|
16
|
+
classpath "org.jetbrains.kotlinx:kover-gradle-plugin:$kover_version"
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
apply plugin: 'com.android.library'
|
|
20
21
|
apply plugin: 'kotlin-android'
|
|
21
22
|
apply plugin: 'kotlinx-serialization'
|
|
23
|
+
apply from: "./config/coverage-scripts/kover.gradle"
|
|
22
24
|
|
|
23
25
|
def getExtOrDefault(name) {
|
|
24
26
|
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['ReactNative_' + name]
|
|
@@ -35,6 +37,8 @@ android {
|
|
|
35
37
|
minSdkVersion 21
|
|
36
38
|
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
|
|
37
39
|
|
|
40
|
+
testInstrumentationRunnerArguments runnerBuilder: 'de.mannodermaus.junit5.AndroidJUnit5Builder'
|
|
41
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
buildTypes {
|
|
@@ -50,12 +54,19 @@ android {
|
|
|
50
54
|
disable 'GradleCompatible'
|
|
51
55
|
}
|
|
52
56
|
compileOptions {
|
|
53
|
-
sourceCompatibility JavaVersion.
|
|
54
|
-
targetCompatibility JavaVersion.
|
|
57
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
58
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
55
59
|
}
|
|
56
60
|
kotlinOptions {
|
|
57
61
|
freeCompilerArgs += '-Xjvm-default=all'
|
|
58
62
|
}
|
|
63
|
+
testOptions {
|
|
64
|
+
execution = 'ANDROIDX_TEST_ORCHESTRATOR'
|
|
65
|
+
|
|
66
|
+
unitTests.all {
|
|
67
|
+
useJUnitPlatform()
|
|
68
|
+
}
|
|
69
|
+
}
|
|
59
70
|
}
|
|
60
71
|
|
|
61
72
|
repositories {
|
|
@@ -135,6 +146,12 @@ dependencies {
|
|
|
135
146
|
// noinspection GradleDynamicVersion
|
|
136
147
|
api 'com.facebook.react:react-native:+'
|
|
137
148
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
138
|
-
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.
|
|
139
|
-
implementation 'io.primer:android:2.27.
|
|
149
|
+
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
|
|
150
|
+
implementation 'io.primer:android:2.27.2'
|
|
151
|
+
|
|
152
|
+
testImplementation 'io.mockk:mockk:1.13.10'
|
|
153
|
+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
|
|
154
|
+
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
|
|
155
|
+
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
|
|
156
|
+
testImplementation 'de.mannodermaus.junit5:android-test-runner:1.3.0'
|
|
140
157
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
apply plugin: 'org.jetbrains.kotlinx.kover'
|
|
2
|
+
|
|
3
|
+
subprojects {
|
|
4
|
+
koverReport {
|
|
5
|
+
filters {
|
|
6
|
+
excludes {
|
|
7
|
+
packages(
|
|
8
|
+
'**.example.**',
|
|
9
|
+
)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
androidReports("release") {
|
|
13
|
+
verify {
|
|
14
|
+
rule {
|
|
15
|
+
// add lower bound for percentage of covered lines
|
|
16
|
+
minBound(80)
|
|
17
|
+
|
|
18
|
+
// add upper bound for percentage of covered lines
|
|
19
|
+
maxBound(100)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
tasks["koverXmlReportRelease"].dependsOn "testReleaseUnitTest"
|
|
26
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
#Tue Feb 23 12:42:30 CET 2021
|
|
2
1
|
distributionBase=GRADLE_USER_HOME
|
|
3
2
|
distributionPath=wrapper/dists
|
|
4
|
-
distributionUrl=https\://services.gradle.org/distributions/gradle-
|
|
3
|
+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
|
|
5
4
|
zipStoreBase=GRADLE_USER_HOME
|
|
6
5
|
zipStorePath=wrapper/dists
|
|
@@ -5,8 +5,8 @@ import com.facebook.react.bridge.*
|
|
|
5
5
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
6
6
|
import com.primerioreactnative.datamodels.*
|
|
7
7
|
import com.primerioreactnative.utils.PrimerImplementedRNCallbacks
|
|
8
|
-
import com.primerioreactnative.utils.convertJsonToMap
|
|
9
8
|
import com.primerioreactnative.utils.errorTo
|
|
9
|
+
import com.primerioreactnative.utils.toWritableMap
|
|
10
10
|
import io.primer.android.Primer
|
|
11
11
|
import io.primer.android.data.settings.PrimerSettings
|
|
12
12
|
import kotlinx.serialization.decodeFromString
|
|
@@ -202,7 +202,7 @@ class PrimerRN(reactContext: ReactApplicationContext, private val json: Json) :
|
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
private fun prepareData(data: JSONObject?): WritableMap {
|
|
205
|
-
return data
|
|
205
|
+
return data.toWritableMap()
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
|
|
@@ -211,10 +211,11 @@ class PrimerRNEventListener : PrimerCheckoutListener {
|
|
|
211
211
|
}
|
|
212
212
|
sendErrorWithCheckoutData?.invoke(
|
|
213
213
|
PrimerErrorRN(
|
|
214
|
-
error.errorId,
|
|
215
|
-
error.
|
|
216
|
-
error.
|
|
217
|
-
error.
|
|
214
|
+
errorId = error.errorId,
|
|
215
|
+
errorCode = error.errorCode,
|
|
216
|
+
description = error.description,
|
|
217
|
+
diagnosticsId = error.diagnosticsId,
|
|
218
|
+
recoverySuggestion = error.recoverySuggestion
|
|
218
219
|
), checkoutData?.toPrimerCheckoutDataRN()
|
|
219
220
|
)
|
|
220
221
|
} else {
|
|
@@ -229,10 +230,11 @@ class PrimerRNEventListener : PrimerCheckoutListener {
|
|
|
229
230
|
}
|
|
230
231
|
sendError?.invoke(
|
|
231
232
|
PrimerErrorRN(
|
|
232
|
-
error.errorId,
|
|
233
|
-
error.
|
|
234
|
-
error.
|
|
235
|
-
error.
|
|
233
|
+
errorId = error.errorId,
|
|
234
|
+
errorCode = error.errorCode,
|
|
235
|
+
description = error.description,
|
|
236
|
+
diagnosticsId = error.diagnosticsId,
|
|
237
|
+
recoverySuggestion = error.recoverySuggestion
|
|
236
238
|
)
|
|
237
239
|
)
|
|
238
240
|
} else {
|
|
@@ -6,8 +6,8 @@ import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
|
6
6
|
import com.primerioreactnative.datamodels.*
|
|
7
7
|
import com.primerioreactnative.components.events.PrimerHeadlessUniversalCheckoutEvent
|
|
8
8
|
import com.primerioreactnative.utils.PrimerHeadlessUniversalCheckoutImplementedRNCallbacks
|
|
9
|
-
import com.primerioreactnative.utils.convertJsonToMap
|
|
10
9
|
import com.primerioreactnative.utils.errorTo
|
|
10
|
+
import com.primerioreactnative.utils.toWritableMap
|
|
11
11
|
import io.primer.android.ExperimentalPrimerApi
|
|
12
12
|
import io.primer.android.components.PrimerHeadlessUniversalCheckout
|
|
13
13
|
import kotlinx.serialization.decodeFromString
|
|
@@ -156,7 +156,7 @@ class PrimerRNHeadlessUniversalCheckout(
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
private fun prepareData(data: JSONObject?): WritableMap {
|
|
159
|
-
return data
|
|
159
|
+
return data.toWritableMap()
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
private companion object {
|
package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt
CHANGED
|
@@ -10,8 +10,8 @@ import com.primerioreactnative.extensions.toPrimerCheckoutDataRN
|
|
|
10
10
|
import com.primerioreactnative.extensions.toPrimerClientSessionRN
|
|
11
11
|
import com.primerioreactnative.extensions.toPrimerPaymentMethodDataRN
|
|
12
12
|
import com.primerioreactnative.utils.PrimerHeadlessUniversalCheckoutImplementedRNCallbacks
|
|
13
|
-
import com.primerioreactnative.utils.convertJsonToMap
|
|
14
13
|
import com.primerioreactnative.utils.errorTo
|
|
14
|
+
import com.primerioreactnative.utils.toWritableMap
|
|
15
15
|
import io.primer.android.completion.PrimerHeadlessUniversalCheckoutResumeDecisionHandler
|
|
16
16
|
import io.primer.android.completion.PrimerPaymentCreationDecisionHandler
|
|
17
17
|
import io.primer.android.components.PrimerHeadlessUniversalCheckoutListener
|
|
@@ -61,7 +61,7 @@ class PrimerRNHeadlessUniversalCheckoutListener : PrimerHeadlessUniversalCheckou
|
|
|
61
61
|
availablePaymentMethods
|
|
62
62
|
)
|
|
63
63
|
successCallback?.resolve(
|
|
64
|
-
|
|
64
|
+
availablePaymentMethods.toWritableMap()
|
|
65
65
|
)
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -264,10 +264,11 @@ class PrimerRNHeadlessUniversalCheckoutListener : PrimerHeadlessUniversalCheckou
|
|
|
264
264
|
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
265
265
|
sendErrorWithCheckoutData?.invoke(
|
|
266
266
|
PrimerErrorRN(
|
|
267
|
-
error.errorId,
|
|
268
|
-
error.
|
|
269
|
-
error.
|
|
270
|
-
error.
|
|
267
|
+
errorId = error.errorId,
|
|
268
|
+
errorCode = error.errorCode,
|
|
269
|
+
description = error.description,
|
|
270
|
+
diagnosticsId = error.diagnosticsId,
|
|
271
|
+
recoverySuggestion = error.recoverySuggestion
|
|
271
272
|
), checkoutData?.toPrimerCheckoutDataRN()
|
|
272
273
|
)
|
|
273
274
|
} else {
|
|
@@ -279,10 +280,11 @@ class PrimerRNHeadlessUniversalCheckoutListener : PrimerHeadlessUniversalCheckou
|
|
|
279
280
|
if (implementedRNCallbacks?.isOnErrorImplemented == true) {
|
|
280
281
|
sendError?.invoke(
|
|
281
282
|
PrimerErrorRN(
|
|
282
|
-
error.errorId,
|
|
283
|
-
error.
|
|
284
|
-
error.
|
|
285
|
-
error.
|
|
283
|
+
errorId = error.errorId,
|
|
284
|
+
errorCode = error.errorCode,
|
|
285
|
+
description = error.description,
|
|
286
|
+
diagnosticsId = error.diagnosticsId,
|
|
287
|
+
recoverySuggestion = error.recoverySuggestion
|
|
286
288
|
)
|
|
287
289
|
)
|
|
288
290
|
} else {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package com.primerioreactnative
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
import androidx.lifecycle.ViewModelStoreOwner
|
|
5
|
+
import androidx.lifecycle.ViewModelStore
|
|
6
|
+
|
|
7
|
+
class PrimerRNViewModelStoreOwner : ViewModelStoreOwner {
|
|
8
|
+
override val viewModelStore: ViewModelStore = ViewModelStore()
|
|
9
|
+
}
|
|
@@ -8,6 +8,9 @@ import com.primerioreactnative.components.manager.asset.PrimerRNHeadlessUniversa
|
|
|
8
8
|
import com.primerioreactnative.components.manager.nativeUi.PrimerRNHeadlessUniversalCheckoutNativeUiManager
|
|
9
9
|
import com.primerioreactnative.components.manager.raw.PrimerRNHeadlessUniversalCheckoutRawManager
|
|
10
10
|
import com.primerioreactnative.components.manager.vault.PrimerRNHeadlessUniversalCheckoutVaultManager
|
|
11
|
+
import com.primerioreactnative.components.manager.redirect.PrimerRNHeadlessUniversalCheckoutBanksComponent
|
|
12
|
+
import com.primerioreactnative.components.manager.klarna.PrimerRNHeadlessUniversalCheckoutKlarnaComponent
|
|
13
|
+
import com.primerioreactnative.components.manager.klarna.PrimerKlarnaPaymentViewManager
|
|
11
14
|
import kotlinx.serialization.json.Json
|
|
12
15
|
|
|
13
16
|
class ReactNativePackage : ReactPackage {
|
|
@@ -21,7 +24,11 @@ class ReactNativePackage : ReactPackage {
|
|
|
21
24
|
PrimerRNHeadlessUniversalCheckoutRawManager(reactContext, json),
|
|
22
25
|
PrimerRNHeadlessUniversalCheckoutNativeUiManager(reactContext),
|
|
23
26
|
PrimerRNHeadlessUniversalCheckoutAssetManager(reactContext),
|
|
24
|
-
PrimerRNHeadlessUniversalCheckoutVaultManager(reactContext, json)
|
|
27
|
+
PrimerRNHeadlessUniversalCheckoutVaultManager(reactContext, json),
|
|
28
|
+
PrimerRNHeadlessUniversalCheckoutKlarnaComponent(reactContext),
|
|
29
|
+
//region Component with redirect components
|
|
30
|
+
PrimerRNHeadlessUniversalCheckoutBanksComponent(reactContext)
|
|
31
|
+
//endregion
|
|
25
32
|
)
|
|
26
33
|
}
|
|
27
34
|
|
|
@@ -31,6 +38,7 @@ class ReactNativePackage : ReactPackage {
|
|
|
31
38
|
PrimerCardholderNameEditTextManager(),
|
|
32
39
|
PrimerExpiryEditTextManager(),
|
|
33
40
|
PrimerCvvEditTextManager(),
|
|
41
|
+
PrimerKlarnaPaymentViewManager(reactContext)
|
|
34
42
|
)
|
|
35
43
|
}
|
|
36
44
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
package com.primerioreactnative.components.events
|
|
2
|
+
|
|
3
|
+
internal enum class PrimerHeadlessUniversalCheckoutComponentEvent(val eventName: String) {
|
|
4
|
+
ON_STEP("onStep"),
|
|
5
|
+
ON_ERROR("onError"),
|
|
6
|
+
ON_IN_VALID("onInvalid"),
|
|
7
|
+
ON_VALID("onValid"),
|
|
8
|
+
ON_VALIDATING("onValidating"),
|
|
9
|
+
ON_VALIDATION_ERROR("onValidationError"),
|
|
10
|
+
}
|
|
@@ -13,8 +13,8 @@ import com.primerioreactnative.components.datamodels.manager.asset.PrimerRNPayme
|
|
|
13
13
|
import com.primerioreactnative.components.datamodels.manager.asset.PrimerRNPaymentMethodAssets
|
|
14
14
|
import com.primerioreactnative.components.datamodels.manager.asset.toPrimerRNPaymentMethodAsset
|
|
15
15
|
import com.primerioreactnative.datamodels.ErrorTypeRN
|
|
16
|
-
import com.primerioreactnative.utils.convertJsonToMap
|
|
17
16
|
import com.primerioreactnative.utils.errorTo
|
|
17
|
+
import com.primerioreactnative.utils.toWritableMap
|
|
18
18
|
import io.primer.android.ExperimentalPrimerApi
|
|
19
19
|
import io.primer.android.components.SdkUninitializedException
|
|
20
20
|
import io.primer.android.components.ui.assets.PrimerHeadlessUniversalCheckoutAssetsManager
|
|
@@ -52,13 +52,11 @@ internal class PrimerRNHeadlessUniversalCheckoutAssetManager(
|
|
|
52
52
|
drawableToBitmap(ContextCompat.getDrawable(reactContext, resourceId)!!),
|
|
53
53
|
)
|
|
54
54
|
promise.resolve(
|
|
55
|
-
|
|
56
|
-
JSONObject(
|
|
55
|
+
JSONObject(
|
|
57
56
|
Json.encodeToString(
|
|
58
57
|
PrimerCardNetworkAsset("file://${file.absolutePath}")
|
|
59
58
|
)
|
|
60
|
-
)
|
|
61
|
-
)
|
|
59
|
+
).toWritableMap()
|
|
62
60
|
)
|
|
63
61
|
}
|
|
64
62
|
} catch (e: SdkUninitializedException) {
|
|
@@ -78,8 +76,7 @@ internal class PrimerRNHeadlessUniversalCheckoutAssetManager(
|
|
|
78
76
|
paymentMethodTypeStr
|
|
79
77
|
)
|
|
80
78
|
promise.resolve(
|
|
81
|
-
|
|
82
|
-
JSONObject(
|
|
79
|
+
JSONObject(
|
|
83
80
|
Json.encodeToString(
|
|
84
81
|
PrimerRNPaymentMethodAssetWrapper(
|
|
85
82
|
paymentMethodAsset.toPrimerRNPaymentMethodAsset(
|
|
@@ -87,9 +84,8 @@ internal class PrimerRNHeadlessUniversalCheckoutAssetManager(
|
|
|
87
84
|
paymentMethodTypeStr
|
|
88
85
|
)
|
|
89
86
|
)
|
|
90
|
-
)
|
|
91
87
|
)
|
|
92
|
-
)
|
|
88
|
+
).toWritableMap()
|
|
93
89
|
)
|
|
94
90
|
} catch (e: SdkUninitializedException) {
|
|
95
91
|
promise.reject(ErrorTypeRN.UnitializedSdkSession.errorId, e.message, e)
|
|
@@ -111,18 +107,17 @@ internal class PrimerRNHeadlessUniversalCheckoutAssetManager(
|
|
|
111
107
|
promise.reject(exception.errorId, exception.description)
|
|
112
108
|
}
|
|
113
109
|
promise.resolve(
|
|
114
|
-
|
|
115
|
-
JSONObject(
|
|
110
|
+
JSONObject(
|
|
116
111
|
Json.encodeToString(
|
|
117
112
|
PrimerRNPaymentMethodAssets(paymentMethodAssets.map {
|
|
118
113
|
it.toPrimerRNPaymentMethodAsset(
|
|
119
114
|
reactContext,
|
|
120
115
|
it.paymentMethodType
|
|
121
116
|
)
|
|
122
|
-
}
|
|
117
|
+
}
|
|
123
118
|
)
|
|
124
119
|
)
|
|
125
|
-
)
|
|
120
|
+
).toWritableMap()
|
|
126
121
|
)
|
|
127
122
|
} catch (e: SdkUninitializedException) {
|
|
128
123
|
promise.reject(ErrorTypeRN.UnitializedSdkSession.errorId, e.message, e)
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
package com.primerioreactnative.components.manager.redirect
|
|
2
|
+
|
|
3
|
+
import androidx.lifecycle.LifecycleOwner
|
|
4
|
+
import androidx.lifecycle.ViewModelStoreOwner
|
|
5
|
+
import androidx.lifecycle.lifecycleScope
|
|
6
|
+
import com.facebook.react.bridge.Arguments
|
|
7
|
+
import com.facebook.react.bridge.Promise
|
|
8
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
9
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
10
|
+
import com.facebook.react.bridge.ReactMethod
|
|
11
|
+
import com.facebook.react.bridge.WritableMap
|
|
12
|
+
import com.facebook.react.bridge.WritableArray
|
|
13
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
14
|
+
import com.primerioreactnative.PrimerRNViewModelStoreOwner
|
|
15
|
+
import com.primerioreactnative.components.events.PrimerHeadlessUniversalCheckoutComponentEvent
|
|
16
|
+
import com.primerioreactnative.datamodels.ErrorTypeRN
|
|
17
|
+
import com.primerioreactnative.datamodels.PrimerValidationErrorRN
|
|
18
|
+
import com.primerioreactnative.datamodels.extensions.banks.toBankIdRN
|
|
19
|
+
import com.primerioreactnative.datamodels.extensions.banks.toFilterRN
|
|
20
|
+
import com.primerioreactnative.datamodels.extensions.banks.toLoadingRN
|
|
21
|
+
import com.primerioreactnative.datamodels.extensions.banks.toBanksRetrievedRN
|
|
22
|
+
import com.primerioreactnative.datamodels.NamedComponentStep
|
|
23
|
+
import com.primerioreactnative.extensions.toPrimerErrorRN
|
|
24
|
+
import com.primerioreactnative.extensions.toPrimerIssuingBankRN
|
|
25
|
+
import com.primerioreactnative.utils.convertJsonToMap
|
|
26
|
+
import com.primerioreactnative.utils.convertJsonToArray
|
|
27
|
+
import com.primerioreactnative.utils.errorTo
|
|
28
|
+
import io.primer.android.components.manager.banks.composable.BanksCollectableData
|
|
29
|
+
import io.primer.android.components.manager.banks.composable.BanksStep
|
|
30
|
+
import io.primer.android.components.manager.componentWithRedirect.PrimerHeadlessUniversalCheckoutComponentWithRedirectManager
|
|
31
|
+
import io.primer.android.components.manager.componentWithRedirect.component.BanksComponent
|
|
32
|
+
import io.primer.android.components.manager.core.composable.PrimerValidationStatus
|
|
33
|
+
import kotlinx.coroutines.CoroutineScope
|
|
34
|
+
import kotlinx.coroutines.Dispatchers
|
|
35
|
+
import kotlinx.coroutines.Job
|
|
36
|
+
import kotlinx.coroutines.SupervisorJob
|
|
37
|
+
import kotlinx.coroutines.coroutineScope
|
|
38
|
+
import kotlinx.coroutines.flow.collectLatest
|
|
39
|
+
import kotlinx.coroutines.launch
|
|
40
|
+
import kotlinx.serialization.encodeToString
|
|
41
|
+
import kotlinx.serialization.json.Json
|
|
42
|
+
import org.json.JSONArray
|
|
43
|
+
import org.json.JSONObject
|
|
44
|
+
|
|
45
|
+
class PrimerRNHeadlessUniversalCheckoutBanksComponent(
|
|
46
|
+
private val reactContext: ReactApplicationContext,
|
|
47
|
+
) : ReactContextBaseJavaModule(reactContext) {
|
|
48
|
+
override fun getName() = "RNTPrimerHeadlessUniversalCheckoutBanksComponent"
|
|
49
|
+
|
|
50
|
+
private var job: Job? = null
|
|
51
|
+
private var banksComponent: BanksComponent? = null
|
|
52
|
+
private var viewModelStoreOwner: ViewModelStoreOwner? = null
|
|
53
|
+
|
|
54
|
+
@ReactMethod
|
|
55
|
+
fun configure(paymentMethodType: String, promise: Promise) {
|
|
56
|
+
|
|
57
|
+
val currentViewModelStoreOwner =
|
|
58
|
+
reactContext.currentActivity as? ViewModelStoreOwner
|
|
59
|
+
?: run { PrimerRNViewModelStoreOwner() }
|
|
60
|
+
|
|
61
|
+
viewModelStoreOwner = currentViewModelStoreOwner
|
|
62
|
+
banksComponent =
|
|
63
|
+
PrimerHeadlessUniversalCheckoutComponentWithRedirectManager(currentViewModelStoreOwner)
|
|
64
|
+
.provide<BanksComponent>(paymentMethodType = paymentMethodType)
|
|
65
|
+
|
|
66
|
+
val lifecycleScope =
|
|
67
|
+
(reactContext.currentActivity as? LifecycleOwner)?.lifecycleScope
|
|
68
|
+
?: CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
69
|
+
|
|
70
|
+
job =
|
|
71
|
+
lifecycleScope.launch {
|
|
72
|
+
if (banksComponent == null) {
|
|
73
|
+
val exception = ErrorTypeRN.NativeBridgeFailed errorTo UNINITIALIZED_ERROR
|
|
74
|
+
promise.reject(exception.errorId, exception.description)
|
|
75
|
+
} else {
|
|
76
|
+
coroutineScope {
|
|
77
|
+
launch { configureBanksListener() }
|
|
78
|
+
|
|
79
|
+
launch { configureValidationListener() }
|
|
80
|
+
|
|
81
|
+
launch { configureErrorListener() }
|
|
82
|
+
promise.resolve(null)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@ReactMethod
|
|
89
|
+
fun start(promise: Promise) {
|
|
90
|
+
if (banksComponent == null) {
|
|
91
|
+
val exception = ErrorTypeRN.NativeBridgeFailed errorTo UNINITIALIZED_ERROR
|
|
92
|
+
promise.reject(exception.errorId, exception.description)
|
|
93
|
+
} else {
|
|
94
|
+
banksComponent?.start()
|
|
95
|
+
promise.resolve(null)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@ReactMethod
|
|
100
|
+
fun submit(promise: Promise) {
|
|
101
|
+
if (banksComponent == null) {
|
|
102
|
+
val exception = ErrorTypeRN.NativeBridgeFailed errorTo UNINITIALIZED_ERROR
|
|
103
|
+
promise.reject(exception.errorId, exception.description)
|
|
104
|
+
} else {
|
|
105
|
+
banksComponent?.submit()
|
|
106
|
+
promise.resolve(null)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@ReactMethod
|
|
111
|
+
fun onBankSelected(bankId: String, promise: Promise) {
|
|
112
|
+
if (banksComponent == null) {
|
|
113
|
+
val exception = ErrorTypeRN.NativeBridgeFailed errorTo UNINITIALIZED_ERROR
|
|
114
|
+
promise.reject(exception.errorId, exception.description)
|
|
115
|
+
} else {
|
|
116
|
+
banksComponent?.updateCollectedData(BanksCollectableData.BankId(bankId))
|
|
117
|
+
promise.resolve(null)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@ReactMethod
|
|
122
|
+
fun onBankFilterChange(filter: String, promise: Promise) {
|
|
123
|
+
if (banksComponent == null) {
|
|
124
|
+
val exception = ErrorTypeRN.NativeBridgeFailed errorTo UNINITIALIZED_ERROR
|
|
125
|
+
promise.reject(exception.errorId, exception.description)
|
|
126
|
+
} else {
|
|
127
|
+
banksComponent?.updateCollectedData(BanksCollectableData.Filter(filter))
|
|
128
|
+
promise.resolve(null)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private suspend fun configureErrorListener() {
|
|
133
|
+
banksComponent?.componentError?.collectLatest { error ->
|
|
134
|
+
sendEvent(
|
|
135
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_ERROR.eventName,
|
|
136
|
+
JSONObject().apply {
|
|
137
|
+
put(
|
|
138
|
+
"errors",
|
|
139
|
+
JSONArray().apply {
|
|
140
|
+
put(JSONObject(json.encodeToString(error.toPrimerErrorRN())))
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private suspend fun configureBanksListener() {
|
|
149
|
+
banksComponent?.componentStep?.collectLatest { banksStep ->
|
|
150
|
+
when (banksStep) {
|
|
151
|
+
is BanksStep.Loading -> {
|
|
152
|
+
sendEvent(
|
|
153
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_STEP.eventName,
|
|
154
|
+
JSONObject(json.encodeToString(banksStep.toLoadingRN()))
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
is BanksStep.BanksRetrieved -> {
|
|
158
|
+
sendEvent(
|
|
159
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_STEP.eventName,
|
|
160
|
+
JSONObject(
|
|
161
|
+
json.encodeToString(banksStep.toBanksRetrievedRN())
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private suspend fun configureValidationListener() {
|
|
170
|
+
banksComponent?.componentValidationStatus?.collectLatest { validationStatus ->
|
|
171
|
+
when (validationStatus) {
|
|
172
|
+
is PrimerValidationStatus.Validating -> {
|
|
173
|
+
sendEvent(
|
|
174
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_VALIDATING.eventName,
|
|
175
|
+
JSONObject().apply {
|
|
176
|
+
putData(validationStatus.collectableData as BanksCollectableData)
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
is PrimerValidationStatus.Invalid -> {
|
|
181
|
+
sendEvent(
|
|
182
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_IN_VALID.eventName,
|
|
183
|
+
JSONObject().apply {
|
|
184
|
+
putData(validationStatus.collectableData as BanksCollectableData)
|
|
185
|
+
put(
|
|
186
|
+
"errors",
|
|
187
|
+
JSONArray(
|
|
188
|
+
validationStatus.validationErrors.map {
|
|
189
|
+
JSONObject(
|
|
190
|
+
json.encodeToString(
|
|
191
|
+
PrimerValidationErrorRN(
|
|
192
|
+
it.errorId,
|
|
193
|
+
it.description,
|
|
194
|
+
it.diagnosticsId,
|
|
195
|
+
)
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
)
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
is PrimerValidationStatus.Valid -> {
|
|
205
|
+
sendEvent(
|
|
206
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_VALID.eventName,
|
|
207
|
+
JSONObject().apply {
|
|
208
|
+
putData(validationStatus.collectableData as BanksCollectableData)
|
|
209
|
+
}
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
is PrimerValidationStatus.Error -> {
|
|
213
|
+
sendEvent(
|
|
214
|
+
PrimerHeadlessUniversalCheckoutComponentEvent.ON_VALIDATION_ERROR.eventName,
|
|
215
|
+
JSONObject().apply {
|
|
216
|
+
putData(validationStatus.collectableData as BanksCollectableData)
|
|
217
|
+
put(
|
|
218
|
+
"errors",
|
|
219
|
+
JSONArray().apply {
|
|
220
|
+
put(JSONObject(json.encodeToString(validationStatus.error.toPrimerErrorRN())))
|
|
221
|
+
}
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private fun JSONObject.putData(collectableData: BanksCollectableData) {
|
|
231
|
+
put(
|
|
232
|
+
"data",
|
|
233
|
+
JSONObject(
|
|
234
|
+
json.encodeToString(
|
|
235
|
+
when (collectableData) {
|
|
236
|
+
is BanksCollectableData.BankId -> collectableData.toBankIdRN()
|
|
237
|
+
is BanksCollectableData.Filter -> collectableData.toFilterRN()
|
|
238
|
+
}
|
|
239
|
+
)
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
@ReactMethod fun addListener(eventName: String?) = Unit
|
|
245
|
+
|
|
246
|
+
@ReactMethod fun removeListeners(count: Int?) = Unit
|
|
247
|
+
|
|
248
|
+
private fun JSONObject?.toWritableMap(): WritableMap =
|
|
249
|
+
this?.let { convertJsonToMap(this) } ?: Arguments.createMap()
|
|
250
|
+
|
|
251
|
+
private fun JSONArray?.toWritableArray(): WritableArray =
|
|
252
|
+
this?.let { convertJsonToArray(this) } ?: Arguments.createArray()
|
|
253
|
+
|
|
254
|
+
private fun sendEvent(name: String, data: JSONObject?) {
|
|
255
|
+
reactApplicationContext
|
|
256
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
257
|
+
.emit(name, data.toWritableMap())
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
private fun sendEvent(name: String, data: JSONArray?) {
|
|
261
|
+
reactApplicationContext
|
|
262
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
263
|
+
.emit(name, data.toWritableArray())
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@ReactMethod
|
|
267
|
+
fun cleanUp(promise: Promise) {
|
|
268
|
+
job?.cancel()
|
|
269
|
+
job = null
|
|
270
|
+
banksComponent = null
|
|
271
|
+
viewModelStoreOwner?.viewModelStore?.clear()
|
|
272
|
+
promise.resolve(null)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
private companion object {
|
|
276
|
+
const val UNINITIALIZED_ERROR =
|
|
277
|
+
"""
|
|
278
|
+
The BanksComponent has not been initialized.
|
|
279
|
+
Make sure you have initialized the `BanksComponent` first.
|
|
280
|
+
"""
|
|
281
|
+
|
|
282
|
+
val json = Json { encodeDefaults = true }
|
|
283
|
+
}
|
|
284
|
+
}
|