@primer-io/react-native 2.28.0-beta.1 → 2.29.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.
Files changed (110) hide show
  1. package/android/.settings/org.eclipse.buildship.core.prefs +2 -2
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +4 -4
  4. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +1 -1
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +5 -5
  6. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +8 -2
  7. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/cardRedirect/PrimerRNCardRedirectData.kt +1 -1
  8. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/phoneNumber/PrimerRNPhoneNumberData.kt +1 -1
  9. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/PrimerRNRetailOutletData.kt +1 -1
  10. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/raw/retailOutlets/RNRetailOutletsList.kt +1 -1
  11. package/android/src/main/java/com/primerioreactnative/components/datamodels/manager/{asset/PrimerRNAsset.kt → resource/Resources.kt} +41 -9
  12. package/android/src/main/java/com/primerioreactnative/components/manager/NativeViewContainer.kt +35 -0
  13. package/android/src/main/java/com/primerioreactnative/components/manager/ach/PrimerRNHeadlessUniversalCheckoutStripeAchUserDetailsComponent.kt +4 -4
  14. package/android/src/main/java/com/primerioreactnative/components/manager/asset/PrimerRNHeadlessUniversalCheckoutAssetManager.kt +84 -2
  15. package/android/src/main/java/com/primerioreactnative/components/manager/banks/PrimerRNHeadlessUniversalCheckoutBanksComponent.kt +1 -1
  16. package/android/src/main/java/com/primerioreactnative/components/manager/googlePay/PrimerGooglePayButtonConstantsModule.kt +39 -0
  17. package/android/src/main/java/com/primerioreactnative/components/manager/googlePay/PrimerGooglePayButtonManager.kt +38 -0
  18. package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerKlarnaPaymentViewManager.kt +15 -78
  19. package/android/src/main/java/com/primerioreactnative/components/manager/klarna/PrimerRNHeadlessUniversalCheckoutKlarnaComponent.kt +4 -4
  20. package/android/src/main/java/com/primerioreactnative/components/manager/nativeUi/PrimerRNHeadlessUniversalCheckoutNativeUiManager.kt +1 -1
  21. package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +2 -2
  22. package/android/src/main/java/com/primerioreactnative/components/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +1 -1
  23. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +1 -1
  24. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +1 -1
  25. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +5 -10
  26. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +49 -37
  27. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsCollectableData.kt +1 -1
  28. package/android/src/main/java/com/primerioreactnative/datamodels/extensions/ach/AchUserDetailsStep.kt +1 -1
  29. package/android/src/main/java/com/primerioreactnative/extensions/PaymentInstrumentData.kt +29 -16
  30. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutAdditionalInfo.kt +7 -7
  31. package/android/src/main/java/com/primerioreactnative/extensions/PrimerIssuingBank.kt +1 -1
  32. package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +4 -2
  33. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodOptionsRN.kt +48 -35
  34. package/android/src/main/java/com/primerioreactnative/extensions/PrimerUIOptionsRN.kt +11 -0
  35. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategory.kt +1 -1
  36. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCategoryRN.kt +1 -1
  37. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentCollectableData.kt +2 -2
  38. package/android/src/main/java/com/primerioreactnative/extensions/klarna/KlarnaPaymentStep.kt +4 -4
  39. package/ios/Sources/DataModels/PrimerSettings+Extensions.swift +50 -7
  40. package/ios/Sources/Headless Universal Checkout/Managers/Assets Manager/RNTAssetsManager.m +7 -0
  41. package/ios/Sources/Headless Universal Checkout/Managers/Assets Manager/RNTAssetsManager.swift +162 -88
  42. package/ios/Sources/version.swift +1 -1
  43. package/lib/commonjs/HeadlessUniversalCheckout/Components/NativeResourceView.js +30 -0
  44. package/lib/commonjs/HeadlessUniversalCheckout/Components/NativeResourceView.js.map +1 -0
  45. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js +9 -0
  46. package/lib/commonjs/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js.map +1 -0
  47. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js +32 -0
  48. package/lib/commonjs/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
  49. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +6 -0
  50. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
  51. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +6 -0
  52. package/lib/commonjs/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -1
  53. package/lib/commonjs/HeadlessUniversalCheckout/Managers/VaultManager.js +24 -1
  54. package/lib/commonjs/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
  55. package/lib/commonjs/index.js +20 -0
  56. package/lib/commonjs/index.js.map +1 -1
  57. package/lib/commonjs/models/PrimerPaymentMethodResource.js +2 -0
  58. package/lib/{module/models/PrimerAsset.js.map → commonjs/models/PrimerPaymentMethodResource.js.map} +1 -1
  59. package/lib/module/HeadlessUniversalCheckout/Components/NativeResourceView.js +22 -0
  60. package/lib/module/HeadlessUniversalCheckout/Components/NativeResourceView.js.map +1 -0
  61. package/lib/module/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js +3 -0
  62. package/lib/module/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.js.map +1 -0
  63. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js +32 -0
  64. package/lib/module/HeadlessUniversalCheckout/Managers/AssetsManager.js.map +1 -1
  65. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js +6 -0
  66. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.js.map +1 -1
  67. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js +6 -0
  68. package/lib/module/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.js.map +1 -1
  69. package/lib/module/HeadlessUniversalCheckout/Managers/VaultManager.js +24 -1
  70. package/lib/module/HeadlessUniversalCheckout/Managers/VaultManager.js.map +1 -1
  71. package/lib/module/index.js +6 -0
  72. package/lib/module/index.js.map +1 -1
  73. package/lib/module/models/PrimerPaymentMethodResource.js +2 -0
  74. package/lib/{commonjs/models/PrimerAsset.js.map → module/models/PrimerPaymentMethodResource.js.map} +1 -1
  75. package/lib/typescript/HeadlessUniversalCheckout/Components/NativeResourceView.d.ts +11 -0
  76. package/lib/typescript/HeadlessUniversalCheckout/Components/NativeResourceView.d.ts.map +1 -0
  77. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.d.ts +6 -0
  78. package/lib/typescript/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.d.ts.map +1 -0
  79. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts +10 -1
  80. package/lib/typescript/HeadlessUniversalCheckout/Managers/AssetsManager.d.ts.map +1 -1
  81. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts +16 -1
  82. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.d.ts.map +1 -1
  83. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts +14 -1
  84. package/lib/typescript/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.d.ts.map +1 -1
  85. package/lib/typescript/HeadlessUniversalCheckout/Managers/VaultManager.d.ts.map +1 -1
  86. package/lib/typescript/index.d.ts +8 -1
  87. package/lib/typescript/index.d.ts.map +1 -1
  88. package/lib/typescript/models/PrimerPaymentMethodResource.d.ts +19 -0
  89. package/lib/typescript/models/PrimerPaymentMethodResource.d.ts.map +1 -0
  90. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +10 -49
  91. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts.map +1 -1
  92. package/lib/typescript/models/PrimerSettings.d.ts +17 -4
  93. package/lib/typescript/models/PrimerSettings.d.ts.map +1 -1
  94. package/package.json +1 -1
  95. package/primer-io-react-native.podspec +1 -1
  96. package/src/HeadlessUniversalCheckout/Components/NativeResourceView.tsx +31 -0
  97. package/src/HeadlessUniversalCheckout/Components/PrimerGooglePayButton.tsx +8 -0
  98. package/src/HeadlessUniversalCheckout/Managers/AssetsManager.ts +34 -1
  99. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/ComponentWithRedirectManager.ts +24 -1
  100. package/src/HeadlessUniversalCheckout/Managers/PaymentMethodManagers/KlarnaManager.ts +22 -1
  101. package/src/HeadlessUniversalCheckout/Managers/VaultManager.ts +22 -1
  102. package/src/index.tsx +9 -3
  103. package/src/models/PrimerPaymentMethodResource.ts +21 -0
  104. package/src/models/PrimerPaymentMethodTokenData.ts +10 -53
  105. package/src/models/PrimerSettings.ts +20 -5
  106. package/lib/commonjs/models/PrimerAsset.js +0 -2
  107. package/lib/module/models/PrimerAsset.js +0 -2
  108. package/lib/typescript/models/PrimerAsset.d.ts +0 -15
  109. package/lib/typescript/models/PrimerAsset.d.ts.map +0 -1
  110. package/src/models/PrimerAsset.ts +0 -14
@@ -2,7 +2,7 @@ package com.primerioreactnative.components.manager.raw
2
2
 
3
3
  import com.primerioreactnative.components.events.PrimerHeadlessUniversalCheckoutRawDataManagerEvent
4
4
  import com.primerioreactnative.datamodels.PrimerInputValidationErrorRN
5
- import io.primer.android.ExperimentalPrimerApi
5
+ import io.primer.android.core.ExperimentalPrimerApi
6
6
  import io.primer.android.components.domain.core.models.card.PrimerCardMetadata
7
7
  import io.primer.android.components.domain.core.models.metadata.PrimerPaymentMethodMetadata
8
8
  import io.primer.android.components.domain.error.PrimerInputValidationError
@@ -1,6 +1,6 @@
1
1
  package com.primerioreactnative.datamodels
2
2
 
3
- import io.primer.android.data.configuration.models.CountryCode
3
+ import io.primer.android.configuration.data.model.CountryCode
4
4
  import io.primer.android.domain.action.models.*
5
5
  import kotlinx.serialization.Serializable
6
6
 
@@ -4,7 +4,7 @@ import kotlinx.serialization.Serializable
4
4
 
5
5
  @Serializable
6
6
  data class PrimerErrorRN(
7
- val errorId: String? = null,
7
+ val errorId: String,
8
8
  val errorCode: String? = null,
9
9
  val description: String? = null,
10
10
  val diagnosticsId: String? = null,
@@ -36,28 +36,23 @@ data class PrimerPaymentInstrumentTokenRN(
36
36
  val cardholderName: String? = null,
37
37
  val first6Digits: Int? = null,
38
38
  val last4Digits: Int? = null,
39
+ val accountNumberLast4Digits: Int? = null,
39
40
  val expirationMonth: Int? = null,
40
41
  val expirationYear: Int? = null,
41
- val gocardlessMandateId: String? = null,
42
42
  val externalPayerInfo: ExternalPayerInfo? = null,
43
43
  val klarnaCustomerToken: String? = null,
44
44
  val sessionData: SessionData? = null,
45
- // apaya
46
- val mx: String? = null,
47
- val mnc: Int? = null,
48
- val mcc: Int? = null,
49
- val hashedIdentifier: String? = null,
50
- val currencyCode: String? = null,
51
- val productId: String? = null,
52
- // async
53
45
  val paymentMethodType: String? = null,
54
- // bin
55
46
  val binData: BinData? = null,
47
+ val bankName: String? = null
56
48
  )
57
49
 
58
50
  @Serializable
59
51
  data class ExternalPayerInfo(
60
52
  val email: String,
53
+ val externalPayerId: String?,
54
+ val firstName: String?,
55
+ val lastName: String?
61
56
  )
62
57
 
63
58
  @Serializable
@@ -1,6 +1,7 @@
1
1
  package com.primerioreactnative.datamodels
2
2
 
3
3
  import android.content.Context
4
+ import com.google.android.gms.wallet.button.ButtonConstants
4
5
  import com.primerioreactnative.extensions.toLocale
5
6
  import com.primerioreactnative.extensions.toPrimerDebugOptions
6
7
  import com.primerioreactnative.extensions.toPrimerPaymentMethodOptions
@@ -25,20 +26,20 @@ data class PrimerSettingsRN(
25
26
 
26
27
  @Serializable
27
28
  data class LocaleSettingsRN(
28
- val languageCode: String? = null,
29
- val localeCode: String? = null
29
+ val languageCode: String? = null,
30
+ val localeCode: String? = null
30
31
  )
31
32
 
32
33
  @Serializable
33
34
  data class PrimerPaymentMethodOptionsRN(
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(),
35
+ @SerialName("android")
36
+ val androidSettingsRN: AndroidSettingsRN = AndroidSettingsRN(),
37
+ var cardPaymentOptions: PrimerCardPaymentOptionsRN = PrimerCardPaymentOptionsRN(),
38
+ var googlePayOptions: PrimerGooglePayOptionsRN = PrimerGooglePayOptionsRN(),
39
+ var klarnaOptions: PrimerKlarnaOptionsRN = PrimerKlarnaOptionsRN(),
40
+ var apayaOptions: PrimerApayaOptionsRN = PrimerApayaOptionsRN(),
41
+ var threeDsOptions: PrimerThreeDsOptionsRN = PrimerThreeDsOptionsRN(),
42
+ var stripeOptions: PrimerStripeOptionsRN = PrimerStripeOptionsRN(),
42
43
  )
43
44
 
44
45
  @Serializable
@@ -49,6 +50,7 @@ data class PrimerUIOptionsRN(
49
50
  var isInitScreenEnabled: Boolean = true,
50
51
  var isSuccessScreenEnabled: Boolean = true,
51
52
  var isErrorScreenEnabled: Boolean = true,
53
+ var dismissalMechanism: List<String>? = listOf("gestures"),
52
54
  var theme: PrimerThemeRN = PrimerThemeRN()
53
55
  )
54
56
 
@@ -120,8 +122,8 @@ data class PrimerCardPaymentOptionsRN(var is3DSOnVaultingEnabled: Boolean = true
120
122
 
121
123
  @Serializable
122
124
  data class PrimerThreeDsOptionsRN(
123
- @SerialName("android")
124
- val threeDsOptionsAndroid: PrimerThreeDsAndroidOptionsRN? = null
125
+ @SerialName("android")
126
+ val threeDsOptionsAndroid: PrimerThreeDsAndroidOptionsRN? = null
125
127
  )
126
128
 
127
129
  @Serializable
@@ -129,19 +131,21 @@ data class PrimerThreeDsAndroidOptionsRN(val threeDsAppRequestorUrl: String? = n
129
131
 
130
132
  @Serializable
131
133
  data class PrimerGooglePayOptionsRN(
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
134
+ var merchantName: String? = null,
135
+ var allowedCardNetworks: List<String> =
136
+ listOf("AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"),
137
+ var buttonStyle: GooglePayButtonStyle = GooglePayButtonStyle.BLACK,
138
+ @SerialName("isCaptureBillingAddressEnabled")
139
+ var captureBillingAddress: Boolean = false,
140
+ @SerialName("isExistingPaymentMethodRequired")
141
+ var existingPaymentMethodRequired: Boolean = false,
142
+ var shippingAddressParameters: PrimerGoogleShippingAddressParametersRN? = null,
143
+ @SerialName("requireShippingMethod")
144
+ var requireShippingMethod: Boolean = false,
145
+ @SerialName("emailAddressRequired")
146
+ var emailAddressRequired: Boolean = false,
147
+ @SerialName("buttonOptions")
148
+ var buttonOptions: PrimerGooglePayButtonOptionsRN? = null
145
149
  )
146
150
 
147
151
  @Serializable
@@ -149,30 +153,38 @@ data class PrimerGoogleShippingAddressParametersRN(
149
153
  var phoneNumberRequired: Boolean = false
150
154
  )
151
155
 
156
+ @Serializable
157
+ data class PrimerGooglePayButtonOptionsRN(
158
+ @SerialName("buttonTheme")
159
+ var buttonTheme: Int? = null,
160
+ @SerialName("buttonType")
161
+ var buttonType: Int? = null
162
+ )
163
+
152
164
  @Serializable
153
165
  data class PrimerKlarnaOptionsRN(
154
- var recurringPaymentDescription: String? = null,
155
- @Deprecated("This property is deprecated and will be removed in future release.")
156
- var webViewTitle: String? = null,
166
+ var recurringPaymentDescription: String? = null,
167
+ @Deprecated("This property is deprecated and will be removed in future release.")
168
+ var webViewTitle: String? = null,
157
169
  )
158
170
 
159
171
  @Serializable
160
172
  data class PrimerStripeOptionsRN(
161
- val mandateData: MandateDataRN? = null,
162
- val publishableKey: String? = null,
173
+ val mandateData: MandateDataRN? = null,
174
+ val publishableKey: String? = null,
163
175
  ) {
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
- )
176
+ @Serializable
177
+ data class MandateDataRN(
178
+ @SerialName("fullMandateText") val fullMandateText: String? = null,
179
+ @SerialName("fullMandateStringResourceName") val fullMandateStringResName: String? = null,
180
+ val merchantName: String? = null
181
+ )
170
182
  }
171
183
 
172
184
  @Serializable
173
185
  @Deprecated("This class is deprecated and will be removed in future release.")
174
186
  data class PrimerApayaOptionsRN(
175
- var webViewTitle: String? = null,
187
+ var webViewTitle: String? = null,
176
188
  )
177
189
 
178
190
  fun PrimerSettingsRN.toPrimerSettings(context: Context) = PrimerSettings(
@@ -2,7 +2,7 @@ package com.primerioreactnative.datamodels.extensions.ach
2
2
 
3
3
  import com.primerioreactnative.datamodels.NamedComponentValidatableData
4
4
  import com.primerioreactnative.datamodels.ach.AchUserDetailsStepRN
5
- import io.primer.android.components.presentation.paymentMethods.nativeUi.stripe.ach.composable.AchUserDetailsCollectableData
5
+ import io.primer.android.stripe.ach.api.composable.AchUserDetailsCollectableData
6
6
  import kotlinx.serialization.Serializable
7
7
  import com.primerioreactnative.datamodels.ach.AchUserDetailsCollectableDataRN
8
8
 
@@ -1,7 +1,7 @@
1
1
  package com.primerioreactnative.datamodels.extensions.ach
2
2
 
3
3
  import com.primerioreactnative.datamodels.ach.AchUserDetailsStepRN
4
- import io.primer.android.components.presentation.paymentMethods.nativeUi.stripe.ach.composable.AchUserDetailsStep
4
+ import io.primer.android.stripe.ach.api.composable.AchUserDetailsStep
5
5
 
6
6
  internal fun AchUserDetailsStep.UserDetailsCollected.toUserDetailsCollectedRN() =
7
7
  AchUserDetailsStepRN.UserDetailsCollectedRN()
@@ -4,21 +4,34 @@ import com.primerioreactnative.datamodels.PrimerPaymentInstrumentTokenRN
4
4
  import io.primer.android.data.tokenization.models.PaymentInstrumentData
5
5
 
6
6
  internal fun PaymentInstrumentData.toPaymentInstrumentDataRN() =
7
- PrimerPaymentInstrumentTokenRN.PaymentInstrumentData(
8
- network,
9
- cardholderName,
10
- first6Digits,
11
- last4Digits,
12
- expirationMonth,
13
- expirationYear,
14
- gocardlessMandateId,
15
- externalPayerInfo?.email?.let { PrimerPaymentInstrumentTokenRN.ExternalPayerInfo(it) },
16
- klarnaCustomerToken,
17
- sessionData?.let {
7
+ PrimerPaymentInstrumentTokenRN.PaymentInstrumentData(
8
+ network = network,
9
+ cardholderName = cardholderName,
10
+ first6Digits = first6Digits,
11
+ last4Digits = last4Digits,
12
+ accountNumberLast4Digits = accountNumberLast4Digits,
13
+ expirationMonth = expirationMonth,
14
+ expirationYear = expirationYear,
15
+ externalPayerInfo = externalPayerInfo?.let {
16
+ PrimerPaymentInstrumentTokenRN.ExternalPayerInfo(
17
+ email = it.email,
18
+ externalPayerId = it.externalPayerId,
19
+ firstName = it.firstName,
20
+ lastName = it.lastName
21
+ )
22
+ },
23
+ klarnaCustomerToken = klarnaCustomerToken,
24
+ sessionData = sessionData?.let {
18
25
  PrimerPaymentInstrumentTokenRN.SessionData(
19
- it.recurringDescription,
20
- it.billingAddress?.let { PrimerPaymentInstrumentTokenRN.BillingAddress(it.email) })
26
+ recurringDescription = it.recurringDescription,
27
+ billingAddress = it.billingAddress?.let {
28
+ PrimerPaymentInstrumentTokenRN.BillingAddress(email = it.email)
29
+ }
30
+ )
31
+ },
32
+ paymentMethodType = paymentMethodType,
33
+ binData = binData?.let {
34
+ PrimerPaymentInstrumentTokenRN.BinData(network = it.network)
21
35
  },
22
- mx, mnc, mcc, hashedIdentifier, currencyCode, productId, paymentMethodType,
23
- binData?.let { PrimerPaymentInstrumentTokenRN.BinData(it.network) }
24
- )
36
+ bankName = bankName
37
+ )
@@ -4,17 +4,17 @@ import com.primerioreactnative.datamodels.MultibancoCheckoutAdditionalInfoRN
4
4
  import com.primerioreactnative.datamodels.PromptPayCheckoutAdditionalInfoRN
5
5
  import com.primerioreactnative.datamodels.XenditCheckoutVoucherAdditionalInfoRN
6
6
  import com.primerioreactnative.datamodels.AchAdditionalInfoDisplayMandateRN
7
- import io.primer.android.domain.payments.additionalInfo.MultibancoCheckoutAdditionalInfo
8
- import io.primer.android.domain.payments.additionalInfo.PrimerCheckoutAdditionalInfo
9
- import io.primer.android.domain.payments.additionalInfo.PromptPayCheckoutAdditionalInfo
10
- import io.primer.android.domain.payments.additionalInfo.XenditCheckoutVoucherAdditionalInfo
11
- import io.primer.android.domain.payments.additionalInfo.AchAdditionalInfo
7
+ import io.primer.android.vouchers.multibanco.MultibancoCheckoutAdditionalInfo
8
+ import io.primer.android.payments.core.additionalInfo.PrimerCheckoutAdditionalInfo
9
+ import io.primer.android.qrcode.QrCodeCheckoutAdditionalInfo
10
+ import io.primer.android.vouchers.retailOutlets.XenditCheckoutVoucherAdditionalInfo
11
+ import io.primer.android.stripe.ach.api.additionalInfo.AchAdditionalInfo
12
12
 
13
13
  internal fun PrimerCheckoutAdditionalInfo.toCheckoutAdditionalInfoRN() = when (this) {
14
14
  is MultibancoCheckoutAdditionalInfo ->
15
15
  MultibancoCheckoutAdditionalInfoRN(expiresAt, reference, entity)
16
- is PromptPayCheckoutAdditionalInfo ->
17
- PromptPayCheckoutAdditionalInfoRN(expiresAt, qrCodeUrl, qrCodeBase64)
16
+ is QrCodeCheckoutAdditionalInfo ->
17
+ PromptPayCheckoutAdditionalInfoRN(expiresAt.orEmpty(), qrCodeUrl, qrCodeBase64)
18
18
  is XenditCheckoutVoucherAdditionalInfo ->
19
19
  XenditCheckoutVoucherAdditionalInfoRN(expiresAt, couponCode, retailerName)
20
20
  is AchAdditionalInfo.DisplayMandate ->
@@ -1,7 +1,7 @@
1
1
  package com.primerioreactnative.extensions
2
2
 
3
3
  import com.primerioreactnative.datamodels.PrimerIssuingBankRN
4
- import io.primer.android.domain.rpc.banks.models.IssuingBank
4
+ import io.primer.android.banks.implementation.rpc.domain.models.IssuingBank
5
5
 
6
6
  internal fun IssuingBank.toPrimerIssuingBankRN() =
7
7
  PrimerIssuingBankRN(id, name, disabled, iconUrl)
@@ -5,6 +5,8 @@ import com.primerioreactnative.datamodels.PrimerShippingRN
5
5
  import io.primer.android.domain.action.models.PrimerOrder
6
6
  import io.primer.android.domain.action.models.PrimerShipping
7
7
 
8
- internal fun PrimerOrder.toPrimerOrderRN() = PrimerOrderRN(countryCode, shipping?.toPrimerShippingRN())
8
+ internal fun PrimerOrder.toPrimerOrderRN() =
9
+ PrimerOrderRN(countryCode = countryCode, shipping = shipping?.toPrimerShippingRN())
9
10
 
10
- internal fun PrimerShipping.toPrimerShippingRN() = PrimerShippingRN(amount, methodId, methodName, methodDescription)
11
+ internal fun PrimerShipping.toPrimerShippingRN() =
12
+ PrimerShippingRN(amount, methodId, methodName, methodDescription)
@@ -6,54 +6,67 @@ import io.primer.android.data.settings.PrimerStripeOptions.MandateData.TemplateM
6
6
  import io.primer.android.data.settings.PrimerStripeOptions.MandateData.FullMandateData
7
7
  import io.primer.android.data.settings.PrimerStripeOptions.MandateData.FullMandateStringData
8
8
  import android.content.Context
9
+ import com.google.android.gms.wallet.button.ButtonConstants
10
+ import com.primerioreactnative.components.manager.googlePay.PrimerGooglePayButtonOptionsMapping
9
11
 
10
12
  fun PrimerPaymentMethodOptionsRN.toPrimerPaymentMethodOptions(context: Context) =
11
- PrimerPaymentMethodOptions(
12
- androidSettingsRN.redirectScheme,
13
- googlePayOptions.toPrimerGooglePayOptions(),
14
- klarnaOptions.toPrimerKlarnaOptions(),
15
- threeDsOptions.toPrimerThreeDsOptions(),
16
- stripeOptions.toPrimerStripeOptions(context),
17
- )
13
+ PrimerPaymentMethodOptions(
14
+ androidSettingsRN.redirectScheme,
15
+ googlePayOptions.toPrimerGooglePayOptions(),
16
+ klarnaOptions.toPrimerKlarnaOptions(),
17
+ threeDsOptions.toPrimerThreeDsOptions(),
18
+ stripeOptions.toPrimerStripeOptions(context),
19
+ )
18
20
 
19
21
  fun PrimerGooglePayOptionsRN.toPrimerGooglePayOptions() =
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
- )
22
+ PrimerGooglePayOptions(
23
+ merchantName = merchantName,
24
+ allowedCardNetworks = allowedCardNetworks,
25
+ buttonStyle = buttonStyle,
26
+ captureBillingAddress = captureBillingAddress,
27
+ existingPaymentMethodRequired = existingPaymentMethodRequired,
28
+ shippingAddressParameters = shippingAddressParameters?.toPrimerGoogleShippingAddressParameters(),
29
+ requireShippingMethod = requireShippingMethod,
30
+ emailAddressRequired = emailAddressRequired,
31
+ buttonOptions = buttonOptions?.toPrimerGooglePayButtonOptions() ?: GooglePayButtonOptions()
32
+ )
30
33
 
31
34
  fun PrimerGoogleShippingAddressParametersRN.toPrimerGoogleShippingAddressParameters() =
32
- PrimerGoogleShippingAddressParameters(phoneNumberRequired)
35
+ PrimerGoogleShippingAddressParameters(phoneNumberRequired)
36
+
37
+ fun PrimerGooglePayButtonOptionsRN.toPrimerGooglePayButtonOptions() = GooglePayButtonOptions(
38
+ buttonType = buttonType ?: ButtonConstants.ButtonType.PAY,
39
+ buttonTheme = buttonTheme ?: ButtonConstants.ButtonTheme.DARK,
40
+ )
33
41
 
34
42
  fun PrimerKlarnaOptionsRN.toPrimerKlarnaOptions() =
35
- PrimerKlarnaOptions(recurringPaymentDescription, webViewTitle)
43
+ PrimerKlarnaOptions(recurringPaymentDescription, webViewTitle)
36
44
 
37
45
  fun PrimerThreeDsOptionsRN.toPrimerThreeDsOptions() =
38
- PrimerThreeDsOptions(threeDsOptionsAndroid?.threeDsAppRequestorUrl)
46
+ PrimerThreeDsOptions(threeDsOptionsAndroid?.threeDsAppRequestorUrl)
39
47
 
40
48
  fun PrimerStripeOptionsRN.toPrimerStripeOptions(context: Context) =
41
- PrimerStripeOptions(mandateData = mandateData?.toMandateData(context), publishableKey = publishableKey)
49
+ PrimerStripeOptions(
50
+ mandateData = mandateData?.toMandateData(context),
51
+ publishableKey = publishableKey
52
+ )
42
53
 
43
54
  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
- }
55
+ merchantName != null -> TemplateMandateData(merchantName)
56
+ fullMandateStringResName != null -> {
57
+ val stringId = context.getResources()
58
+ .getIdentifier(fullMandateStringResName, "string", context.getPackageName())
59
+ if (stringId != 0) {
60
+ FullMandateData(stringId)
61
+ } else {
62
+ if (fullMandateText != null) {
63
+ FullMandateStringData(fullMandateText)
64
+ } else {
65
+ error("Missing mandate data")
66
+ }
56
67
  }
57
- fullMandateText != null -> FullMandateStringData(fullMandateText)
58
- else -> error("Missing mandate data")
68
+ }
69
+
70
+ fullMandateText != null -> FullMandateStringData(fullMandateText)
71
+ else -> error("Missing mandate data")
59
72
  }
@@ -2,11 +2,22 @@ package com.primerioreactnative.extensions
2
2
 
3
3
  import com.primerioreactnative.datamodels.PrimerUIOptionsRN
4
4
  import io.primer.android.ui.settings.PrimerUIOptions
5
+ import io.primer.android.data.settings.DismissalMechanism
5
6
 
7
+ @OptIn(kotlin.ExperimentalStdlibApi::class)
6
8
  internal fun PrimerUIOptionsRN.toPrimerUIOptions() =
7
9
  PrimerUIOptions(
8
10
  isInitScreenEnabled,
9
11
  isSuccessScreenEnabled,
10
12
  isErrorScreenEnabled,
13
+ buildSet {
14
+ for (it in dismissalMechanism.orEmpty()) {
15
+ when (it) {
16
+ "gestures" -> add(DismissalMechanism.GESTURES)
17
+ "closeButton" -> add(DismissalMechanism.CLOSE_BUTTON)
18
+ else -> { /* no-op */ }
19
+ }
20
+ }
21
+ }.toList().takeIf { it.isNotEmpty() } ?: listOf(DismissalMechanism.GESTURES),
11
22
  theme.toPrimerTheme()
12
23
  )
@@ -1,7 +1,7 @@
1
1
  package com.primerioreactnative.extensions.klarna
2
2
 
3
3
  import com.primerioreactnative.datamodels.klarna.KlarnaPaymentCategoryRN
4
- import io.primer.android.components.domain.payments.paymentMethods.nativeUi.klarna.models.KlarnaPaymentCategory
4
+ import io.primer.android.klarna.implementation.session.domain.models.KlarnaPaymentCategory
5
5
 
6
6
  internal fun KlarnaPaymentCategory.toKlarnaPaymentCategoryRN() =
7
7
  KlarnaPaymentCategoryRN(
@@ -1,7 +1,7 @@
1
1
  package com.primerioreactnative.extensions.klarna
2
2
 
3
3
  import com.primerioreactnative.datamodels.klarna.KlarnaPaymentCategoryRN
4
- import io.primer.android.components.domain.payments.paymentMethods.nativeUi.klarna.models.KlarnaPaymentCategory
4
+ import io.primer.android.klarna.implementation.session.domain.models.KlarnaPaymentCategory
5
5
 
6
6
  internal fun KlarnaPaymentCategoryRN.toKlarnaPaymentCategory() =
7
7
  KlarnaPaymentCategory(
@@ -2,8 +2,8 @@ package com.primerioreactnative.extensions.klarna
2
2
 
3
3
  import com.primerioreactnative.datamodels.klarna.KlarnaPaymentCollectableDataRN.PaymentOptionsRN
4
4
  import com.primerioreactnative.datamodels.klarna.KlarnaPaymentCollectableDataRN.FinalizePaymentRN
5
- import io.primer.android.components.presentation.paymentMethods.nativeUi.klarna.models.KlarnaPaymentCollectableData.PaymentOptions
6
- import io.primer.android.components.presentation.paymentMethods.nativeUi.klarna.models.KlarnaPaymentCollectableData.FinalizePayment
5
+ import io.primer.android.klarna.api.composable.KlarnaPaymentCollectableData.PaymentOptions
6
+ import io.primer.android.klarna.api.composable.KlarnaPaymentCollectableData.FinalizePayment
7
7
 
8
8
  internal fun PaymentOptions.toPaymentOptionsRN() =
9
9
  PaymentOptionsRN(
@@ -5,10 +5,10 @@ import com.primerioreactnative.datamodels.klarna.KlarnaPaymentStepRN.PaymentView
5
5
  import com.primerioreactnative.datamodels.klarna.KlarnaPaymentStepRN.PaymentSessionAuthorizedRN
6
6
  import com.primerioreactnative.datamodels.klarna.KlarnaPaymentStepRN.PaymentSessionFinalizedRN
7
7
  import com.primerioreactnative.extensions.klarna.toKlarnaPaymentCategoryRN
8
- import io.primer.android.components.presentation.paymentMethods.nativeUi.klarna.models.KlarnaPaymentStep.PaymentSessionCreated
9
- import io.primer.android.components.presentation.paymentMethods.nativeUi.klarna.models.KlarnaPaymentStep.PaymentViewLoaded
10
- import io.primer.android.components.presentation.paymentMethods.nativeUi.klarna.models.KlarnaPaymentStep.PaymentSessionAuthorized
11
- import io.primer.android.components.presentation.paymentMethods.nativeUi.klarna.models.KlarnaPaymentStep.PaymentSessionFinalized
8
+ import io.primer.android.klarna.api.composable.KlarnaPaymentStep.PaymentSessionCreated
9
+ import io.primer.android.klarna.api.composable.KlarnaPaymentStep.PaymentViewLoaded
10
+ import io.primer.android.klarna.api.composable.KlarnaPaymentStep.PaymentSessionAuthorized
11
+ import io.primer.android.klarna.api.composable.KlarnaPaymentStep.PaymentSessionFinalized
12
12
 
13
13
  internal fun PaymentSessionCreated.toPaymentSessionCreatedRN() =
14
14
  PaymentSessionCreatedRN(paymentCategories = paymentCategories.map { it.toKlarnaPaymentCategoryRN() })
@@ -43,12 +43,11 @@ extension PrimerSettings {
43
43
 
44
44
  var shippingOptions: PrimerApplePayOptions.ShippingOptions? = nil
45
45
  if let rnShippingOptions = rnApplePayOptions["shippingOptions"] as? [String: Any] {
46
- let isCaptureShippingAddressEnabled = rnShippingOptions["isCaptureShippingAddressEnabled"] as? Bool ?? false
47
46
  let requireShippingMethod = rnShippingOptions["requireShippingMethod"] as? Bool ?? false
48
47
 
49
- var additionalShippingContactFields: [PrimerApplePayOptions.ShippingOptions.AdditionalShippingContactField]? = nil
50
- if let additionalFieldsStrings = rnShippingOptions["additionalShippingContactFields"] as? [String] {
51
- additionalShippingContactFields = additionalFieldsStrings.compactMap { fieldStr in
48
+ var shippingContactFields: [PrimerApplePayOptions.RequiredContactField]? = nil
49
+ if let requiredFieldsStrings = rnShippingOptions["shippingContactFields"] as? [String] {
50
+ shippingContactFields = requiredFieldsStrings.compactMap { fieldStr in
52
51
  switch fieldStr {
53
52
  case "name":
54
53
  return .name
@@ -56,6 +55,8 @@ extension PrimerSettings {
56
55
  return .emailAddress
57
56
  case "phoneNumber":
58
57
  return .phoneNumber
58
+ case "postalAddress":
59
+ return .postalAddress
59
60
  default:
60
61
  return nil // Ignore unknown values or handle accordingly
61
62
  }
@@ -63,19 +64,44 @@ extension PrimerSettings {
63
64
  }
64
65
 
65
66
  shippingOptions = PrimerApplePayOptions.ShippingOptions(
66
- isCaptureShippingAddressEnabled: isCaptureShippingAddressEnabled,
67
- additionalShippingContactFields: additionalShippingContactFields,
67
+ shippingContactFields: shippingContactFields,
68
68
  requireShippingMethod: requireShippingMethod
69
69
  )
70
70
  }
71
71
 
72
+ var billingOptions: PrimerApplePayOptions.BillingOptions? = nil
73
+ if let rnBillingOptions = rnApplePayOptions["billingOptions"] as? [String: Any] {
74
+ var requiredBillingContactFields: [PrimerApplePayOptions.RequiredContactField]? = nil
75
+ if let requiredFieldsStrings = rnBillingOptions["requiredBillingContactFields"] as? [String] {
76
+ requiredBillingContactFields = requiredFieldsStrings.compactMap { fieldStr in
77
+ switch fieldStr {
78
+ case "name":
79
+ return .name
80
+ case "emailAddress":
81
+ return .emailAddress
82
+ case "phoneNumber":
83
+ return .phoneNumber
84
+ case "postalAddress":
85
+ return .postalAddress
86
+ default:
87
+ return nil // Ignore unknown values or handle accordingly
88
+ }
89
+ }
90
+ }
91
+
92
+ billingOptions = PrimerApplePayOptions.BillingOptions(
93
+ requiredBillingContactFields: requiredBillingContactFields
94
+ )
95
+ }
96
+
72
97
  applePayOptions = PrimerApplePayOptions(
73
98
  merchantIdentifier: rnApplePayMerchantIdentifier,
74
99
  merchantName: rnApplePayMerchantName,
75
100
  isCaptureBillingAddressEnabled: rnApplePayIsCaptureBillingAddressEnabled,
76
101
  showApplePayForUnsupportedDevice: rnApplePayShowApplePayForUnsupportedDevice,
77
102
  checkProvidedNetworks: rnApplePayCheckProvidedNetworks,
78
- shippingOptions: shippingOptions
103
+ shippingOptions: shippingOptions,
104
+ billingOptions: billingOptions
79
105
  )
80
106
  }
81
107
 
@@ -99,6 +125,23 @@ extension PrimerSettings {
99
125
  isInitScreenEnabled: rnUIOptions["isInitScreenEnabled"] as? Bool,
100
126
  isSuccessScreenEnabled: rnUIOptions["isSuccessScreenEnabled"] as? Bool,
101
127
  isErrorScreenEnabled: rnUIOptions["isErrorScreenEnabled"] as? Bool,
128
+ dismissalMechanism: {
129
+ if let mechanisms = rnUIOptions["dismissalMechanism"] as? [String] {
130
+ var dismissalMechanisms: [DismissalMechanism] = []
131
+ for mechanism in mechanisms {
132
+ switch mechanism {
133
+ case "gestures":
134
+ dismissalMechanisms.append(.gestures)
135
+ case "closeButton":
136
+ dismissalMechanisms.append(.closeButton)
137
+ default:
138
+ break
139
+ }
140
+ }
141
+ return dismissalMechanisms.isEmpty ? nil : dismissalMechanisms
142
+ }
143
+ return nil
144
+ }(),
102
145
  theme: theme)
103
146
  }
104
147
 
@@ -18,7 +18,14 @@ RCT_EXTERN_METHOD(getPaymentMethodAsset:(NSString *)paymentMethodType
18
18
  resolver:(RCTPromiseResolveBlock)resolver
19
19
  rejecter:(RCTPromiseRejectBlock)rejecter)
20
20
 
21
+ RCT_EXTERN_METHOD(getPaymentMethodResource:(NSString *)paymentMethodType
22
+ resolver:(RCTPromiseResolveBlock)resolver
23
+ rejecter:(RCTPromiseRejectBlock)rejecter)
24
+
21
25
  RCT_EXTERN_METHOD(getPaymentMethodAssets:(RCTPromiseResolveBlock)resolver
22
26
  rejecter:(RCTPromiseRejectBlock)rejecter)
23
27
 
28
+ RCT_EXTERN_METHOD(getPaymentMethodResources:(RCTPromiseResolveBlock)resolver
29
+ rejecter:(RCTPromiseRejectBlock)rejecter)
30
+
24
31
  @end