@stripe/stripe-react-native 0.65.0 → 0.66.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 (239) hide show
  1. package/README.md +2 -2
  2. package/android/detekt/detekt-baseline.xml +1 -76
  3. package/android/gradle.properties +4 -4
  4. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +3 -1
  5. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormViewManager.kt +2 -1
  6. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +56 -58
  7. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementEvent.kt +26 -0
  8. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +139 -0
  9. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +59 -0
  10. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +105 -49
  11. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +72 -12
  12. package/android/src/main/java/com/reactnativestripesdk/EventEmitterCompat.kt +4 -0
  13. package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetManager.kt +8 -4
  14. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +2 -1
  15. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +26 -11
  16. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +2 -1
  17. package/android/src/main/java/com/reactnativestripesdk/NavigationBarView.kt +14 -5
  18. package/android/src/main/java/com/reactnativestripesdk/PaymentElementConfig.kt +6 -2
  19. package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherManager.kt +2 -1
  20. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +2 -1
  21. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfig.kt +6 -2
  22. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementViewManager.kt +2 -1
  23. package/android/src/main/java/com/reactnativestripesdk/PaymentOptionDisplayDataMapper.kt +8 -4
  24. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +9 -3
  25. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +118 -48
  26. package/android/src/main/java/com/reactnativestripesdk/StripeAbstractComposeView.kt +1 -0
  27. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +281 -46
  28. package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +2 -0
  29. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherManager.kt +2 -1
  30. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +3 -1
  31. package/android/src/main/java/com/reactnativestripesdk/customersheet/CustomerSheetManager.kt +8 -18
  32. package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerAdapter.kt +3 -1
  33. package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerSessionProvider.kt +2 -1
  34. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +2 -1
  35. package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutAddressUpdate.kt +45 -0
  36. package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutMappers.kt +127 -0
  37. package/android/src/main/java/com/reactnativestripesdk/utils/DefaultActivityLifecycleCallbacks.kt +41 -0
  38. package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +4 -2
  39. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -1
  40. package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +29 -13
  41. package/android/src/main/java/com/reactnativestripesdk/utils/PostalCodeUtilities.kt +2 -1
  42. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +6 -0
  43. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +2 -0
  44. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +35 -0
  45. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +18 -0
  46. package/android/src/oldarch/java/com/reactnativestripesdk/NativeOnrampSdkModuleSpec.java +17 -3
  47. package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +13 -1
  48. package/android/src/onramp/java/com/reactnativestripesdk/OnrampMappers.kt +116 -0
  49. package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +109 -1
  50. package/android/src/test/java/com/reactnativestripesdk/DrawableLoadingTest.kt +6 -2
  51. package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +60 -0
  52. package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +145 -0
  53. package/android/src/test/java/com/reactnativestripesdk/mappers/PaymentOptionDisplayDataMapperTest.kt +9 -4
  54. package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutMappersTest.kt +98 -0
  55. package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutTestFixtures.java +57 -0
  56. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewController.swift +6 -8
  57. package/ios/CurrencySelectorElementManager.m +16 -0
  58. package/ios/CurrencySelectorElementView.swift +159 -0
  59. package/ios/EmbeddedPaymentElementView.swift +1 -1
  60. package/ios/Mappers+Checkout.swift +337 -0
  61. package/ios/Mappers.swift +90 -2
  62. package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +16 -2
  63. package/ios/NewArch/StripeCurrencySelectorElementComponentView.h +10 -0
  64. package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +89 -0
  65. package/ios/OldArch/StripeSdkEventEmitterCompat.h +1 -0
  66. package/ios/OldArch/StripeSdkEventEmitterCompat.m +6 -0
  67. package/ios/PaymentOptionDisplayData+ReactNative.swift +1 -1
  68. package/ios/PaymentSheetAppearance.swift +1 -1
  69. package/ios/StripeOnrampSdk.mm +19 -0
  70. package/ios/StripeSdk.mm +136 -0
  71. package/ios/StripeSdkEmitter.swift +1 -0
  72. package/ios/StripeSdkImpl+Checkout.swift +360 -0
  73. package/ios/StripeSdkImpl+CustomerSheet.swift +1 -1
  74. package/ios/StripeSdkImpl+Embedded.swift +108 -27
  75. package/ios/StripeSdkImpl+PaymentSheet.swift +18 -2
  76. package/ios/StripeSdkImpl.swift +89 -7
  77. package/jest/mock.js +13 -1
  78. package/lib/commonjs/components/AddToWalletButton.js +1 -1
  79. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  80. package/lib/commonjs/components/AddressSheet.js +1 -1
  81. package/lib/commonjs/components/AddressSheet.js.map +1 -1
  82. package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
  83. package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
  84. package/lib/commonjs/components/CardField.js +1 -1
  85. package/lib/commonjs/components/CardField.js.map +1 -1
  86. package/lib/commonjs/components/CardForm.js +1 -1
  87. package/lib/commonjs/components/CardForm.js.map +1 -1
  88. package/lib/commonjs/components/CurrencySelectorElement.js +2 -0
  89. package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -0
  90. package/lib/commonjs/components/PaymentMethodMessagingElement.js +1 -1
  91. package/lib/commonjs/components/PaymentMethodMessagingElement.js.map +1 -1
  92. package/lib/commonjs/components/PlatformPayButton.js +1 -1
  93. package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
  94. package/lib/commonjs/components/StripeContainer.js +1 -1
  95. package/lib/commonjs/components/StripeContainer.js.map +1 -1
  96. package/lib/commonjs/connect/Components.js +1 -1
  97. package/lib/commonjs/connect/Components.js.map +1 -1
  98. package/lib/commonjs/connect/ConnectComponentsProvider.js +1 -1
  99. package/lib/commonjs/connect/ConnectComponentsProvider.js.map +1 -1
  100. package/lib/commonjs/connect/EmbeddedComponent.js +1 -1
  101. package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
  102. package/lib/commonjs/connect/ModalCloseButton.js +1 -1
  103. package/lib/commonjs/connect/ModalCloseButton.js.map +1 -1
  104. package/lib/commonjs/connect/NavigationBar.js +1 -1
  105. package/lib/commonjs/connect/NavigationBar.js.map +1 -1
  106. package/lib/commonjs/events.js.map +1 -1
  107. package/lib/commonjs/functions.js +1 -1
  108. package/lib/commonjs/functions.js.map +1 -1
  109. package/lib/commonjs/helpers.js +1 -1
  110. package/lib/commonjs/hooks/useCheckout.js +1 -1
  111. package/lib/commonjs/hooks/useCheckout.js.map +1 -1
  112. package/lib/commonjs/hooks/useOnramp.js +1 -1
  113. package/lib/commonjs/hooks/useOnramp.js.map +1 -1
  114. package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
  115. package/lib/commonjs/specs/NativeAddressSheet.js +1 -1
  116. package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
  117. package/lib/commonjs/specs/NativeAuBECSDebitForm.js +1 -1
  118. package/lib/commonjs/specs/NativeCardField.js +1 -1
  119. package/lib/commonjs/specs/NativeCardField.js.map +1 -1
  120. package/lib/commonjs/specs/NativeCardForm.js +1 -1
  121. package/lib/commonjs/specs/NativeCardForm.js.map +1 -1
  122. package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js +1 -1
  123. package/lib/commonjs/specs/NativeCurrencySelectorElement.js +2 -0
  124. package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -0
  125. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
  126. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  127. package/lib/commonjs/specs/NativeGooglePayButton.js +1 -1
  128. package/lib/commonjs/specs/NativeNavigationBar.js +1 -1
  129. package/lib/commonjs/specs/NativeOnrampSdkModule.js.map +1 -1
  130. package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js +1 -1
  131. package/lib/commonjs/specs/NativeStripeContainer.js +1 -1
  132. package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
  133. package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
  134. package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
  135. package/lib/module/components/AddToWalletButton.js +1 -1
  136. package/lib/module/components/AddToWalletButton.js.map +1 -1
  137. package/lib/module/components/AddressSheet.js +1 -1
  138. package/lib/module/components/AddressSheet.js.map +1 -1
  139. package/lib/module/components/AuBECSDebitForm.js +1 -1
  140. package/lib/module/components/AuBECSDebitForm.js.map +1 -1
  141. package/lib/module/components/CardField.js +1 -1
  142. package/lib/module/components/CardField.js.map +1 -1
  143. package/lib/module/components/CardForm.js +1 -1
  144. package/lib/module/components/CardForm.js.map +1 -1
  145. package/lib/module/components/CurrencySelectorElement.js +2 -0
  146. package/lib/module/components/CurrencySelectorElement.js.map +1 -0
  147. package/lib/module/components/PaymentMethodMessagingElement.js +1 -1
  148. package/lib/module/components/PaymentMethodMessagingElement.js.map +1 -1
  149. package/lib/module/components/PlatformPayButton.js +1 -1
  150. package/lib/module/components/PlatformPayButton.js.map +1 -1
  151. package/lib/module/components/StripeContainer.js +1 -1
  152. package/lib/module/components/StripeContainer.js.map +1 -1
  153. package/lib/module/connect/Components.js +1 -1
  154. package/lib/module/connect/Components.js.map +1 -1
  155. package/lib/module/connect/ConnectComponentsProvider.js +1 -1
  156. package/lib/module/connect/ConnectComponentsProvider.js.map +1 -1
  157. package/lib/module/connect/EmbeddedComponent.js +1 -1
  158. package/lib/module/connect/EmbeddedComponent.js.map +1 -1
  159. package/lib/module/connect/ModalCloseButton.js +1 -1
  160. package/lib/module/connect/ModalCloseButton.js.map +1 -1
  161. package/lib/module/connect/NavigationBar.js +1 -1
  162. package/lib/module/connect/NavigationBar.js.map +1 -1
  163. package/lib/module/events.js.map +1 -1
  164. package/lib/module/functions.js +1 -1
  165. package/lib/module/functions.js.map +1 -1
  166. package/lib/module/helpers.js +1 -1
  167. package/lib/module/hooks/useCheckout.js +1 -1
  168. package/lib/module/hooks/useCheckout.js.map +1 -1
  169. package/lib/module/hooks/useOnramp.js +1 -1
  170. package/lib/module/hooks/useOnramp.js.map +1 -1
  171. package/lib/module/specs/NativeAddToWalletButton.js +1 -1
  172. package/lib/module/specs/NativeAddressSheet.js +1 -1
  173. package/lib/module/specs/NativeApplePayButton.js +1 -1
  174. package/lib/module/specs/NativeAuBECSDebitForm.js +1 -1
  175. package/lib/module/specs/NativeCardField.js +1 -1
  176. package/lib/module/specs/NativeCardField.js.map +1 -1
  177. package/lib/module/specs/NativeCardForm.js +1 -1
  178. package/lib/module/specs/NativeCardForm.js.map +1 -1
  179. package/lib/module/specs/NativeConnectAccountOnboardingView.js +1 -1
  180. package/lib/module/specs/NativeCurrencySelectorElement.js +2 -0
  181. package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -0
  182. package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
  183. package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  184. package/lib/module/specs/NativeGooglePayButton.js +1 -1
  185. package/lib/module/specs/NativeNavigationBar.js +1 -1
  186. package/lib/module/specs/NativeOnrampSdkModule.js.map +1 -1
  187. package/lib/module/specs/NativePaymentMethodMessagingElement.js +1 -1
  188. package/lib/module/specs/NativeStripeContainer.js +1 -1
  189. package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
  190. package/lib/module/types/EmbeddedPaymentElement.js +1 -1
  191. package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
  192. package/lib/typescript/src/components/CurrencySelectorElement.d.ts +62 -0
  193. package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -0
  194. package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts +1 -1
  195. package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts.map +1 -1
  196. package/lib/typescript/src/events.d.ts +11 -0
  197. package/lib/typescript/src/events.d.ts.map +1 -1
  198. package/lib/typescript/src/functions.d.ts.map +1 -1
  199. package/lib/typescript/src/hooks/useCheckout.d.ts.map +1 -1
  200. package/lib/typescript/src/hooks/useOnramp.d.ts +22 -0
  201. package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -1
  202. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +25 -0
  203. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -0
  204. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +5 -1
  205. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
  206. package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts +3 -0
  207. package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts.map +1 -1
  208. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +5 -2
  209. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
  210. package/lib/typescript/src/types/Checkout.d.ts +268 -86
  211. package/lib/typescript/src/types/Checkout.d.ts.map +1 -1
  212. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +36 -1
  213. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
  214. package/lib/typescript/src/types/Onramp.d.ts +94 -0
  215. package/lib/typescript/src/types/Onramp.d.ts.map +1 -1
  216. package/package.json +16 -4
  217. package/src/components/CurrencySelectorElement.tsx +95 -0
  218. package/src/components/PaymentMethodMessagingElement.tsx +54 -52
  219. package/src/events.ts +11 -0
  220. package/src/functions.ts +30 -1
  221. package/src/hooks/useCheckout.tsx +129 -74
  222. package/src/hooks/useOnramp.tsx +44 -0
  223. package/src/specs/NativeCurrencySelectorElement.ts +35 -0
  224. package/src/specs/NativeEmbeddedPaymentElement.ts +12 -2
  225. package/src/specs/NativeOnrampSdkModule.ts +5 -0
  226. package/src/specs/NativeStripeSdkModule.ts +16 -2
  227. package/src/types/Checkout.ts +291 -86
  228. package/src/types/EmbeddedPaymentElement.tsx +117 -26
  229. package/src/types/Onramp.ts +109 -0
  230. package/stripe-react-native.podspec +1 -1
  231. package/android/.idea/AndroidProjectSystem.xml +0 -6
  232. package/android/.idea/caches/deviceStreaming.xml +0 -835
  233. package/android/.idea/compiler.xml +0 -6
  234. package/android/.idea/gradle.xml +0 -17
  235. package/android/.idea/migrations.xml +0 -10
  236. package/android/.idea/misc.xml +0 -10
  237. package/android/.idea/runConfigurations.xml +0 -17
  238. package/android/.idea/vcs.xml +0 -6
  239. package/android/local.properties +0 -8
package/README.md CHANGED
@@ -75,8 +75,8 @@ to your `app.json` file, where `merchantIdentifier` is the Apple merchant ID obt
75
75
 
76
76
  #### Android
77
77
 
78
- - Android 5.0 (API level 21) and above
79
- - Your `compileSdkVersion` must be `34`. See [this issue](https://github.com/stripe/stripe-react-native/issues/812) for potential workarounds.
78
+ - Android 6.0 (API level 23) and above
79
+ - Your `compileSdkVersion` must be `36` or higher.
80
80
  - Android gradle plugin 4.x and above
81
81
  - Kotlin 2.x and above. See [this issue](https://github.com/stripe/stripe-react-native/issues/1924#issuecomment-2867227374) for how to update the Kotlin version when using react-native 0.77 and below or Expo SDK 52.
82
82
 
@@ -11,16 +11,6 @@
11
11
  <ID>CyclomaticComplexMethod:Mappers.kt:internal fun mapToPaymentMethodType: PaymentMethod.Type?</ID>
12
12
  <ID>CyclomaticComplexMethod:PaymentMethodCreateParamsFactory.kt:PaymentMethodCreateParamsFactory$@Throws(PaymentMethodCreateParamsException::class) fun createPaymentMethodParams: PaymentMethodCreateParams</ID>
13
13
  <ID>CyclomaticComplexMethod:PaymentSheetAppearance.kt:@SuppressLint("RestrictedApi") @Throws(PaymentSheetAppearanceException::class) private fun buildEmbeddedAppearance: PaymentSheet.Appearance.Embedded</ID>
14
- <ID>EmptyFunctionBlock:CardFieldView.kt:CardFieldView.&lt;no name provided>${ }</ID>
15
- <ID>EmptyFunctionBlock:CardFieldView.kt:CardFieldView.&lt;no name provided>${}</ID>
16
- <ID>EmptyFunctionBlock:CustomerSheetManager.kt:CustomerSheetManager.&lt;no name provided>${ }</ID>
17
- <ID>EmptyFunctionBlock:CustomerSheetManager.kt:CustomerSheetManager.&lt;no name provided>${}</ID>
18
- <ID>EmptyFunctionBlock:DrawableLoadingTest.kt:DrawableLoadingTest.MockAsyncDrawable${}</ID>
19
- <ID>EmptyFunctionBlock:PaymentSheetManager.kt:&lt;no name provided>${}</ID>
20
- <ID>EmptyFunctionBlock:PaymentSheetManager.kt:PaymentSheetManager.&lt;no name provided>${ }</ID>
21
- <ID>EmptyFunctionBlock:PaymentSheetManager.kt:PaymentSheetManager.&lt;no name provided>${}</ID>
22
- <ID>EmptyFunctionBlock:StripeAbstractComposeView.kt:StripeAbstractComposeView.CompatView${ }</ID>
23
- <ID>EmptyFunctionBlock:StripeSdkModule.kt:StripeSdkModule.&lt;no name provided>${}</ID>
24
14
  <ID>ForbiddenComment:Mappers.kt:// TODO: Can't access, private</ID>
25
15
  <ID>ForbiddenComment:PaymentSheetAppearance.kt:// TODO: The theme is so crazy long, why does each Color thing has the same redundant Theme...</ID>
26
16
  <ID>ForbiddenComment:PaymentSheetAppearance.kt:// TODO: Why is background a string but successBackgroundColor a "dynamic" color?</ID>
@@ -46,71 +36,6 @@
46
36
  <ID>LongMethod:PaymentSheetAppearanceTest.kt:PaymentSheetAppearanceTest$@Test fun testPartialAppearanceConfiguration</ID>
47
37
  <ID>LongMethod:PaymentSheetManager.kt:PaymentSheetManager$fun configure</ID>
48
38
  <ID>LongMethod:StripeSdkModule.kt:StripeSdkModule$@ReactMethod override fun confirmPlatformPay</ID>
49
- <ID>MagicNumber:CardFieldView.kt:CardFieldView$20</ID>
50
- <ID>MagicNumber:EmbeddedPaymentElementView.kt:EmbeddedPaymentElementView$100</ID>
51
- <ID>MagicNumber:FinancialConnectionsSheetManager.kt:FinancialConnectionsSheetManager.Companion$1000.0</ID>
52
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$1000</ID>
53
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$1001</ID>
54
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$11</ID>
55
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$4</ID>
56
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$5</ID>
57
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$6</ID>
58
- <ID>MagicNumber:GooglePayButtonView.kt:GooglePayButtonView$7</ID>
59
- <ID>MagicNumber:Mappers.kt:1000</ID>
60
- <ID>MagicNumber:Mappers.kt:3</ID>
61
- <ID>MagicNumber:Mappers.kt:4</ID>
62
- <ID>MagicNumber:Mappers.kt:5</ID>
63
- <ID>MagicNumber:Mappers.kt:6</ID>
64
- <ID>MagicNumber:Mappers.kt:7</ID>
65
- <ID>MagicNumber:Mappers.kt:8</ID>
66
- <ID>MagicNumber:NavigationBarView.kt:NavigationBarView$16</ID>
67
- <ID>MagicNumber:NavigationBarView.kt:NavigationBarView$17f</ID>
68
- <ID>MagicNumber:NavigationBarView.kt:NavigationBarView$4f</ID>
69
- <ID>MagicNumber:NavigationBarView.kt:NavigationBarView$56</ID>
70
- <ID>MagicNumber:PaymentMethodMessagingElementConfig.kt:16.0</ID>
71
- <ID>MagicNumber:PaymentMethodMessagingElementConfig.kt:6</ID>
72
- <ID>MagicNumber:PaymentMethodMessagingElementConfig.kt:8</ID>
73
- <ID>MagicNumber:PaymentOptionDisplayDataMapper.kt:0xFFFFFF</ID>
74
- <ID>MagicNumber:PaymentOptionDisplayDataMapper.kt:16f</ID>
75
- <ID>MagicNumber:PaymentOptionDisplayDataMapper.kt:5_000L</ID>
76
- <ID>MagicNumber:PaymentSheetAppearance.kt:6</ID>
77
- <ID>MagicNumber:PaymentSheetAppearance.kt:8</ID>
78
- <ID>MagicNumber:PaymentSheetManager.kt:100</ID>
79
- <ID>MagicNumber:PaymentSheetManager.kt:PaymentSheetManager$100</ID>
80
- <ID>MagicNumber:StripeSdkModule.kt:StripeSdkModule$3000</ID>
81
- <ID>MaxLineLength:AddToWalletButtonManager.kt:AddToWalletButtonManager$override fun createViewInstance: AddToWalletButtonView</ID>
82
- <ID>MaxLineLength:AddressLauncherManager.kt:AddressLauncherManager$"No publishable key set. Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component or the initStripe method."</ID>
83
- <ID>MaxLineLength:AddressSheetView.kt:AddressSheetView.Companion$internal</ID>
84
- <ID>MaxLineLength:AuBECSDebitFormView.kt:AuBECSDebitFormView$UIManagerHelper.getEventDispatcherForReactTag(context, id)?.dispatchEvent(FormCompleteEvent(context.surfaceId, id, formDetails))</ID>
85
- <ID>MaxLineLength:AuBECSDebitFormViewManager.kt:AuBECSDebitFormViewManager$override fun createViewInstance: AuBECSDebitFormView</ID>
86
- <ID>MaxLineLength:CustomerSheetManager.kt:CustomerSheetManager.Companion$internal</ID>
87
- <ID>MaxLineLength:EmbeddedPaymentElementView.kt:EmbeddedPaymentElementView$"Tried to call confirmHandler, but no callback was found. Please file an issue: https://github.com/stripe/stripe-react-native/issues"</ID>
88
- <ID>MaxLineLength:EmbeddedPaymentElementView.kt:EmbeddedPaymentElementView$"Tried to call confirmationTokenConfirmHandler, but no callback was found. Please file an issue: https://github.com/stripe/stripe-react-native/issues"</ID>
89
- <ID>MaxLineLength:Errors.kt:"Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component or the initStripe method."</ID>
90
- <ID>MaxLineLength:Errors.kt:internal fun createCanceledError: WritableMap</ID>
91
- <ID>MaxLineLength:Extensions.kt:)</ID>
92
- <ID>MaxLineLength:FinancialConnectionsSheetManager.kt:FinancialConnectionsSheetManager.Companion$private</ID>
93
- <ID>MaxLineLength:GooglePayButtonManager.kt:GooglePayButtonManager$override fun createViewInstance: GooglePayButtonView</ID>
94
- <ID>MaxLineLength:GooglePayLauncherManager.kt:GooglePayLauncherManager$"Google Pay is not available on this device. You can use isPlatformPaySupported to preemptively check for Google Pay support."</ID>
95
- <ID>MaxLineLength:Mappers.kt:internal</ID>
96
- <ID>MaxLineLength:Mappers.kt:val disableBillingDetailCollection = customPaymentMethodMap.getBooleanOr("disableBillingDetailCollection", false)</ID>
97
- <ID>MaxLineLength:NavigationBarView.kt:NavigationBarView$drawable?.setColorFilter(android.graphics.BlendModeColorFilter(Color.BLACK, android.graphics.BlendMode.SRC_IN))</ID>
98
- <ID>MaxLineLength:PaymentElementConfig.kt:internal</ID>
99
- <ID>MaxLineLength:PaymentLauncherManager.kt:PaymentLauncherManager$"Invalid parameters provided to PaymentLauncher. Ensure that you are providing the correct client secret and setup params (if necessary)."</ID>
100
- <ID>MaxLineLength:PaymentMethodCreateParamsFactory.kt:PaymentMethodCreateParamsFactory$private</ID>
101
- <ID>MaxLineLength:PaymentMethodMessagingElementViewManager.kt:PaymentMethodMessagingElementViewManager$override fun createViewInstance: PaymentMethodMessagingElementView</ID>
102
- <ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"By continuing, you agree to &lt;b>&lt;font color=\"#0000FF\">&lt;u>&lt;a href=\"https://stripe.com/terms\">Terms&lt;/a>&lt;/u>&lt;/font>&lt;/b> and &lt;i>&lt;font color=\"#FF0000\">&lt;a href=\"https://stripe.com/privacy\">Privacy&lt;/a>&lt;/font>&lt;/i>. Important details are &lt;span style=\"background-color: #FFFF00;\">highlighted&lt;/span>."</ID>
103
- <ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"By continuing, you agree to our &lt;a href=\"https://stripe.com/privacy\">Privacy Policy&lt;/a> and &lt;a href=\"https://stripe.com/terms\">Terms of Service&lt;/a>."</ID>
104
- <ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"Check &lt;b>&lt;a href=\"https://stripe.com\">Stripe&lt;/a>&lt;/b> and &lt;i>&lt;font color=\"#00FF00\">&lt;a href=\"https://github.com\">GitHub&lt;/a>&lt;/font>&lt;/i>"</ID>
105
- <ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"Visit our &lt;b>&lt;font color=\"#0000FF\">&lt;a href=\"https://stripe.com/privacy\">Privacy Policy&lt;/a>&lt;/font>&lt;/b> for details"</ID>
106
- <ID>MaxLineLength:PaymentSheetAppearance.kt:"$fontErrorPrefix appearance.font.$key should only contain lowercase alphanumeric characters on Android, but received '$fontFileName'. This value must match the filename in android/app/src/main/res/font"</ID>
107
- <ID>MaxLineLength:PaymentSheetAppearance.kt:System.err.println("WARN: Unsupported embedded payment element row style received: $styleString. Falling back to default.")</ID>
108
- <ID>MaxLineLength:PaymentSheetManager.kt:internal</ID>
109
- <ID>MaxLineLength:PostalCodeUtilities.kt:PostalCodeUtilities.Companion$internal fun isValidGlobalPostalCodeCharacter: Boolean</ID>
110
- <ID>MaxLineLength:ReactNativeCustomerAdapter.kt:ReactNativeCustomerAdapter$override suspend</ID>
111
- <ID>MaxLineLength:ReactNativeCustomerSessionProvider.kt:ReactNativeCustomerSessionProvider$override suspend fun intentConfiguration: Result&lt;CustomerSheet.IntentConfiguration></ID>
112
- <ID>MaxLineLength:StripeSdkModule.kt:StripeSdkModule$composeCompatView</ID>
113
- <ID>MaxLineLength:StripeSdkModule.kt:StripeSdkModule$reactApplicationContext.currentActivity?.application?.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks)</ID>
114
39
  <ID>RethrowCaughtException:PaymentMethodCreateParamsFactory.kt:PaymentMethodCreateParamsFactory$throw error</ID>
115
40
  <ID>SwallowedException:StripeSdkModule.kt:StripeSdkModule$e: Exception</ID>
116
41
  <ID>ThrowsCount:PaymentSheetAppearance.kt:@Throws(PaymentSheetAppearanceException::class) internal fun getFontResId: Int?</ID>
@@ -125,7 +50,7 @@
125
50
  <ID>TooGenericExceptionCaught:StripeSdkModule.kt:StripeSdkModule$e: Exception</ID>
126
51
  <ID>TooGenericExceptionCaught:TapAndPayProxy.kt:TapAndPayProxy$e: Exception</ID>
127
52
  <ID>TooGenericExceptionThrown:EmbeddedPaymentElementViewManager.kt:EmbeddedPaymentElementViewManager$throw Error()</ID>
128
- <ID>TooGenericExceptionThrown:PaymentLauncherManager.kt:PaymentLauncherManager$throw Exception( "Invalid parameters provided to PaymentLauncher. Ensure that you are providing the correct client secret and setup params (if necessary).", )</ID>
53
+ <ID>TooGenericExceptionThrown:PaymentLauncherManager.kt:PaymentLauncherManager$throw Exception( "Invalid parameters provided to PaymentLauncher. Ensure that you are providing the correct client " + "secret and setup params (if necessary).", )</ID>
129
54
  <ID>TooGenericExceptionThrown:PaymentLauncherManager.kt:PaymentLauncherManager$throw Exception("Failed to create Payment Launcher. No client secret provided.")</ID>
130
55
  <ID>TooGenericExceptionThrown:PaymentMethodCreateParamsFactory.kt:PaymentMethodCreateParamsFactory$throw Exception("This paymentMethodType is not supported yet")</ID>
131
56
  <ID>TooManyFunctions:AddToWalletButtonManager.kt:AddToWalletButtonManager : SimpleViewManagerAddToWalletButtonManagerInterface</ID>
@@ -1,6 +1,6 @@
1
1
  StripeSdk_kotlinVersion=2.2.21
2
- StripeSdk_compileSdkVersion=30
3
- StripeSdk_targetSdkVersion=28
4
- StripeSdk_minSdkVersion=21
2
+ StripeSdk_compileSdkVersion=36
3
+ StripeSdk_targetSdkVersion=36
4
+ StripeSdk_minSdkVersion=23
5
5
  # Keep StripeSdk_stripeVersion in sync with https://github.com/stripe/stripe-identity-react-native/blob/main/android/gradle.properties
6
- StripeSdk_stripeVersion=23.6.+
6
+ StripeSdk_stripeVersion=23.9.+
@@ -109,7 +109,9 @@ class AuBECSDebitFormView(
109
109
  "email" to billingDetails["email"] as String,
110
110
  )
111
111
 
112
- UIManagerHelper.getEventDispatcherForReactTag(context, id)?.dispatchEvent(FormCompleteEvent(context.surfaceId, id, formDetails))
112
+ UIManagerHelper.getEventDispatcherForReactTag(context, id)?.dispatchEvent(
113
+ FormCompleteEvent(context.surfaceId, id, formDetails)
114
+ )
113
115
  }
114
116
 
115
117
  private fun setListeners() {
@@ -41,7 +41,8 @@ class AuBECSDebitFormViewManager :
41
41
  view.setFormStyle(style.asMapOrNull())
42
42
  }
43
43
 
44
- override fun createViewInstance(reactContext: ThemedReactContext): AuBECSDebitFormView = AuBECSDebitFormView(reactContext)
44
+ override fun createViewInstance(reactContext: ThemedReactContext): AuBECSDebitFormView =
45
+ AuBECSDebitFormView(reactContext)
45
46
 
46
47
  companion object {
47
48
  const val REACT_CLASS = "AuBECSDebitForm"
@@ -169,7 +169,7 @@ class CardFieldView(
169
169
  }
170
170
  }
171
171
 
172
- mCardWidget.setPadding(20, 0, 20, 0)
172
+ mCardWidget.setPadding(CARD_WIDGET_HORIZONTAL_PADDING, 0, CARD_WIDGET_HORIZONTAL_PADDING, 0)
173
173
  mCardWidget.background =
174
174
  MaterialShapeDrawable(
175
175
  ShapeAppearanceModel()
@@ -367,32 +367,10 @@ class CardFieldView(
367
367
  }
368
368
  }
369
369
 
370
- mCardWidget.setCardInputListener(
371
- object : CardInputListener {
372
- override fun onCardComplete() {}
373
-
374
- override fun onExpirationComplete() {}
375
-
376
- override fun onCvcComplete() {}
377
-
378
- override fun onPostalCodeComplete() {}
379
-
380
- override fun onFocusChange(focusField: CardInputListener.FocusField) {}
381
- },
382
- )
370
+ mCardWidget.setCardInputListener(DefaultCardInputListener())
383
371
 
384
372
  mCardWidget.setExpiryDateTextWatcher(
385
- object : TextWatcher {
386
- override fun beforeTextChanged(
387
- p0: CharSequence?,
388
- p1: Int,
389
- p2: Int,
390
- p3: Int,
391
- ) {
392
- }
393
-
394
- override fun afterTextChanged(p0: Editable?) {}
395
-
373
+ object : DefaultTextWatcher() {
396
374
  override fun onTextChanged(
397
375
  var1: CharSequence?,
398
376
  var2: Int,
@@ -410,17 +388,7 @@ class CardFieldView(
410
388
  )
411
389
 
412
390
  mCardWidget.setPostalCodeTextWatcher(
413
- object : TextWatcher {
414
- override fun beforeTextChanged(
415
- p0: CharSequence?,
416
- p1: Int,
417
- p2: Int,
418
- p3: Int,
419
- ) {
420
- }
421
-
422
- override fun afterTextChanged(p0: Editable?) {}
423
-
391
+ object : DefaultTextWatcher() {
424
392
  override fun onTextChanged(
425
393
  var1: CharSequence?,
426
394
  var2: Int,
@@ -433,17 +401,7 @@ class CardFieldView(
433
401
  )
434
402
 
435
403
  mCardWidget.setCardNumberTextWatcher(
436
- object : TextWatcher {
437
- override fun beforeTextChanged(
438
- p0: CharSequence?,
439
- p1: Int,
440
- p2: Int,
441
- p3: Int,
442
- ) {
443
- }
444
-
445
- override fun afterTextChanged(p0: Editable?) {}
446
-
404
+ object : DefaultTextWatcher() {
447
405
  override fun onTextChanged(
448
406
  var1: CharSequence?,
449
407
  var2: Int,
@@ -458,17 +416,7 @@ class CardFieldView(
458
416
  )
459
417
 
460
418
  mCardWidget.setCvcNumberTextWatcher(
461
- object : TextWatcher {
462
- override fun beforeTextChanged(
463
- p0: CharSequence?,
464
- p1: Int,
465
- p2: Int,
466
- p3: Int,
467
- ) {
468
- }
469
-
470
- override fun afterTextChanged(p0: Editable?) {}
471
-
419
+ object : DefaultTextWatcher() {
472
420
  override fun onTextChanged(
473
421
  var1: CharSequence?,
474
422
  var2: Int,
@@ -530,4 +478,54 @@ class CardFieldView(
530
478
  )
531
479
  layout(left, top, right, bottom)
532
480
  }
481
+
482
+ private companion object {
483
+ const val CARD_WIDGET_HORIZONTAL_PADDING = 20
484
+ }
485
+
486
+ private open class DefaultTextWatcher : TextWatcher {
487
+ override fun beforeTextChanged(
488
+ p0: CharSequence?,
489
+ p1: Int,
490
+ p2: Int,
491
+ p3: Int,
492
+ ) {
493
+ // NO-OP
494
+ }
495
+
496
+ override fun afterTextChanged(p0: Editable?) {
497
+ // NO-OP
498
+ }
499
+
500
+ override fun onTextChanged(
501
+ var1: CharSequence?,
502
+ var2: Int,
503
+ var3: Int,
504
+ var4: Int,
505
+ ) {
506
+ // NO-OP
507
+ }
508
+ }
509
+
510
+ private open class DefaultCardInputListener : CardInputListener {
511
+ override fun onCardComplete() {
512
+ // NO-OP
513
+ }
514
+
515
+ override fun onExpirationComplete() {
516
+ // NO-OP
517
+ }
518
+
519
+ override fun onCvcComplete() {
520
+ // NO-OP
521
+ }
522
+
523
+ override fun onPostalCodeComplete() {
524
+ // NO-OP
525
+ }
526
+
527
+ override fun onFocusChange(focusField: CardInputListener.FocusField) {
528
+ // NO-OP
529
+ }
530
+ }
533
531
  }
@@ -0,0 +1,26 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.events.Event
5
+
6
+ internal class CurrencySelectorElementEvent(
7
+ surfaceId: Int,
8
+ viewTag: Int,
9
+ private val eventType: EventType,
10
+ private val eventMap: WritableMap?,
11
+ ) : Event<CurrencySelectorElementEvent>(surfaceId, viewTag) {
12
+ enum class EventType {
13
+ OnHeightChange,
14
+ }
15
+
16
+ override fun getEventData() = eventMap
17
+
18
+ companion object {
19
+ const val ON_HEIGHT_CHANGE = "topHeightChange"
20
+ }
21
+
22
+ override fun getEventName(): String =
23
+ when (eventType) {
24
+ EventType.OnHeightChange -> ON_HEIGHT_CHANGE
25
+ }
26
+ }
@@ -0,0 +1,139 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.content.Context
5
+ import androidx.compose.foundation.layout.Box
6
+ import androidx.compose.runtime.Composable
7
+ import androidx.compose.runtime.LaunchedEffect
8
+ import androidx.compose.runtime.getValue
9
+ import androidx.compose.runtime.mutableStateOf
10
+ import androidx.compose.runtime.remember
11
+ import androidx.compose.runtime.setValue
12
+ import androidx.compose.ui.Modifier
13
+ import androidx.compose.ui.input.pointer.pointerInput
14
+ import androidx.compose.ui.layout.layout
15
+ import androidx.compose.ui.layout.onSizeChanged
16
+ import androidx.compose.ui.platform.LocalDensity
17
+ import androidx.compose.ui.unit.IntOffset
18
+ import androidx.compose.ui.unit.dp
19
+ import com.facebook.react.bridge.Arguments
20
+ import com.facebook.react.bridge.ReactContext
21
+ import com.facebook.react.bridge.WritableMap
22
+ import com.facebook.react.uimanager.UIManagerHelper
23
+ import com.stripe.android.paymentelement.CheckoutSessionPreview
24
+
25
+ @OptIn(CheckoutSessionPreview::class)
26
+ class CurrencySelectorElementView(
27
+ context: Context,
28
+ ) : StripeAbstractComposeView(context) {
29
+ private val reactContext get() = context as ReactContext
30
+
31
+ // Backing state for props. mutableStateOf so Compose recomposes on changes.
32
+ private var sessionKeyState = mutableStateOf<String?>(null)
33
+ private var disabledState = mutableStateOf(false)
34
+
35
+ fun setSessionKey(value: String?) {
36
+ sessionKeyState.value = value?.takeIf { it.isNotEmpty() }
37
+ }
38
+
39
+ fun setDisabled(value: Boolean) {
40
+ disabledState.value = value
41
+ }
42
+
43
+ @SuppressLint("RestrictedApi")
44
+ @Composable
45
+ override fun Content() {
46
+ val sessionKey by remember { sessionKeyState }
47
+ val disabled by remember { disabledState }
48
+
49
+ val checkout = remember(sessionKey) {
50
+ sessionKey?.let { key ->
51
+ val module = reactContext.getNativeModule(StripeSdkModule::class.java)
52
+ module?.checkoutInstances?.get(key)
53
+ }
54
+ }
55
+
56
+ if (checkout != null) {
57
+ // We don't push state to JS from this view — `StripeSdkModule` already
58
+ // observes the same `Checkout` instance and emits a unified
59
+ // `checkoutSessionDidChangeState` event that `useCheckout` mirrors into
60
+ // its `state`. Keeping the bridge in one place avoids redundant
61
+ // round-trips and inconsistencies.
62
+ MeasuredCurrencySelector(
63
+ reportHeightChange = { reportHeightChange(it) },
64
+ ) {
65
+ Box {
66
+ checkout.CurrencySelectorContent()
67
+ if (disabled) {
68
+ // The Stripe Android composable doesn't yet expose an `isEnabled`
69
+ // parameter, so swallow taps with a transparent pointer-input
70
+ // overlay while `disabled` is true. The toggle stays visible but
71
+ // can't be interacted with.
72
+ Box(
73
+ Modifier
74
+ .matchParentSize()
75
+ .pointerInput(Unit) { /* consume all gestures */ },
76
+ )
77
+ }
78
+ }
79
+ }
80
+ } else {
81
+ // No checkout yet: take up zero height so the element collapses.
82
+ LaunchedEffect(Unit) {
83
+ reportHeightChange(0f)
84
+ }
85
+ }
86
+ }
87
+
88
+ @Composable
89
+ private fun MeasuredCurrencySelector(
90
+ reportHeightChange: (Float) -> Unit,
91
+ content: @Composable () -> Unit,
92
+ ) {
93
+ val density = LocalDensity.current
94
+ var heightDp by remember { mutableStateOf(1.dp) } // non-zero sentinel
95
+
96
+ Box(
97
+ Modifier
98
+ .onSizeChanged { size ->
99
+ val h = with(density) { size.height.toDp() }
100
+ if (h != heightDp) {
101
+ heightDp = h
102
+ reportHeightChange(h.value)
103
+ }
104
+ }
105
+ .layout { measurable, constraints ->
106
+ val widthPx = constraints.maxWidth
107
+ val minHpx = measurable.minIntrinsicHeight(widthPx).coerceAtLeast(0)
108
+
109
+ val placeable = measurable.measure(
110
+ constraints.copy(minHeight = minHpx, maxHeight = minHpx),
111
+ )
112
+
113
+ layout(constraints.maxWidth, placeable.height) {
114
+ placeable.placeRelative(IntOffset.Zero)
115
+ }
116
+ },
117
+ ) {
118
+ content()
119
+ }
120
+ }
121
+
122
+ private fun reportHeightChange(height: Float) {
123
+ val params = Arguments.createMap().apply {
124
+ putDouble("height", height.toDouble())
125
+ }
126
+ dispatchEvent(CurrencySelectorElementEvent.EventType.OnHeightChange, params)
127
+ }
128
+
129
+ private fun dispatchEvent(
130
+ eventType: CurrencySelectorElementEvent.EventType,
131
+ params: WritableMap,
132
+ ) {
133
+ val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, id)
134
+ val surfaceId = UIManagerHelper.getSurfaceId(reactContext)
135
+ dispatcher?.dispatchEvent(
136
+ CurrencySelectorElementEvent(surfaceId, id, eventType, params),
137
+ )
138
+ }
139
+ }
@@ -0,0 +1,59 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import com.facebook.react.module.annotations.ReactModule
4
+ import com.facebook.react.uimanager.ThemedReactContext
5
+ import com.facebook.react.uimanager.ViewGroupManager
6
+ import com.facebook.react.uimanager.annotations.ReactProp
7
+ import com.facebook.react.viewmanagers.StripeCurrencySelectorElementManagerDelegate
8
+ import com.facebook.react.viewmanagers.StripeCurrencySelectorElementManagerInterface
9
+ import com.stripe.android.paymentelement.CheckoutSessionPreview
10
+
11
+ @OptIn(CheckoutSessionPreview::class)
12
+ @ReactModule(name = CurrencySelectorElementViewManager.NAME)
13
+ class CurrencySelectorElementViewManager :
14
+ ViewGroupManager<CurrencySelectorElementView>(),
15
+ StripeCurrencySelectorElementManagerInterface<CurrencySelectorElementView> {
16
+ companion object {
17
+ const val NAME = "StripeCurrencySelectorElement"
18
+ }
19
+
20
+ private val delegate = StripeCurrencySelectorElementManagerDelegate(this)
21
+
22
+ override fun getName() = NAME
23
+
24
+ override fun getDelegate() = delegate
25
+
26
+ override fun createViewInstance(ctx: ThemedReactContext): CurrencySelectorElementView =
27
+ CurrencySelectorElementView(ctx)
28
+
29
+ override fun onDropViewInstance(view: CurrencySelectorElementView) {
30
+ super.onDropViewInstance(view)
31
+ view.handleOnDropViewInstance()
32
+ }
33
+
34
+ override fun needsCustomLayoutForChildren(): Boolean = true
35
+
36
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> =
37
+ mutableMapOf(
38
+ CurrencySelectorElementEvent.ON_HEIGHT_CHANGE to
39
+ mutableMapOf("registrationName" to "onHeightChange"),
40
+ )
41
+
42
+ @ReactProp(name = "sessionKey")
43
+ override fun setSessionKey(
44
+ view: CurrencySelectorElementView,
45
+ value: String?,
46
+ ) {
47
+ // Codegen marks `sessionKey` as required, but it can briefly arrive as
48
+ // null when the view is recycled. Treat empty/null the same.
49
+ view.setSessionKey(value)
50
+ }
51
+
52
+ @ReactProp(name = "disabled")
53
+ override fun setDisabled(
54
+ view: CurrencySelectorElementView,
55
+ value: Boolean,
56
+ ) {
57
+ view.setDisabled(value)
58
+ }
59
+ }