@primer-io/react-native 2.26.3 → 2.28.0-beta.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/android/.project +6 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +5 -5
- package/android/build.gradle +1 -3
- package/android/src/main/AndroidManifest.xml +1 -4
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +3 -3
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +4 -3
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +2 -2
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +46 -9
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +4 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/ach/AchMandateManager.kt +70 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.kt +283 -0
- package/android/src/main/java/com/primerioreactnative/components/manager/banks/PrimerRNHeadlessUniversalCheckoutBanksComponent.kt +7 -37
- package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt +5 -31
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutAdditionalInfoRN.kt +17 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +9 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +53 -36
- package/android/src/main/java/com/primerioreactnative/datamodels/ach/AchUserDetailsCollectableDataRN.kt +22 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/ach/AchUserDetailsStepRN.kt +22 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsCollectableData.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsStep.kt +14 -0
- package/android/src/main/java/com/primerioreactnative/extensions/JSONExtensions.kt +41 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutAdditionalInfo.kt +4 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +5 -1
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +48 -15
- package/ios/Sources/DataModels/Ach Component/RNTAchUserDetailsCollectableData.swift +54 -0
- package/ios/Sources/DataModels/Ach Component/RNTAchUserDetailsStep.swift +40 -0
- package/ios/Sources/DataModels/PrimerCheckoutAdditionalInfoRN.swift +61 -0
- package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +58 -4
- package/ios/Sources/Headless Universal Checkout/Managers/Ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.m +28 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.swift +233 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Ach/RNTAchMandateManager.m +16 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Ach/RNTAchMandateManager.swift +53 -0
- package/ios/Sources/Headless Universal Checkout/Managers/Klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.swift +2 -2
- package/ios/Sources/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +55 -7
- package/ios/Sources/version.swift +1 -1
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +106 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js +38 -0
- package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js.map +1 -0
- package/lib/commonjs/index.js +70 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/ach/AchCollectableData.js +6 -0
- package/lib/commonjs/models/ach/AchCollectableData.js.map +1 -0
- package/lib/commonjs/models/ach/AchSteps.js +6 -0
- package/lib/commonjs/models/ach/AchSteps.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js +99 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.js.map +1 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js +31 -0
- package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/ach/AchCollectableData.js +2 -0
- package/lib/module/models/ach/AchCollectableData.js.map +1 -0
- package/lib/module/models/ach/AchSteps.js +2 -0
- package/lib/module/models/ach/AchSteps.js.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.d.ts +53 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.d.ts.map +1 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.d.ts +12 -0
- package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +8 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts +10 -0
- package/lib/typescript/models/PrimerCheckoutAdditionalInfo.d.ts.map +1 -1
- package/lib/typescript/models/PrimerClientSession.d.ts +7 -0
- package/lib/typescript/models/PrimerClientSession.d.ts.map +1 -1
- package/lib/typescript/models/PrimerSettings.d.ts +40 -1
- package/lib/typescript/models/PrimerSettings.d.ts.map +1 -1
- package/lib/typescript/models/ach/AchCollectableData.d.ts +25 -0
- package/lib/typescript/models/ach/AchCollectableData.d.ts.map +1 -0
- package/lib/typescript/models/ach/AchSteps.d.ts +28 -0
- package/lib/typescript/models/ach/AchSteps.d.ts.map +1 -0
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchManager.ts +158 -0
- package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/AchMandateManager.ts +32 -0
- package/src/index.tsx +8 -0
- package/src/models/PrimerCheckoutAdditionalInfo.ts +19 -5
- package/src/models/PrimerClientSession.ts +9 -1
- package/src/models/PrimerSettings.ts +46 -1
- package/src/models/ach/AchCollectableData.ts +29 -0
- package/src/models/ach/AchSteps.ts +29 -0
|
@@ -20,7 +20,6 @@ import com.primerioreactnative.datamodels.extensions.banks.toFilterRN
|
|
|
20
20
|
import com.primerioreactnative.datamodels.extensions.banks.toLoadingRN
|
|
21
21
|
import com.primerioreactnative.datamodels.extensions.banks.toBanksRetrievedRN
|
|
22
22
|
import com.primerioreactnative.datamodels.NamedComponentStep
|
|
23
|
-
import com.primerioreactnative.extensions.toPrimerErrorRN
|
|
24
23
|
import com.primerioreactnative.extensions.toPrimerIssuingBankRN
|
|
25
24
|
import com.primerioreactnative.utils.convertJsonToMap
|
|
26
25
|
import com.primerioreactnative.utils.convertJsonToArray
|
|
@@ -30,6 +29,10 @@ import io.primer.android.components.manager.banks.composable.BanksStep
|
|
|
30
29
|
import io.primer.android.components.manager.componentWithRedirect.PrimerHeadlessUniversalCheckoutComponentWithRedirectManager
|
|
31
30
|
import io.primer.android.components.manager.componentWithRedirect.component.BanksComponent
|
|
32
31
|
import io.primer.android.components.manager.core.composable.PrimerValidationStatus
|
|
32
|
+
import com.primerioreactnative.utils.toWritableArray
|
|
33
|
+
import com.primerioreactnative.utils.toWritableMap
|
|
34
|
+
import com.primerioreactnative.extensions.putErrors
|
|
35
|
+
import com.primerioreactnative.extensions.putValidationErrors
|
|
33
36
|
import kotlinx.coroutines.CoroutineScope
|
|
34
37
|
import kotlinx.coroutines.Dispatchers
|
|
35
38
|
import kotlinx.coroutines.Job
|
|
@@ -133,14 +136,7 @@ class PrimerRNHeadlessUniversalCheckoutBanksComponent(
|
|
|
133
136
|
banksComponent?.componentError?.collectLatest { error ->
|
|
134
137
|
sendEvent(
|
|
135
138
|
PrimerHeadlessUniversalCheckoutComponentEvent.ON_ERROR.eventName,
|
|
136
|
-
JSONObject().apply {
|
|
137
|
-
put(
|
|
138
|
-
"errors",
|
|
139
|
-
JSONArray().apply {
|
|
140
|
-
put(JSONObject(json.encodeToString(error.toPrimerErrorRN())))
|
|
141
|
-
}
|
|
142
|
-
)
|
|
143
|
-
}
|
|
139
|
+
JSONObject().apply { putErrors(error) }
|
|
144
140
|
)
|
|
145
141
|
}
|
|
146
142
|
}
|
|
@@ -182,22 +178,7 @@ class PrimerRNHeadlessUniversalCheckoutBanksComponent(
|
|
|
182
178
|
PrimerHeadlessUniversalCheckoutComponentEvent.ON_IN_VALID.eventName,
|
|
183
179
|
JSONObject().apply {
|
|
184
180
|
putData(validationStatus.collectableData as BanksCollectableData)
|
|
185
|
-
|
|
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
|
-
)
|
|
181
|
+
putValidationErrors(validationStatus.validationErrors)
|
|
201
182
|
}
|
|
202
183
|
)
|
|
203
184
|
}
|
|
@@ -214,12 +195,7 @@ class PrimerRNHeadlessUniversalCheckoutBanksComponent(
|
|
|
214
195
|
PrimerHeadlessUniversalCheckoutComponentEvent.ON_VALIDATION_ERROR.eventName,
|
|
215
196
|
JSONObject().apply {
|
|
216
197
|
putData(validationStatus.collectableData as BanksCollectableData)
|
|
217
|
-
|
|
218
|
-
"errors",
|
|
219
|
-
JSONArray().apply {
|
|
220
|
-
put(JSONObject(json.encodeToString(validationStatus.error.toPrimerErrorRN())))
|
|
221
|
-
}
|
|
222
|
-
)
|
|
198
|
+
putErrors(validationStatus.error)
|
|
223
199
|
}
|
|
224
200
|
)
|
|
225
201
|
}
|
|
@@ -245,12 +221,6 @@ class PrimerRNHeadlessUniversalCheckoutBanksComponent(
|
|
|
245
221
|
|
|
246
222
|
@ReactMethod fun removeListeners(count: Int?) = Unit
|
|
247
223
|
|
|
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
224
|
private fun sendEvent(name: String, data: JSONObject?) {
|
|
255
225
|
reactApplicationContext
|
|
256
226
|
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
@@ -22,10 +22,11 @@ import com.primerioreactnative.extensions.klarna.toPaymentSessionAuthorizedRN
|
|
|
22
22
|
import com.primerioreactnative.extensions.klarna.toPaymentSessionCreatedRN
|
|
23
23
|
import com.primerioreactnative.extensions.klarna.toPaymentSessionFinalizedRN
|
|
24
24
|
import com.primerioreactnative.extensions.klarna.toPaymentViewLoadedRN
|
|
25
|
-
import com.primerioreactnative.extensions.toPrimerErrorRN
|
|
26
25
|
import com.primerioreactnative.utils.errorTo
|
|
27
26
|
import com.primerioreactnative.utils.toWritableArray
|
|
28
27
|
import com.primerioreactnative.utils.toWritableMap
|
|
28
|
+
import com.primerioreactnative.extensions.putErrors
|
|
29
|
+
import com.primerioreactnative.extensions.putValidationErrors
|
|
29
30
|
import io.primer.android.PrimerSessionIntent
|
|
30
31
|
import io.primer.android.components.manager.core.composable.PrimerValidationStatus
|
|
31
32
|
import io.primer.android.components.manager.klarna.PrimerHeadlessUniversalCheckoutKlarnaManager
|
|
@@ -124,14 +125,7 @@ class PrimerRNHeadlessUniversalCheckoutKlarnaComponent(
|
|
|
124
125
|
klarnaComponent?.componentError?.collectLatest { error ->
|
|
125
126
|
sendEvent(
|
|
126
127
|
PrimerHeadlessUniversalCheckoutComponentEvent.ON_ERROR.eventName,
|
|
127
|
-
JSONObject().apply {
|
|
128
|
-
put(
|
|
129
|
-
"errors",
|
|
130
|
-
JSONArray().apply {
|
|
131
|
-
put(JSONObject(json.encodeToString(error.toPrimerErrorRN())))
|
|
132
|
-
}
|
|
133
|
-
)
|
|
134
|
-
}
|
|
128
|
+
JSONObject().apply { putErrors(error) }
|
|
135
129
|
)
|
|
136
130
|
}
|
|
137
131
|
}
|
|
@@ -189,22 +183,7 @@ class PrimerRNHeadlessUniversalCheckoutKlarnaComponent(
|
|
|
189
183
|
PrimerHeadlessUniversalCheckoutComponentEvent.ON_IN_VALID.eventName,
|
|
190
184
|
JSONObject().apply {
|
|
191
185
|
putData(validationStatus.collectableData as KlarnaPaymentCollectableData)
|
|
192
|
-
|
|
193
|
-
"errors",
|
|
194
|
-
JSONArray(
|
|
195
|
-
validationStatus.validationErrors.map {
|
|
196
|
-
JSONObject(
|
|
197
|
-
json.encodeToString(
|
|
198
|
-
PrimerValidationErrorRN(
|
|
199
|
-
it.errorId,
|
|
200
|
-
it.description,
|
|
201
|
-
it.diagnosticsId,
|
|
202
|
-
)
|
|
203
|
-
)
|
|
204
|
-
)
|
|
205
|
-
}
|
|
206
|
-
)
|
|
207
|
-
)
|
|
186
|
+
putValidationErrors(validationStatus.validationErrors)
|
|
208
187
|
}
|
|
209
188
|
)
|
|
210
189
|
}
|
|
@@ -221,12 +200,7 @@ class PrimerRNHeadlessUniversalCheckoutKlarnaComponent(
|
|
|
221
200
|
PrimerHeadlessUniversalCheckoutComponentEvent.ON_VALIDATION_ERROR.eventName,
|
|
222
201
|
JSONObject().apply {
|
|
223
202
|
putData(validationStatus.collectableData as KlarnaPaymentCollectableData)
|
|
224
|
-
|
|
225
|
-
"errors",
|
|
226
|
-
JSONArray().apply {
|
|
227
|
-
put(JSONObject(json.encodeToString(validationStatus.error.toPrimerErrorRN())))
|
|
228
|
-
}
|
|
229
|
-
)
|
|
203
|
+
putErrors(validationStatus.error)
|
|
230
204
|
}
|
|
231
205
|
)
|
|
232
206
|
}
|
package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutAdditionalInfoRN.kt
CHANGED
|
@@ -3,14 +3,18 @@ package com.primerioreactnative.datamodels
|
|
|
3
3
|
import kotlinx.serialization.Serializable
|
|
4
4
|
|
|
5
5
|
@Serializable
|
|
6
|
-
sealed class PrimerCheckoutAdditionalInfoRN
|
|
6
|
+
sealed class PrimerCheckoutAdditionalInfoRN {
|
|
7
|
+
abstract val additionalInfoName: String
|
|
8
|
+
}
|
|
7
9
|
|
|
8
10
|
@Serializable
|
|
9
11
|
data class MultibancoCheckoutAdditionalInfoRN(
|
|
10
12
|
val expiresAt: String,
|
|
11
13
|
val reference: String,
|
|
12
14
|
val entity: String,
|
|
13
|
-
) : PrimerCheckoutAdditionalInfoRN()
|
|
15
|
+
) : PrimerCheckoutAdditionalInfoRN() {
|
|
16
|
+
override val additionalInfoName: String = "MultibancoCheckoutAdditionalInfo"
|
|
17
|
+
}
|
|
14
18
|
|
|
15
19
|
sealed class PrimerCheckoutQRCodeInfoRN : PrimerCheckoutAdditionalInfoRN()
|
|
16
20
|
|
|
@@ -19,7 +23,9 @@ data class PromptPayCheckoutAdditionalInfoRN(
|
|
|
19
23
|
val expiresAt: String,
|
|
20
24
|
val qrCodeUrl: String?,
|
|
21
25
|
val qrCodeBase64: String?,
|
|
22
|
-
) : PrimerCheckoutQRCodeInfoRN()
|
|
26
|
+
) : PrimerCheckoutQRCodeInfoRN() {
|
|
27
|
+
override val additionalInfoName: String = "PromptPayCheckoutAdditionalInfo"
|
|
28
|
+
}
|
|
23
29
|
|
|
24
30
|
sealed class PrimerCheckoutVoucherInfoRN : PrimerCheckoutAdditionalInfoRN()
|
|
25
31
|
|
|
@@ -28,4 +34,11 @@ data class XenditCheckoutVoucherAdditionalInfoRN(
|
|
|
28
34
|
val expiresAt: String,
|
|
29
35
|
val couponCode: String,
|
|
30
36
|
val retailerName: String?,
|
|
31
|
-
) : PrimerCheckoutVoucherInfoRN()
|
|
37
|
+
) : PrimerCheckoutVoucherInfoRN() {
|
|
38
|
+
override val additionalInfoName: String = "XenditCheckoutVoucherAdditionalInfo"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@Serializable
|
|
42
|
+
class AchAdditionalInfoDisplayMandateRN : PrimerCheckoutAdditionalInfoRN() {
|
|
43
|
+
override val additionalInfoName: String = "DisplayStripeAchMandateAdditionalInfo"
|
|
44
|
+
}
|
|
@@ -28,6 +28,15 @@ data class PrimerCustomerRN(
|
|
|
28
28
|
@Serializable
|
|
29
29
|
data class PrimerOrderRN(
|
|
30
30
|
val countryCode: CountryCode?,
|
|
31
|
+
val shipping: PrimerShippingRN?
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
@Serializable
|
|
35
|
+
data class PrimerShippingRN(
|
|
36
|
+
val amount: Int?,
|
|
37
|
+
val methodId: String?,
|
|
38
|
+
val methodName: String?,
|
|
39
|
+
val methodDescription: String?
|
|
31
40
|
)
|
|
32
41
|
|
|
33
42
|
@Serializable
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package com.primerioreactnative.datamodels
|
|
2
2
|
|
|
3
|
+
import android.content.Context
|
|
3
4
|
import com.primerioreactnative.extensions.toLocale
|
|
4
5
|
import com.primerioreactnative.extensions.toPrimerDebugOptions
|
|
5
6
|
import com.primerioreactnative.extensions.toPrimerPaymentMethodOptions
|
|
@@ -7,6 +8,7 @@ import com.primerioreactnative.extensions.toPrimerUIOptions
|
|
|
7
8
|
import io.primer.android.data.settings.GooglePayButtonStyle
|
|
8
9
|
import io.primer.android.data.settings.PrimerPaymentHandling
|
|
9
10
|
import io.primer.android.data.settings.PrimerSettings
|
|
11
|
+
import io.primer.android.data.settings.PrimerStripeOptions
|
|
10
12
|
import io.primer.android.ui.settings.PrimerTheme
|
|
11
13
|
import kotlinx.serialization.SerialName
|
|
12
14
|
import kotlinx.serialization.Serializable
|
|
@@ -23,19 +25,20 @@ data class PrimerSettingsRN(
|
|
|
23
25
|
|
|
24
26
|
@Serializable
|
|
25
27
|
data class LocaleSettingsRN(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
val languageCode: String? = null,
|
|
29
|
+
val localeCode: String? = null
|
|
28
30
|
)
|
|
29
31
|
|
|
30
32
|
@Serializable
|
|
31
33
|
data class PrimerPaymentMethodOptionsRN(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
@SerialName("android")
|
|
35
|
+
val androidSettingsRN: AndroidSettingsRN = AndroidSettingsRN(),
|
|
36
|
+
var cardPaymentOptions: PrimerCardPaymentOptionsRN = PrimerCardPaymentOptionsRN(),
|
|
37
|
+
var googlePayOptions: PrimerGooglePayOptionsRN = PrimerGooglePayOptionsRN(),
|
|
38
|
+
var klarnaOptions: PrimerKlarnaOptionsRN = PrimerKlarnaOptionsRN(),
|
|
39
|
+
var apayaOptions: PrimerApayaOptionsRN = PrimerApayaOptionsRN(),
|
|
40
|
+
var threeDsOptions: PrimerThreeDsOptionsRN = PrimerThreeDsOptionsRN(),
|
|
41
|
+
var stripeOptions: PrimerStripeOptionsRN = PrimerStripeOptionsRN(),
|
|
39
42
|
)
|
|
40
43
|
|
|
41
44
|
@Serializable
|
|
@@ -113,56 +116,70 @@ data class ColorRN(
|
|
|
113
116
|
data class PrimerDebugOptionsRN(val is3DSSanityCheckEnabled: Boolean = true)
|
|
114
117
|
|
|
115
118
|
@Serializable
|
|
116
|
-
data class PrimerCardPaymentOptionsRN(
|
|
117
|
-
var is3DSOnVaultingEnabled: Boolean = true
|
|
118
|
-
)
|
|
119
|
+
data class PrimerCardPaymentOptionsRN(var is3DSOnVaultingEnabled: Boolean = true)
|
|
119
120
|
|
|
120
121
|
@Serializable
|
|
121
122
|
data class PrimerThreeDsOptionsRN(
|
|
122
|
-
|
|
123
|
-
|
|
123
|
+
@SerialName("android")
|
|
124
|
+
val threeDsOptionsAndroid: PrimerThreeDsAndroidOptionsRN? = null
|
|
124
125
|
)
|
|
125
126
|
|
|
126
127
|
@Serializable
|
|
127
|
-
data class PrimerThreeDsAndroidOptionsRN(
|
|
128
|
-
val threeDsAppRequestorUrl: String? = null
|
|
129
|
-
)
|
|
128
|
+
data class PrimerThreeDsAndroidOptionsRN(val threeDsAppRequestorUrl: String? = null)
|
|
130
129
|
|
|
131
130
|
@Serializable
|
|
132
131
|
data class PrimerGooglePayOptionsRN(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
"
|
|
138
|
-
|
|
139
|
-
"
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
132
|
+
var merchantName: String? = null,
|
|
133
|
+
var allowedCardNetworks: List<String> =
|
|
134
|
+
listOf("AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"),
|
|
135
|
+
var buttonStyle: GooglePayButtonStyle = GooglePayButtonStyle.BLACK,
|
|
136
|
+
@SerialName("isCaptureBillingAddressEnabled")
|
|
137
|
+
var captureBillingAddress: Boolean = false,
|
|
138
|
+
@SerialName("isExistingPaymentMethodRequired")
|
|
139
|
+
var existingPaymentMethodRequired: Boolean = false,
|
|
140
|
+
var shippingAddressParameters: PrimerGoogleShippingAddressParametersRN? = null,
|
|
141
|
+
@SerialName("requireShippingMethod")
|
|
142
|
+
var requireShippingMethod: Boolean = false,
|
|
143
|
+
@SerialName("emailAddressRequired")
|
|
144
|
+
var emailAddressRequired: Boolean = false
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
@Serializable
|
|
148
|
+
data class PrimerGoogleShippingAddressParametersRN(
|
|
149
|
+
var phoneNumberRequired: Boolean = false
|
|
144
150
|
)
|
|
145
151
|
|
|
146
152
|
@Serializable
|
|
147
153
|
data class PrimerKlarnaOptionsRN(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
var recurringPaymentDescription: String? = null,
|
|
155
|
+
@Deprecated("This property is deprecated and will be removed in future release.")
|
|
156
|
+
var webViewTitle: String? = null,
|
|
151
157
|
)
|
|
152
158
|
|
|
159
|
+
@Serializable
|
|
160
|
+
data class PrimerStripeOptionsRN(
|
|
161
|
+
val mandateData: MandateDataRN? = null,
|
|
162
|
+
val publishableKey: String? = null,
|
|
163
|
+
) {
|
|
164
|
+
@Serializable
|
|
165
|
+
data class MandateDataRN(
|
|
166
|
+
@SerialName("fullMandateText") val fullMandateText: String? = null,
|
|
167
|
+
@SerialName("fullMandateStringResourceName") val fullMandateStringResName: String? = null,
|
|
168
|
+
val merchantName: String? = null
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
|
|
153
172
|
@Serializable
|
|
154
173
|
@Deprecated("This class is deprecated and will be removed in future release.")
|
|
155
174
|
data class PrimerApayaOptionsRN(
|
|
156
|
-
|
|
175
|
+
var webViewTitle: String? = null,
|
|
157
176
|
)
|
|
158
177
|
|
|
159
|
-
fun PrimerSettingsRN.toPrimerSettings() = PrimerSettings(
|
|
178
|
+
fun PrimerSettingsRN.toPrimerSettings(context: Context) = PrimerSettings(
|
|
160
179
|
paymentHandling = paymentHandling,
|
|
161
180
|
locale = localeData.toLocale(),
|
|
162
|
-
paymentMethodOptions = paymentMethodOptions.toPrimerPaymentMethodOptions(),
|
|
181
|
+
paymentMethodOptions = paymentMethodOptions.toPrimerPaymentMethodOptions(context),
|
|
163
182
|
uiOptions = uiOptions.toPrimerUIOptions(),
|
|
164
183
|
debugOptions = debugOptions.toPrimerDebugOptions(),
|
|
165
184
|
clientSessionCachingEnabled = clientSessionCachingEnabled
|
|
166
185
|
)
|
|
167
|
-
|
|
168
|
-
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels.ach
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.NamedComponentValidatableData
|
|
4
|
+
import kotlinx.serialization.Serializable
|
|
5
|
+
|
|
6
|
+
@Serializable
|
|
7
|
+
internal sealed interface AchUserDetailsCollectableDataRN : NamedComponentValidatableData {
|
|
8
|
+
@Serializable
|
|
9
|
+
data class FirstNameRN(val value: String) : AchUserDetailsCollectableDataRN {
|
|
10
|
+
override val validatableDataName = "firstName"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@Serializable
|
|
14
|
+
data class LastNameRN(val value: String) : AchUserDetailsCollectableDataRN {
|
|
15
|
+
override val validatableDataName = "lastName"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@Serializable
|
|
19
|
+
data class EmailAddressRN(val value: String) : AchUserDetailsCollectableDataRN {
|
|
20
|
+
override val validatableDataName = "emailAddress"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels.ach
|
|
2
|
+
|
|
3
|
+
import kotlinx.serialization.Serializable
|
|
4
|
+
import com.primerioreactnative.datamodels.NamedComponentStep
|
|
5
|
+
import com.primerioreactnative.datamodels.PrimerIssuingBankRN
|
|
6
|
+
|
|
7
|
+
@Serializable
|
|
8
|
+
internal sealed interface AchUserDetailsStepRN : NamedComponentStep {
|
|
9
|
+
@Serializable
|
|
10
|
+
class UserDetailsCollectedRN : AchUserDetailsStepRN {
|
|
11
|
+
override val stepName: String = "userDetailsCollected"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@Serializable
|
|
15
|
+
data class UserDetailsRetrievedRN(
|
|
16
|
+
val firstName: String,
|
|
17
|
+
val lastName: String,
|
|
18
|
+
val emailAddress: String
|
|
19
|
+
) : AchUserDetailsStepRN {
|
|
20
|
+
override val stepName: String = "userDetailsRetrieved"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels.extensions.ach
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.NamedComponentValidatableData
|
|
4
|
+
import com.primerioreactnative.datamodels.ach.AchUserDetailsStepRN
|
|
5
|
+
import io.primer.android.components.presentation.paymentMethods.nativeUi.stripe.ach.composable.AchUserDetailsCollectableData
|
|
6
|
+
import kotlinx.serialization.Serializable
|
|
7
|
+
import com.primerioreactnative.datamodels.ach.AchUserDetailsCollectableDataRN
|
|
8
|
+
|
|
9
|
+
internal fun AchUserDetailsCollectableData.FirstName.toFirstNameRN() = AchUserDetailsCollectableDataRN.FirstNameRN(value)
|
|
10
|
+
internal fun AchUserDetailsCollectableData.LastName.toLastNameRN() = AchUserDetailsCollectableDataRN.LastNameRN(value)
|
|
11
|
+
internal fun AchUserDetailsCollectableData.EmailAddress.toEmailAddressRN() = AchUserDetailsCollectableDataRN.EmailAddressRN(value)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.primerioreactnative.datamodels.extensions.ach
|
|
2
|
+
|
|
3
|
+
import com.primerioreactnative.datamodels.ach.AchUserDetailsStepRN
|
|
4
|
+
import io.primer.android.components.presentation.paymentMethods.nativeUi.stripe.ach.composable.AchUserDetailsStep
|
|
5
|
+
|
|
6
|
+
internal fun AchUserDetailsStep.UserDetailsCollected.toUserDetailsCollectedRN() =
|
|
7
|
+
AchUserDetailsStepRN.UserDetailsCollectedRN()
|
|
8
|
+
|
|
9
|
+
internal fun AchUserDetailsStep.UserDetailsRetrieved.toUserDetailsRetrievedRN() =
|
|
10
|
+
AchUserDetailsStepRN.UserDetailsRetrievedRN(
|
|
11
|
+
firstName = firstName,
|
|
12
|
+
lastName = lastName,
|
|
13
|
+
emailAddress = emailAddress
|
|
14
|
+
)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.primerioreactnative.extensions
|
|
2
|
+
|
|
3
|
+
import org.json.JSONObject
|
|
4
|
+
import org.json.JSONArray
|
|
5
|
+
import io.primer.android.domain.error.models.PrimerError
|
|
6
|
+
import io.primer.android.components.domain.error.PrimerValidationError
|
|
7
|
+
import kotlinx.serialization.json.Json
|
|
8
|
+
import com.primerioreactnative.datamodels.PrimerValidationErrorRN
|
|
9
|
+
import kotlinx.serialization.encodeToString
|
|
10
|
+
|
|
11
|
+
private val json = Json { encodeDefaults = true }
|
|
12
|
+
|
|
13
|
+
fun JSONObject.putErrors(error: PrimerError) {
|
|
14
|
+
put(
|
|
15
|
+
"errors",
|
|
16
|
+
JSONArray().apply { put(JSONObject(json.encodeToString(error.toPrimerErrorRN()))) }
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
fun JSONObject.putValidationErrors(errors: List<PrimerValidationError>) {
|
|
21
|
+
put(
|
|
22
|
+
"errors",
|
|
23
|
+
JSONArray(
|
|
24
|
+
errors.map {
|
|
25
|
+
JSONObject(
|
|
26
|
+
json.encodeToString(
|
|
27
|
+
PrimerValidationErrorRN(
|
|
28
|
+
it.errorId,
|
|
29
|
+
it.description,
|
|
30
|
+
it.diagnosticsId,
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
fun JSONObject.removeType() {
|
|
40
|
+
remove("type")
|
|
41
|
+
}
|
package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutAdditionalInfo.kt
CHANGED
|
@@ -3,10 +3,12 @@ package com.primerioreactnative.extensions
|
|
|
3
3
|
import com.primerioreactnative.datamodels.MultibancoCheckoutAdditionalInfoRN
|
|
4
4
|
import com.primerioreactnative.datamodels.PromptPayCheckoutAdditionalInfoRN
|
|
5
5
|
import com.primerioreactnative.datamodels.XenditCheckoutVoucherAdditionalInfoRN
|
|
6
|
+
import com.primerioreactnative.datamodels.AchAdditionalInfoDisplayMandateRN
|
|
6
7
|
import io.primer.android.domain.payments.additionalInfo.MultibancoCheckoutAdditionalInfo
|
|
7
8
|
import io.primer.android.domain.payments.additionalInfo.PrimerCheckoutAdditionalInfo
|
|
8
9
|
import io.primer.android.domain.payments.additionalInfo.PromptPayCheckoutAdditionalInfo
|
|
9
10
|
import io.primer.android.domain.payments.additionalInfo.XenditCheckoutVoucherAdditionalInfo
|
|
11
|
+
import io.primer.android.domain.payments.additionalInfo.AchAdditionalInfo
|
|
10
12
|
|
|
11
13
|
internal fun PrimerCheckoutAdditionalInfo.toCheckoutAdditionalInfoRN() = when (this) {
|
|
12
14
|
is MultibancoCheckoutAdditionalInfo ->
|
|
@@ -15,5 +17,7 @@ internal fun PrimerCheckoutAdditionalInfo.toCheckoutAdditionalInfoRN() = when (t
|
|
|
15
17
|
PromptPayCheckoutAdditionalInfoRN(expiresAt, qrCodeUrl, qrCodeBase64)
|
|
16
18
|
is XenditCheckoutVoucherAdditionalInfo ->
|
|
17
19
|
XenditCheckoutVoucherAdditionalInfoRN(expiresAt, couponCode, retailerName)
|
|
20
|
+
is AchAdditionalInfo.DisplayMandate ->
|
|
21
|
+
AchAdditionalInfoDisplayMandateRN()
|
|
18
22
|
else -> null
|
|
19
23
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
package com.primerioreactnative.extensions
|
|
2
2
|
|
|
3
3
|
import com.primerioreactnative.datamodels.PrimerOrderRN
|
|
4
|
+
import com.primerioreactnative.datamodels.PrimerShippingRN
|
|
4
5
|
import io.primer.android.domain.action.models.PrimerOrder
|
|
6
|
+
import io.primer.android.domain.action.models.PrimerShipping
|
|
5
7
|
|
|
6
|
-
internal fun PrimerOrder.toPrimerOrderRN() = PrimerOrderRN(countryCode)
|
|
8
|
+
internal fun PrimerOrder.toPrimerOrderRN() = PrimerOrderRN(countryCode, shipping?.toPrimerShippingRN())
|
|
9
|
+
|
|
10
|
+
internal fun PrimerShipping.toPrimerShippingRN() = PrimerShippingRN(amount, methodId, methodName, methodDescription)
|
package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt
CHANGED
|
@@ -2,25 +2,58 @@ package com.primerioreactnative.extensions
|
|
|
2
2
|
|
|
3
3
|
import com.primerioreactnative.datamodels.*
|
|
4
4
|
import io.primer.android.data.settings.*
|
|
5
|
+
import io.primer.android.data.settings.PrimerStripeOptions.MandateData.TemplateMandateData
|
|
6
|
+
import io.primer.android.data.settings.PrimerStripeOptions.MandateData.FullMandateData
|
|
7
|
+
import io.primer.android.data.settings.PrimerStripeOptions.MandateData.FullMandateStringData
|
|
8
|
+
import android.content.Context
|
|
5
9
|
|
|
6
|
-
fun PrimerPaymentMethodOptionsRN.toPrimerPaymentMethodOptions() =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
)
|
|
10
|
+
fun PrimerPaymentMethodOptionsRN.toPrimerPaymentMethodOptions(context: Context) =
|
|
11
|
+
PrimerPaymentMethodOptions(
|
|
12
|
+
androidSettingsRN.redirectScheme,
|
|
13
|
+
googlePayOptions.toPrimerGooglePayOptions(),
|
|
14
|
+
klarnaOptions.toPrimerKlarnaOptions(),
|
|
15
|
+
threeDsOptions.toPrimerThreeDsOptions(),
|
|
16
|
+
stripeOptions.toPrimerStripeOptions(context),
|
|
17
|
+
)
|
|
12
18
|
|
|
13
19
|
fun PrimerGooglePayOptionsRN.toPrimerGooglePayOptions() =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
PrimerGooglePayOptions(
|
|
21
|
+
merchantName = merchantName,
|
|
22
|
+
allowedCardNetworks = allowedCardNetworks,
|
|
23
|
+
buttonStyle = buttonStyle,
|
|
24
|
+
captureBillingAddress = captureBillingAddress,
|
|
25
|
+
existingPaymentMethodRequired = existingPaymentMethodRequired,
|
|
26
|
+
shippingAddressParameters = shippingAddressParameters?.toPrimerGoogleShippingAddressParameters(),
|
|
27
|
+
requireShippingMethod = requireShippingMethod,
|
|
28
|
+
emailAddressRequired = emailAddressRequired
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
fun PrimerGoogleShippingAddressParametersRN.toPrimerGoogleShippingAddressParameters() =
|
|
32
|
+
PrimerGoogleShippingAddressParameters(phoneNumberRequired)
|
|
21
33
|
|
|
22
34
|
fun PrimerKlarnaOptionsRN.toPrimerKlarnaOptions() =
|
|
23
|
-
|
|
35
|
+
PrimerKlarnaOptions(recurringPaymentDescription, webViewTitle)
|
|
24
36
|
|
|
25
37
|
fun PrimerThreeDsOptionsRN.toPrimerThreeDsOptions() =
|
|
26
|
-
|
|
38
|
+
PrimerThreeDsOptions(threeDsOptionsAndroid?.threeDsAppRequestorUrl)
|
|
39
|
+
|
|
40
|
+
fun PrimerStripeOptionsRN.toPrimerStripeOptions(context: Context) =
|
|
41
|
+
PrimerStripeOptions(mandateData = mandateData?.toMandateData(context), publishableKey = publishableKey)
|
|
42
|
+
|
|
43
|
+
private fun PrimerStripeOptionsRN.MandateDataRN.toMandateData(context: Context) = when {
|
|
44
|
+
merchantName != null -> TemplateMandateData(merchantName)
|
|
45
|
+
fullMandateStringResName != null -> {
|
|
46
|
+
val stringId = context.getResources().getIdentifier(fullMandateStringResName, "string", context.getPackageName())
|
|
47
|
+
if (stringId != 0) {
|
|
48
|
+
FullMandateData(stringId)
|
|
49
|
+
} else {
|
|
50
|
+
if (fullMandateText != null) {
|
|
51
|
+
FullMandateStringData(fullMandateText)
|
|
52
|
+
} else {
|
|
53
|
+
error("Missing mandate data")
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
fullMandateText != null -> FullMandateStringData(fullMandateText)
|
|
58
|
+
else -> error("Missing mandate data")
|
|
59
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTAchUserDetailsCollectableData.swift
|
|
3
|
+
// Pods
|
|
4
|
+
//
|
|
5
|
+
// Created by Flaviu Dunca on 12.06.2024.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import PrimerSDK
|
|
10
|
+
|
|
11
|
+
protocol AchUserDetailsCollectableDataRN {
|
|
12
|
+
var validatableDataName: String { get }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
class FirstNameRN: AchUserDetailsCollectableDataRN, Encodable {
|
|
16
|
+
let validatableDataName: String = "firstName"
|
|
17
|
+
let value: String
|
|
18
|
+
|
|
19
|
+
init(value: String) {
|
|
20
|
+
self.value = value
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class LastNameRN: AchUserDetailsCollectableDataRN, Encodable {
|
|
25
|
+
let validatableDataName: String = "lastName"
|
|
26
|
+
let value: String
|
|
27
|
+
|
|
28
|
+
init(value: String) {
|
|
29
|
+
self.value = value
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class EmailAddressRN: AchUserDetailsCollectableDataRN, Encodable {
|
|
34
|
+
let validatableDataName: String = "emailAddress"
|
|
35
|
+
let value: String
|
|
36
|
+
|
|
37
|
+
init(value: String) {
|
|
38
|
+
self.value = value
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
extension ACHUserDetailsCollectableData {
|
|
43
|
+
func toFirstNameRN(value: String) -> FirstNameRN {
|
|
44
|
+
return FirstNameRN(value: value)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
func toLastNameRN(value: String) -> LastNameRN {
|
|
48
|
+
return LastNameRN(value: value)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
func toEmailAddressRN(value: String) -> EmailAddressRN {
|
|
52
|
+
return EmailAddressRN(value: value)
|
|
53
|
+
}
|
|
54
|
+
}
|