@stripe/stripe-react-native 0.41.0 → 0.43.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 (314) hide show
  1. package/.husky/pre-commit +0 -3
  2. package/CHANGELOG.md +27 -0
  3. package/README.md +3 -0
  4. package/android/.gradle/8.11.1/checksums/checksums.lock +0 -0
  5. package/android/.gradle/8.11.1/checksums/md5-checksums.bin +0 -0
  6. package/android/.gradle/8.11.1/checksums/sha1-checksums.bin +0 -0
  7. package/android/.gradle/8.11.1/executionHistory/executionHistory.lock +0 -0
  8. package/android/.gradle/8.11.1/fileChanges/last-build.bin +0 -0
  9. package/android/.gradle/8.11.1/fileHashes/fileHashes.lock +0 -0
  10. package/android/.gradle/8.11.1/gc.properties +0 -0
  11. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  12. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  13. package/android/.gradle/vcs-1/gc.properties +0 -0
  14. package/android/build.gradle +7 -1
  15. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  16. package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  17. package/android/gradle.properties +4 -1
  18. package/android/gradlew +249 -0
  19. package/android/gradlew.bat +92 -0
  20. package/android/spotless.gradle +19 -0
  21. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +30 -34
  22. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormViewManager.kt +20 -10
  23. package/android/src/main/java/com/reactnativestripesdk/CardChangedEvent.kt +12 -13
  24. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +242 -105
  25. package/android/src/main/java/com/reactnativestripesdk/CardFieldViewManager.kt +58 -20
  26. package/android/src/main/java/com/reactnativestripesdk/CardFocusEvent.kt +8 -11
  27. package/android/src/main/java/com/reactnativestripesdk/CardFormCompleteEvent.kt +10 -12
  28. package/android/src/main/java/com/reactnativestripesdk/CardFormView.kt +135 -87
  29. package/android/src/main/java/com/reactnativestripesdk/CardFormViewManager.kt +57 -22
  30. package/android/src/main/java/com/reactnativestripesdk/CollectBankAccountLauncherFragment.kt +53 -23
  31. package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetFragment.kt +125 -83
  32. package/android/src/main/java/com/reactnativestripesdk/FormCompleteEvent.kt +9 -11
  33. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +16 -9
  34. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +36 -28
  35. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +67 -43
  36. package/android/src/main/java/com/reactnativestripesdk/GooglePayPaymentMethodLauncherFragment.kt +21 -16
  37. package/android/src/main/java/com/reactnativestripesdk/GooglePayRequestHelper.kt +101 -56
  38. package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherFragment.kt +244 -166
  39. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +183 -123
  40. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +181 -57
  41. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetFragment.kt +402 -258
  42. package/android/src/main/java/com/reactnativestripesdk/StripeContainerManager.kt +11 -4
  43. package/android/src/main/java/com/reactnativestripesdk/StripeContainerView.kt +5 -1
  44. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +654 -299
  45. package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +12 -14
  46. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherFragment.kt +42 -37
  47. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetEvent.kt +12 -11
  48. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +29 -29
  49. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetViewManager.kt +50 -18
  50. package/android/src/main/java/com/reactnativestripesdk/customersheet/CustomerSheetFragment.kt +227 -147
  51. package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerAdapter.kt +15 -18
  52. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +33 -15
  53. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt +63 -37
  54. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletCompleteEvent.kt +9 -13
  55. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/EphemeralKeyProvider.kt +15 -17
  56. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt +76 -60
  57. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt +71 -47
  58. package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +117 -51
  59. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +4 -3
  60. package/android/src/main/java/com/reactnativestripesdk/utils/KeepJsAwakeTask.kt +39 -0
  61. package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +337 -250
  62. package/android/src/main/java/com/reactnativestripesdk/utils/PostalCodeUtilities.kt +2 -11
  63. package/ios/CustomerSheet/CustomerSheetUtils.swift +3 -1
  64. package/ios/FinancialConnections.swift +18 -2
  65. package/ios/Mappers.swift +23 -0
  66. package/ios/PaymentMethodFactory.swift +31 -29
  67. package/ios/StripeSdk+CustomerSheet.swift +2 -1
  68. package/ios/StripeSdk+PaymentSheet.swift +42 -0
  69. package/ios/StripeSdk.m +2 -0
  70. package/ios/StripeSdk.swift +116 -24
  71. package/lib/commonjs/NativeStripeSdk.js +1 -1
  72. package/lib/commonjs/NativeStripeSdk.js.map +1 -1
  73. package/lib/commonjs/components/AddToWalletButton.js +1 -1
  74. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  75. package/lib/commonjs/components/AddressSheet.js +1 -1
  76. package/lib/commonjs/components/AddressSheet.js.map +1 -1
  77. package/lib/commonjs/components/ApplePayButtonNative.js +1 -1
  78. package/lib/commonjs/components/ApplePayButtonNative.js.map +1 -1
  79. package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
  80. package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
  81. package/lib/commonjs/components/CardField.js +1 -1
  82. package/lib/commonjs/components/CardField.js.map +1 -1
  83. package/lib/commonjs/components/CardForm.js +1 -1
  84. package/lib/commonjs/components/CardForm.js.map +1 -1
  85. package/lib/commonjs/components/CustomerSheet.js +1 -1
  86. package/lib/commonjs/components/CustomerSheet.js.map +1 -1
  87. package/lib/commonjs/components/GooglePayButtonNative.js +1 -1
  88. package/lib/commonjs/components/GooglePayButtonNative.js.map +1 -1
  89. package/lib/commonjs/components/PlatformPayButton.js +1 -1
  90. package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
  91. package/lib/commonjs/components/StripeContainer.js +1 -1
  92. package/lib/commonjs/components/StripeContainer.js.map +1 -1
  93. package/lib/commonjs/components/StripeProvider.js +1 -1
  94. package/lib/commonjs/components/StripeProvider.js.map +1 -1
  95. package/lib/commonjs/functions.js +1 -1
  96. package/lib/commonjs/functions.js.map +1 -1
  97. package/lib/commonjs/helpers.js +1 -1
  98. package/lib/commonjs/helpers.js.map +1 -1
  99. package/lib/commonjs/hooks/useConfirmPayment.js.map +1 -1
  100. package/lib/commonjs/hooks/useConfirmSetupIntent.js.map +1 -1
  101. package/lib/commonjs/hooks/useFinancialConnectionsSheet.js +1 -1
  102. package/lib/commonjs/hooks/useFinancialConnectionsSheet.js.map +1 -1
  103. package/lib/commonjs/hooks/usePaymentSheet.js.map +1 -1
  104. package/lib/commonjs/hooks/usePlatformPay.js.map +1 -1
  105. package/lib/commonjs/hooks/useStripe.js +1 -1
  106. package/lib/commonjs/hooks/useStripe.js.map +1 -1
  107. package/lib/commonjs/index.js.map +1 -1
  108. package/lib/commonjs/package.json +1 -0
  109. package/lib/commonjs/plugin/withStripe.js +1 -1
  110. package/lib/commonjs/plugin/withStripe.js.map +1 -1
  111. package/lib/commonjs/types/ApplePay.js.map +1 -1
  112. package/lib/commonjs/types/Common.js +1 -1
  113. package/lib/commonjs/types/Common.js.map +1 -1
  114. package/lib/commonjs/types/CustomerSheet.js.map +1 -1
  115. package/lib/commonjs/types/Errors.js +1 -1
  116. package/lib/commonjs/types/Errors.js.map +1 -1
  117. package/lib/commonjs/types/FinancialConnections.js +1 -1
  118. package/lib/commonjs/types/FinancialConnections.js.map +1 -1
  119. package/lib/commonjs/types/NextAction.js.map +1 -1
  120. package/lib/commonjs/types/PaymentIntent.js +1 -1
  121. package/lib/commonjs/types/PaymentIntent.js.map +1 -1
  122. package/lib/commonjs/types/PaymentMethod.js.map +1 -1
  123. package/lib/commonjs/types/PaymentSheet.js +1 -1
  124. package/lib/commonjs/types/PaymentSheet.js.map +1 -1
  125. package/lib/commonjs/types/PlatformPay.js +1 -1
  126. package/lib/commonjs/types/PlatformPay.js.map +1 -1
  127. package/lib/commonjs/types/PushProvisioning.js +1 -1
  128. package/lib/commonjs/types/PushProvisioning.js.map +1 -1
  129. package/lib/commonjs/types/SetupIntent.js +1 -1
  130. package/lib/commonjs/types/SetupIntent.js.map +1 -1
  131. package/lib/commonjs/types/ThreeDSecure.js +1 -1
  132. package/lib/commonjs/types/ThreeDSecure.js.map +1 -1
  133. package/lib/commonjs/types/Token.js.map +1 -1
  134. package/lib/commonjs/types/components/ApplePayButtonComponent.js.map +1 -1
  135. package/lib/commonjs/types/components/AuBECSDebitFormComponent.js.map +1 -1
  136. package/lib/commonjs/types/components/CardFieldInput.js +1 -1
  137. package/lib/commonjs/types/components/CardFieldInput.js.map +1 -1
  138. package/lib/commonjs/types/components/CardFormView.js.map +1 -1
  139. package/lib/commonjs/types/components/GooglePayButtonComponent.js.map +1 -1
  140. package/lib/commonjs/types/index.js +1 -1
  141. package/lib/commonjs/types/index.js.map +1 -1
  142. package/lib/module/NativeStripeSdk.js +1 -1
  143. package/lib/module/NativeStripeSdk.js.map +1 -1
  144. package/lib/module/components/AddToWalletButton.js +1 -1
  145. package/lib/module/components/AddToWalletButton.js.map +1 -1
  146. package/lib/module/components/AddressSheet.js +1 -1
  147. package/lib/module/components/AddressSheet.js.map +1 -1
  148. package/lib/module/components/ApplePayButtonNative.js +1 -1
  149. package/lib/module/components/ApplePayButtonNative.js.map +1 -1
  150. package/lib/module/components/AuBECSDebitForm.js +1 -1
  151. package/lib/module/components/AuBECSDebitForm.js.map +1 -1
  152. package/lib/module/components/CardField.js +1 -1
  153. package/lib/module/components/CardField.js.map +1 -1
  154. package/lib/module/components/CardForm.js +1 -1
  155. package/lib/module/components/CardForm.js.map +1 -1
  156. package/lib/module/components/CustomerSheet.js +1 -1
  157. package/lib/module/components/CustomerSheet.js.map +1 -1
  158. package/lib/module/components/GooglePayButtonNative.js +1 -1
  159. package/lib/module/components/GooglePayButtonNative.js.map +1 -1
  160. package/lib/module/components/PlatformPayButton.js +1 -1
  161. package/lib/module/components/PlatformPayButton.js.map +1 -1
  162. package/lib/module/components/StripeContainer.js +1 -1
  163. package/lib/module/components/StripeContainer.js.map +1 -1
  164. package/lib/module/components/StripeProvider.js +1 -1
  165. package/lib/module/components/StripeProvider.js.map +1 -1
  166. package/lib/module/functions.js +1 -1
  167. package/lib/module/functions.js.map +1 -1
  168. package/lib/module/helpers.js +1 -1
  169. package/lib/module/helpers.js.map +1 -1
  170. package/lib/module/hooks/useConfirmPayment.js.map +1 -1
  171. package/lib/module/hooks/useConfirmSetupIntent.js.map +1 -1
  172. package/lib/module/hooks/useFinancialConnectionsSheet.js +1 -1
  173. package/lib/module/hooks/useFinancialConnectionsSheet.js.map +1 -1
  174. package/lib/module/hooks/usePaymentSheet.js.map +1 -1
  175. package/lib/module/hooks/usePlatformPay.js.map +1 -1
  176. package/lib/module/hooks/useStripe.js +1 -1
  177. package/lib/module/hooks/useStripe.js.map +1 -1
  178. package/lib/module/index.js.map +1 -1
  179. package/lib/module/package.json +1 -0
  180. package/lib/module/plugin/withStripe.js +1 -1
  181. package/lib/module/plugin/withStripe.js.map +1 -1
  182. package/lib/module/types/ApplePay.js.map +1 -1
  183. package/lib/module/types/Common.js +1 -1
  184. package/lib/module/types/Common.js.map +1 -1
  185. package/lib/module/types/CustomerSheet.js.map +1 -1
  186. package/lib/module/types/Errors.js +1 -1
  187. package/lib/module/types/Errors.js.map +1 -1
  188. package/lib/module/types/FinancialConnections.js +1 -1
  189. package/lib/module/types/FinancialConnections.js.map +1 -1
  190. package/lib/module/types/NextAction.js.map +1 -1
  191. package/lib/module/types/PaymentIntent.js +1 -1
  192. package/lib/module/types/PaymentIntent.js.map +1 -1
  193. package/lib/module/types/PaymentMethod.js.map +1 -1
  194. package/lib/module/types/PaymentSheet.js +1 -1
  195. package/lib/module/types/PaymentSheet.js.map +1 -1
  196. package/lib/module/types/PlatformPay.js +1 -1
  197. package/lib/module/types/PlatformPay.js.map +1 -1
  198. package/lib/module/types/PushProvisioning.js +1 -1
  199. package/lib/module/types/PushProvisioning.js.map +1 -1
  200. package/lib/module/types/SetupIntent.js +1 -1
  201. package/lib/module/types/SetupIntent.js.map +1 -1
  202. package/lib/module/types/ThreeDSecure.js +1 -1
  203. package/lib/module/types/ThreeDSecure.js.map +1 -1
  204. package/lib/module/types/Token.js.map +1 -1
  205. package/lib/module/types/components/ApplePayButtonComponent.js.map +1 -1
  206. package/lib/module/types/components/AuBECSDebitFormComponent.js.map +1 -1
  207. package/lib/module/types/components/CardFieldInput.js +1 -1
  208. package/lib/module/types/components/CardFieldInput.js.map +1 -1
  209. package/lib/module/types/components/CardFormView.js.map +1 -1
  210. package/lib/module/types/components/GooglePayButtonComponent.js.map +1 -1
  211. package/lib/module/types/index.js +1 -1
  212. package/lib/module/types/index.js.map +1 -1
  213. package/lib/typescript/src/NativeStripeSdk.d.ts +5 -4
  214. package/lib/typescript/src/NativeStripeSdk.d.ts.map +1 -0
  215. package/lib/typescript/src/components/AddToWalletButton.d.ts +3 -1
  216. package/lib/typescript/src/components/AddToWalletButton.d.ts.map +1 -0
  217. package/lib/typescript/src/components/AddressSheet.d.ts +4 -2
  218. package/lib/typescript/src/components/AddressSheet.d.ts.map +1 -0
  219. package/lib/typescript/src/components/ApplePayButtonNative.d.ts +1 -0
  220. package/lib/typescript/src/components/ApplePayButtonNative.d.ts.map +1 -0
  221. package/lib/typescript/src/components/AuBECSDebitForm.d.ts +3 -1
  222. package/lib/typescript/src/components/AuBECSDebitForm.d.ts.map +1 -0
  223. package/lib/typescript/src/components/CardField.d.ts +1 -0
  224. package/lib/typescript/src/components/CardField.d.ts.map +1 -0
  225. package/lib/typescript/src/components/CardForm.d.ts +1 -0
  226. package/lib/typescript/src/components/CardForm.d.ts.map +1 -0
  227. package/lib/typescript/src/components/CustomerSheet.d.ts +2 -1
  228. package/lib/typescript/src/components/CustomerSheet.d.ts.map +1 -0
  229. package/lib/typescript/src/components/GooglePayButtonNative.d.ts +1 -0
  230. package/lib/typescript/src/components/GooglePayButtonNative.d.ts.map +1 -0
  231. package/lib/typescript/src/components/PlatformPayButton.d.ts +3 -1
  232. package/lib/typescript/src/components/PlatformPayButton.d.ts.map +1 -0
  233. package/lib/typescript/src/components/StripeContainer.d.ts +2 -1
  234. package/lib/typescript/src/components/StripeContainer.d.ts.map +1 -0
  235. package/lib/typescript/src/components/StripeProvider.d.ts +3 -2
  236. package/lib/typescript/src/components/StripeProvider.d.ts.map +1 -0
  237. package/lib/typescript/src/functions.d.ts +12 -7
  238. package/lib/typescript/src/functions.d.ts.map +1 -0
  239. package/lib/typescript/src/helpers.d.ts +1 -0
  240. package/lib/typescript/src/helpers.d.ts.map +1 -0
  241. package/lib/typescript/src/hooks/useConfirmPayment.d.ts +2 -1
  242. package/lib/typescript/src/hooks/useConfirmPayment.d.ts.map +1 -0
  243. package/lib/typescript/src/hooks/useConfirmSetupIntent.d.ts +1 -0
  244. package/lib/typescript/src/hooks/useConfirmSetupIntent.d.ts.map +1 -0
  245. package/lib/typescript/src/hooks/useFinancialConnectionsSheet.d.ts +5 -2
  246. package/lib/typescript/src/hooks/useFinancialConnectionsSheet.d.ts.map +1 -0
  247. package/lib/typescript/src/hooks/usePaymentSheet.d.ts +2 -1
  248. package/lib/typescript/src/hooks/usePaymentSheet.d.ts.map +1 -0
  249. package/lib/typescript/src/hooks/usePlatformPay.d.ts +4 -3
  250. package/lib/typescript/src/hooks/usePlatformPay.d.ts.map +1 -0
  251. package/lib/typescript/src/hooks/useStripe.d.ts +11 -8
  252. package/lib/typescript/src/hooks/useStripe.d.ts.map +1 -0
  253. package/lib/typescript/src/index.d.ts +1 -0
  254. package/lib/typescript/src/index.d.ts.map +1 -0
  255. package/lib/typescript/src/plugin/withStripe.d.ts +2 -1
  256. package/lib/typescript/src/plugin/withStripe.d.ts.map +1 -0
  257. package/lib/typescript/src/types/ApplePay.d.ts +6 -5
  258. package/lib/typescript/src/types/ApplePay.d.ts.map +1 -0
  259. package/lib/typescript/src/types/Common.d.ts +4 -1
  260. package/lib/typescript/src/types/Common.d.ts.map +1 -0
  261. package/lib/typescript/src/types/CustomerSheet.d.ts +12 -4
  262. package/lib/typescript/src/types/CustomerSheet.d.ts.map +1 -0
  263. package/lib/typescript/src/types/Errors.d.ts +2 -1
  264. package/lib/typescript/src/types/Errors.d.ts.map +1 -0
  265. package/lib/typescript/src/types/FinancialConnections.d.ts +82 -14
  266. package/lib/typescript/src/types/FinancialConnections.d.ts.map +1 -0
  267. package/lib/typescript/src/types/NextAction.d.ts +9 -8
  268. package/lib/typescript/src/types/NextAction.d.ts.map +1 -0
  269. package/lib/typescript/src/types/PaymentIntent.d.ts +41 -14
  270. package/lib/typescript/src/types/PaymentIntent.d.ts.map +1 -0
  271. package/lib/typescript/src/types/PaymentMethod.d.ts +27 -15
  272. package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -0
  273. package/lib/typescript/src/types/PaymentSheet.d.ts +72 -22
  274. package/lib/typescript/src/types/PaymentSheet.d.ts.map +1 -0
  275. package/lib/typescript/src/types/PlatformPay.d.ts +22 -21
  276. package/lib/typescript/src/types/PlatformPay.d.ts.map +1 -0
  277. package/lib/typescript/src/types/PushProvisioning.d.ts +5 -4
  278. package/lib/typescript/src/types/PushProvisioning.d.ts.map +1 -0
  279. package/lib/typescript/src/types/SetupIntent.d.ts +4 -3
  280. package/lib/typescript/src/types/SetupIntent.d.ts.map +1 -0
  281. package/lib/typescript/src/types/ThreeDSecure.d.ts +1 -0
  282. package/lib/typescript/src/types/ThreeDSecure.d.ts.map +1 -0
  283. package/lib/typescript/src/types/Token.d.ts +10 -9
  284. package/lib/typescript/src/types/Token.d.ts.map +1 -0
  285. package/lib/typescript/src/types/components/ApplePayButtonComponent.d.ts +3 -2
  286. package/lib/typescript/src/types/components/ApplePayButtonComponent.d.ts.map +1 -0
  287. package/lib/typescript/src/types/components/AuBECSDebitFormComponent.d.ts +1 -0
  288. package/lib/typescript/src/types/components/AuBECSDebitFormComponent.d.ts.map +1 -0
  289. package/lib/typescript/src/types/components/CardFieldInput.d.ts +8 -5
  290. package/lib/typescript/src/types/components/CardFieldInput.d.ts.map +1 -0
  291. package/lib/typescript/src/types/components/CardFormView.d.ts +9 -6
  292. package/lib/typescript/src/types/components/CardFormView.d.ts.map +1 -0
  293. package/lib/typescript/src/types/components/GooglePayButtonComponent.d.ts +1 -0
  294. package/lib/typescript/src/types/components/GooglePayButtonComponent.d.ts.map +1 -0
  295. package/lib/typescript/src/types/index.d.ts +24 -23
  296. package/lib/typescript/src/types/index.d.ts.map +1 -0
  297. package/package.json +33 -42
  298. package/src/NativeStripeSdk.tsx +5 -3
  299. package/src/components/CardField.tsx +1 -1
  300. package/src/components/CardForm.tsx +12 -9
  301. package/src/components/CustomerSheet.tsx +4 -6
  302. package/src/components/StripeProvider.tsx +17 -0
  303. package/src/functions.ts +70 -16
  304. package/src/hooks/useFinancialConnectionsSheet.tsx +12 -4
  305. package/src/hooks/useStripe.tsx +10 -4
  306. package/src/types/Common.ts +3 -0
  307. package/src/types/CustomerSheet.ts +7 -0
  308. package/src/types/FinancialConnections.ts +72 -0
  309. package/src/types/PaymentIntent.ts +30 -1
  310. package/src/types/PaymentMethod.ts +13 -1
  311. package/src/types/PaymentSheet.ts +65 -5
  312. package/src/types/components/CardFieldInput.ts +8 -4
  313. package/src/types/components/CardFormView.ts +8 -4
  314. package/stripe-react-native.podspec +2 -1
@@ -3,18 +3,18 @@ package com.reactnativestripesdk
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
5
5
  import com.facebook.react.uimanager.events.Event
6
- import com.facebook.react.uimanager.events.RCTEventEmitter
7
6
 
8
- internal class CardChangedEvent constructor(viewTag: Int, private val cardDetails: MutableMap<String, Any?>, private val postalCodeEnabled: Boolean, private val complete: Boolean, private val dangerouslyGetFullCardDetails: Boolean) : Event<CardChangedEvent>(viewTag) {
9
- override fun getEventName(): String {
10
- return EVENT_NAME
11
- }
12
-
13
- override fun dispatch(rctEventEmitter: RCTEventEmitter) {
14
- rctEventEmitter.receiveEvent(viewTag, eventName, serializeEventData())
15
- }
16
-
17
- private fun serializeEventData(): WritableMap {
7
+ internal class CardChangedEvent(
8
+ surfaceId: Int,
9
+ viewTag: Int,
10
+ private val cardDetails: MutableMap<String, Any?>,
11
+ private val postalCodeEnabled: Boolean,
12
+ private val complete: Boolean,
13
+ private val dangerouslyGetFullCardDetails: Boolean,
14
+ ) : Event<CardChangedEvent>(surfaceId, viewTag) {
15
+ override fun getEventName(): String = EVENT_NAME
16
+
17
+ override fun getEventData(): WritableMap? {
18
18
  val eventData = Arguments.createMap()
19
19
  eventData.putString("brand", cardDetails["brand"]?.toString())
20
20
  eventData.putString("last4", cardDetails["last4"]?.toString())
@@ -49,7 +49,6 @@ internal class CardChangedEvent constructor(viewTag: Int, private val cardDetail
49
49
  }
50
50
 
51
51
  companion object {
52
- const val EVENT_NAME = "onCardChange"
52
+ const val EVENT_NAME = "topCardChange"
53
53
  }
54
-
55
54
  }
@@ -13,14 +13,18 @@ import androidx.core.os.LocaleListCompat
13
13
  import com.facebook.react.bridge.ReadableMap
14
14
  import com.facebook.react.uimanager.PixelUtil
15
15
  import com.facebook.react.uimanager.ThemedReactContext
16
- import com.facebook.react.uimanager.UIManagerModule
17
- import com.facebook.react.uimanager.events.EventDispatcher
16
+ import com.facebook.react.uimanager.UIManagerHelper
18
17
  import com.facebook.react.views.text.ReactTypefaceUtils
19
18
  import com.google.android.material.shape.CornerFamily
20
19
  import com.google.android.material.shape.MaterialShapeDrawable
21
20
  import com.google.android.material.shape.ShapeAppearanceModel
22
- import com.reactnativestripesdk.utils.*
21
+ import com.reactnativestripesdk.utils.PostalCodeUtilities
22
+ import com.reactnativestripesdk.utils.getIntOrNull
23
+ import com.reactnativestripesdk.utils.getValOr
24
+ import com.reactnativestripesdk.utils.hideSoftKeyboard
23
25
  import com.reactnativestripesdk.utils.mapCardBrand
26
+ import com.reactnativestripesdk.utils.mapToPreferredNetworks
27
+ import com.reactnativestripesdk.utils.showSoftKeyboard
24
28
  import com.stripe.android.core.model.CountryCode
25
29
  import com.stripe.android.core.model.CountryUtils
26
30
  import com.stripe.android.databinding.StripeCardInputWidgetBinding
@@ -31,13 +35,25 @@ import com.stripe.android.view.CardInputWidget
31
35
  import com.stripe.android.view.CardValidCallback
32
36
  import com.stripe.android.view.StripeEditText
33
37
 
34
- class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
38
+ @SuppressLint("ViewConstructor")
39
+ class CardFieldView(
40
+ private val context: ThemedReactContext,
41
+ ) : FrameLayout(context) {
35
42
  private var mCardWidget: CardInputWidget = CardInputWidget(context)
36
43
  private val cardInputWidgetBinding = StripeCardInputWidgetBinding.bind(mCardWidget)
37
- val cardDetails: MutableMap<String, Any?> = mutableMapOf("brand" to "", "last4" to "", "expiryMonth" to null, "expiryYear" to null, "postalCode" to "", "validNumber" to "Unknown", "validCVC" to "Unknown", "validExpiryDate" to "Unknown")
44
+ val cardDetails: MutableMap<String, Any?> =
45
+ mutableMapOf(
46
+ "brand" to "",
47
+ "last4" to "",
48
+ "expiryMonth" to null,
49
+ "expiryYear" to null,
50
+ "postalCode" to "",
51
+ "validNumber" to "Unknown",
52
+ "validCVC" to "Unknown",
53
+ "validExpiryDate" to "Unknown",
54
+ )
38
55
  var cardParams: PaymentMethodCreateParams.Card? = null
39
56
  var cardAddress: Address? = null
40
- private var mEventDispatcher: EventDispatcher? = context.getNativeModule(UIManagerModule::class.java)?.eventDispatcher
41
57
  private var dangerouslyGetFullCardDetails: Boolean = false
42
58
  private var currentFocusedField: String? = null
43
59
  private var isCardValid = false
@@ -81,8 +97,9 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
81
97
  }
82
98
 
83
99
  private fun onChangeFocus() {
84
- mEventDispatcher?.dispatchEvent(
85
- CardFocusEvent(id, currentFocusedField))
100
+ UIManagerHelper
101
+ .getEventDispatcherForReactTag(context, id)
102
+ ?.dispatchEvent(CardFocusEvent(context.surfaceId, id, currentFocusedField))
86
103
  }
87
104
 
88
105
  fun setCardStyle(value: ReadableMap) {
@@ -96,12 +113,13 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
96
113
  val placeholderColor = getValOr(value, "placeholderColor", null)
97
114
  val textErrorColor = getValOr(value, "textErrorColor", null)
98
115
  val cursorColor = getValOr(value, "cursorColor", null)
99
- val bindings = setOf(
100
- cardInputWidgetBinding.cardNumberEditText,
101
- cardInputWidgetBinding.cvcEditText,
102
- cardInputWidgetBinding.expiryDateEditText,
103
- cardInputWidgetBinding.postalCodeEditText
104
- )
116
+ val bindings =
117
+ setOf(
118
+ cardInputWidgetBinding.cardNumberEditText,
119
+ cardInputWidgetBinding.cvcEditText,
120
+ cardInputWidgetBinding.expiryDateEditText,
121
+ cardInputWidgetBinding.postalCodeEditText,
122
+ )
105
123
 
106
124
  textColor?.let {
107
125
  for (editTextBinding in bindings) {
@@ -127,7 +145,14 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
127
145
  fontFamily?.let {
128
146
  for (editTextBinding in bindings) {
129
147
  // Load custom font from assets, and fallback to default system font
130
- editTextBinding.typeface = ReactTypefaceUtils.applyStyles(null, -1, -1, it.takeIf { it.isNotEmpty() }, context.assets)
148
+ editTextBinding.typeface =
149
+ ReactTypefaceUtils.applyStyles(
150
+ null,
151
+ -1,
152
+ -1,
153
+ it.takeIf { it.isNotEmpty() },
154
+ context.assets,
155
+ )
131
156
  }
132
157
  }
133
158
  cursorColor?.let {
@@ -144,25 +169,26 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
144
169
  }
145
170
 
146
171
  mCardWidget.setPadding(20, 0, 20, 0)
147
- mCardWidget.background = MaterialShapeDrawable(
148
- ShapeAppearanceModel()
149
- .toBuilder()
150
- .setAllCorners(CornerFamily.ROUNDED, PixelUtil.toPixelFromDIP(borderRadius.toDouble()))
151
- .build()
152
- ).also { shape ->
153
- shape.strokeWidth = 0.0f
154
- shape.strokeColor = ColorStateList.valueOf(Color.parseColor("#000000"))
155
- shape.fillColor = ColorStateList.valueOf(Color.parseColor("#FFFFFF"))
156
- borderWidth?.let {
157
- shape.strokeWidth = PixelUtil.toPixelFromDIP(it.toDouble())
158
- }
159
- borderColor?.let {
160
- shape.strokeColor = ColorStateList.valueOf(Color.parseColor(it))
161
- }
162
- backgroundColor?.let {
163
- shape.fillColor = ColorStateList.valueOf(Color.parseColor(it))
172
+ mCardWidget.background =
173
+ MaterialShapeDrawable(
174
+ ShapeAppearanceModel()
175
+ .toBuilder()
176
+ .setAllCorners(CornerFamily.ROUNDED, PixelUtil.toPixelFromDIP(borderRadius.toDouble()))
177
+ .build(),
178
+ ).also { shape ->
179
+ shape.strokeWidth = 0.0f
180
+ shape.strokeColor = ColorStateList.valueOf(Color.parseColor("#000000"))
181
+ shape.fillColor = ColorStateList.valueOf(Color.parseColor("#FFFFFF"))
182
+ borderWidth?.let {
183
+ shape.strokeWidth = PixelUtil.toPixelFromDIP(it.toDouble())
184
+ }
185
+ borderColor?.let {
186
+ shape.strokeColor = ColorStateList.valueOf(Color.parseColor(it))
187
+ }
188
+ backgroundColor?.let {
189
+ shape.fillColor = ColorStateList.valueOf(Color.parseColor(it))
190
+ }
164
191
  }
165
- }
166
192
  }
167
193
 
168
194
  private fun setCardBrandTint(color: Int) {
@@ -175,7 +201,8 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
175
201
  } catch (e: Exception) {
176
202
  Log.e(
177
203
  "StripeReactNative",
178
- "Unable to set card brand tint color: " + e.message)
204
+ "Unable to set card brand tint color: " + e.message,
205
+ )
179
206
  }
180
207
  }
181
208
 
@@ -230,22 +257,25 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
230
257
  @SuppressLint("RestrictedApi")
231
258
  fun setCountryCode(countryString: String?) {
232
259
  if (mCardWidget.postalCodeEnabled) {
233
- val countryCode = CountryCode.create(value = countryString ?: LocaleListCompat.getAdjustedDefault()[0]?.country ?: "US")
260
+ val countryCode =
261
+ CountryCode.create(
262
+ value = countryString ?: LocaleListCompat.getAdjustedDefault()[0]?.country ?: "US",
263
+ )
234
264
  mCardWidget.postalCodeRequired = CountryUtils.doesCountryUsePostalCode(countryCode)
235
265
  setPostalCodeFilter(countryCode)
236
266
  }
237
267
  }
238
268
 
239
- fun getValue(): MutableMap<String, Any?> {
240
- return cardDetails
241
- }
269
+ fun getValue(): MutableMap<String, Any?> = cardDetails
242
270
 
243
271
  private fun onValidCardChange() {
244
272
  mCardWidget.paymentMethodCard?.let {
245
273
  cardParams = it
246
- cardAddress = Address.Builder()
247
- .setPostalCode(cardDetails["postalCode"] as String?)
248
- .build()
274
+ cardAddress =
275
+ Address
276
+ .Builder()
277
+ .setPostalCode(cardDetails["postalCode"] as String?)
278
+ .build()
249
279
  } ?: run {
250
280
  cardParams = null
251
281
  cardAddress = null
@@ -262,8 +292,18 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
262
292
  }
263
293
 
264
294
  private fun sendCardDetailsEvent() {
265
- mEventDispatcher?.dispatchEvent(
266
- CardChangedEvent(id, cardDetails, mCardWidget.postalCodeEnabled, isCardValid, dangerouslyGetFullCardDetails))
295
+ UIManagerHelper
296
+ .getEventDispatcherForReactTag(context, id)
297
+ ?.dispatchEvent(
298
+ CardChangedEvent(
299
+ context.surfaceId,
300
+ id,
301
+ cardDetails,
302
+ mCardWidget.postalCodeEnabled,
303
+ isCardValid,
304
+ dangerouslyGetFullCardDetails,
305
+ ),
306
+ )
267
307
  }
268
308
 
269
309
  private fun setListeners() {
@@ -286,17 +326,33 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
286
326
 
287
327
  mCardWidget.setCardValidCallback { isValid, invalidFields ->
288
328
  isCardValid = isValid
289
- fun getCardValidationState(field: CardValidCallback.Fields, editTextField: StripeEditText): String {
329
+
330
+ fun getCardValidationState(
331
+ field: CardValidCallback.Fields,
332
+ editTextField: StripeEditText,
333
+ ): String {
290
334
  if (invalidFields.contains(field)) {
291
- return if (editTextField.shouldShowError) "Invalid"
292
- else "Incomplete"
335
+ return if (editTextField.shouldShowError) {
336
+ "Invalid"
337
+ } else {
338
+ "Incomplete"
339
+ }
293
340
  }
294
341
  return "Valid"
295
342
  }
296
343
 
297
- cardDetails["validNumber"] = getCardValidationState(CardValidCallback.Fields.Number, cardInputWidgetBinding.cardNumberEditText)
298
- cardDetails["validCVC"] = getCardValidationState(CardValidCallback.Fields.Cvc, cardInputWidgetBinding.cvcEditText)
299
- cardDetails["validExpiryDate"] = getCardValidationState(CardValidCallback.Fields.Expiry, cardInputWidgetBinding.expiryDateEditText)
344
+ cardDetails["validNumber"] =
345
+ getCardValidationState(
346
+ CardValidCallback.Fields.Number,
347
+ cardInputWidgetBinding.cardNumberEditText,
348
+ )
349
+ cardDetails["validCVC"] =
350
+ getCardValidationState(CardValidCallback.Fields.Cvc, cardInputWidgetBinding.cvcEditText)
351
+ cardDetails["validExpiryDate"] =
352
+ getCardValidationState(
353
+ CardValidCallback.Fields.Expiry,
354
+ cardInputWidgetBinding.expiryDateEditText,
355
+ )
300
356
  cardDetails["brand"] = mapCardBrand(cardInputWidgetBinding.cardNumberEditText.cardBrand)
301
357
 
302
358
  if (isValid) {
@@ -308,69 +364,148 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
308
364
  }
309
365
  }
310
366
 
311
- mCardWidget.setCardInputListener(object : CardInputListener {
312
- override fun onCardComplete() {}
313
- override fun onExpirationComplete() {}
314
- override fun onCvcComplete() {}
315
- override fun onPostalCodeComplete() {}
316
- override fun onFocusChange(focusField: CardInputListener.FocusField) {}
317
- })
318
-
319
- mCardWidget.setExpiryDateTextWatcher(object : TextWatcher {
320
- override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
321
- override fun afterTextChanged(p0: Editable?) {}
322
- override fun onTextChanged(var1: CharSequence?, var2: Int, var3: Int, var4: Int) {
323
- val splitText = var1.toString().split("/")
324
- cardDetails["expiryMonth"] = splitText[0].toIntOrNull()
325
-
326
- if (splitText.size == 2) {
327
- cardDetails["expiryYear"] = var1.toString().split("/")[1].toIntOrNull()
367
+ mCardWidget.setCardInputListener(
368
+ object : CardInputListener {
369
+ override fun onCardComplete() {}
370
+
371
+ override fun onExpirationComplete() {}
372
+
373
+ override fun onCvcComplete() {}
374
+
375
+ override fun onPostalCodeComplete() {}
376
+
377
+ override fun onFocusChange(focusField: CardInputListener.FocusField) {}
378
+ },
379
+ )
380
+
381
+ mCardWidget.setExpiryDateTextWatcher(
382
+ object : TextWatcher {
383
+ override fun beforeTextChanged(
384
+ p0: CharSequence?,
385
+ p1: Int,
386
+ p2: Int,
387
+ p3: Int,
388
+ ) {
328
389
  }
329
- }
330
- })
331
390
 
332
- mCardWidget.setPostalCodeTextWatcher(object : TextWatcher {
333
- override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
334
- override fun afterTextChanged(p0: Editable?) {}
335
- override fun onTextChanged(var1: CharSequence?, var2: Int, var3: Int, var4: Int) {
336
- cardDetails["postalCode"] = var1.toString()
337
- }
338
- })
339
-
340
- mCardWidget.setCardNumberTextWatcher(object : TextWatcher {
341
- override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
342
- override fun afterTextChanged(p0: Editable?) {}
343
- override fun onTextChanged(var1: CharSequence?, var2: Int, var3: Int, var4: Int) {
344
- if (dangerouslyGetFullCardDetails) {
345
- cardDetails["number"] = var1.toString().replace(" ", "")
391
+ override fun afterTextChanged(p0: Editable?) {}
392
+
393
+ override fun onTextChanged(
394
+ var1: CharSequence?,
395
+ var2: Int,
396
+ var3: Int,
397
+ var4: Int,
398
+ ) {
399
+ val splitText = var1.toString().split("/")
400
+ cardDetails["expiryMonth"] = splitText[0].toIntOrNull()
401
+
402
+ if (splitText.size == 2) {
403
+ cardDetails["expiryYear"] = var1.toString().split("/")[1].toIntOrNull()
404
+ }
346
405
  }
347
- }
348
- })
349
-
350
- mCardWidget.setCvcNumberTextWatcher(object : TextWatcher {
351
- override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
352
- override fun afterTextChanged(p0: Editable?) {}
353
- override fun onTextChanged(var1: CharSequence?, var2: Int, var3: Int, var4: Int) {
354
- if (dangerouslyGetFullCardDetails) {
355
- cardDetails["cvc"] = var1.toString()
406
+ },
407
+ )
408
+
409
+ mCardWidget.setPostalCodeTextWatcher(
410
+ object : TextWatcher {
411
+ override fun beforeTextChanged(
412
+ p0: CharSequence?,
413
+ p1: Int,
414
+ p2: Int,
415
+ p3: Int,
416
+ ) {
356
417
  }
357
- }
358
- })
418
+
419
+ override fun afterTextChanged(p0: Editable?) {}
420
+
421
+ override fun onTextChanged(
422
+ var1: CharSequence?,
423
+ var2: Int,
424
+ var3: Int,
425
+ var4: Int,
426
+ ) {
427
+ cardDetails["postalCode"] = var1.toString()
428
+ }
429
+ },
430
+ )
431
+
432
+ mCardWidget.setCardNumberTextWatcher(
433
+ object : TextWatcher {
434
+ override fun beforeTextChanged(
435
+ p0: CharSequence?,
436
+ p1: Int,
437
+ p2: Int,
438
+ p3: Int,
439
+ ) {
440
+ }
441
+
442
+ override fun afterTextChanged(p0: Editable?) {}
443
+
444
+ override fun onTextChanged(
445
+ var1: CharSequence?,
446
+ var2: Int,
447
+ var3: Int,
448
+ var4: Int,
449
+ ) {
450
+ if (dangerouslyGetFullCardDetails) {
451
+ cardDetails["number"] = var1.toString().replace(" ", "")
452
+ }
453
+ }
454
+ },
455
+ )
456
+
457
+ mCardWidget.setCvcNumberTextWatcher(
458
+ object : TextWatcher {
459
+ override fun beforeTextChanged(
460
+ p0: CharSequence?,
461
+ p1: Int,
462
+ p2: Int,
463
+ p3: Int,
464
+ ) {
465
+ }
466
+
467
+ override fun afterTextChanged(p0: Editable?) {}
468
+
469
+ override fun onTextChanged(
470
+ var1: CharSequence?,
471
+ var2: Int,
472
+ var3: Int,
473
+ var4: Int,
474
+ ) {
475
+ if (dangerouslyGetFullCardDetails) {
476
+ cardDetails["cvc"] = var1.toString()
477
+ }
478
+ }
479
+ },
480
+ )
359
481
  }
360
482
 
483
+ @SuppressLint("RestrictedApi")
361
484
  private fun setPostalCodeFilter(countryCode: CountryCode) {
362
- cardInputWidgetBinding.postalCodeEditText.filters = arrayOf(
363
- *cardInputWidgetBinding.postalCodeEditText.filters,
364
- createPostalCodeInputFilter(countryCode)
365
- )
485
+ cardInputWidgetBinding.postalCodeEditText.filters =
486
+ arrayOf(
487
+ *cardInputWidgetBinding.postalCodeEditText.filters,
488
+ createPostalCodeInputFilter(countryCode),
489
+ )
366
490
  }
367
491
 
368
492
  @SuppressLint("RestrictedApi")
369
493
  private fun createPostalCodeInputFilter(countryCode: CountryCode): InputFilter {
370
494
  return InputFilter { charSequence, start, end, _, _, _ ->
371
495
  for (i in start until end) {
372
- val isValidCharacter = (countryCode == CountryCode.US && PostalCodeUtilities.isValidUsPostalCodeCharacter(charSequence[i])) ||
373
- (countryCode != CountryCode.US && PostalCodeUtilities.isValidGlobalPostalCodeCharacter(charSequence[i]))
496
+ val isValidCharacter =
497
+ (
498
+ countryCode == CountryCode.US &&
499
+ PostalCodeUtilities.isValidUsPostalCodeCharacter(
500
+ charSequence[i],
501
+ )
502
+ ) ||
503
+ (
504
+ countryCode != CountryCode.US &&
505
+ PostalCodeUtilities.isValidGlobalPostalCodeCharacter(
506
+ charSequence[i],
507
+ )
508
+ )
374
509
  if (!isValidCharacter) {
375
510
  return@InputFilter ""
376
511
  }
@@ -384,10 +519,12 @@ class CardFieldView(context: ThemedReactContext) : FrameLayout(context) {
384
519
  post(mLayoutRunnable)
385
520
  }
386
521
 
387
- private val mLayoutRunnable = Runnable {
388
- measure(
389
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
390
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY))
391
- layout(left, top, right, bottom)
392
- }
522
+ private val mLayoutRunnable =
523
+ Runnable {
524
+ measure(
525
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
526
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY),
527
+ )
528
+ layout(left, top, right, bottom)
529
+ }
393
530
  }
@@ -2,23 +2,28 @@ package com.reactnativestripesdk
2
2
 
3
3
  import com.facebook.react.bridge.ReadableArray
4
4
  import com.facebook.react.bridge.ReadableMap
5
- import com.facebook.react.common.MapBuilder
5
+ import com.facebook.react.module.annotations.ReactModule
6
6
  import com.facebook.react.uimanager.SimpleViewManager
7
7
  import com.facebook.react.uimanager.ThemedReactContext
8
8
  import com.facebook.react.uimanager.annotations.ReactProp
9
9
 
10
+ @ReactModule(name = CardFieldViewManager.REACT_CLASS)
10
11
  class CardFieldViewManager : SimpleViewManager<CardFieldView>() {
11
- override fun getName() = "CardField"
12
+ override fun getName() = REACT_CLASS
12
13
 
13
14
  private var reactContextRef: ThemedReactContext? = null
14
15
 
15
- override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> {
16
- return MapBuilder.of(
17
- CardFocusEvent.EVENT_NAME, MapBuilder.of("registrationName", "onFocusChange"),
18
- CardChangedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCardChange"))
19
- }
20
-
21
- override fun receiveCommand(root: CardFieldView, commandId: String?, args: ReadableArray?) {
16
+ override fun getExportedCustomDirectEventTypeConstants() =
17
+ mutableMapOf(
18
+ CardFocusEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFocusChange"),
19
+ CardChangedEvent.EVENT_NAME to mutableMapOf("registrationName" to "onCardChange"),
20
+ )
21
+
22
+ override fun receiveCommand(
23
+ root: CardFieldView,
24
+ commandId: String?,
25
+ args: ReadableArray?,
26
+ ) {
22
27
  when (commandId) {
23
28
  "focus" -> root.requestFocusFromJS()
24
29
  "blur" -> root.requestBlurFromJS()
@@ -27,53 +32,81 @@ class CardFieldViewManager : SimpleViewManager<CardFieldView>() {
27
32
  }
28
33
 
29
34
  @ReactProp(name = "dangerouslyGetFullCardDetails")
30
- fun setDangerouslyGetFullCardDetails(view: CardFieldView, dangerouslyGetFullCardDetails: Boolean = false) {
35
+ fun setDangerouslyGetFullCardDetails(
36
+ view: CardFieldView,
37
+ dangerouslyGetFullCardDetails: Boolean = false,
38
+ ) {
31
39
  view.setDangerouslyGetFullCardDetails(dangerouslyGetFullCardDetails)
32
40
  }
33
41
 
34
42
  @ReactProp(name = "postalCodeEnabled")
35
- fun setPostalCodeEnabled(view: CardFieldView, postalCodeEnabled: Boolean = true) {
43
+ fun setPostalCodeEnabled(
44
+ view: CardFieldView,
45
+ postalCodeEnabled: Boolean = true,
46
+ ) {
36
47
  view.setPostalCodeEnabled(postalCodeEnabled)
37
48
  }
38
49
 
39
50
  @ReactProp(name = "autofocus")
40
- fun setAutofocus(view: CardFieldView, autofocus: Boolean = false) {
51
+ fun setAutofocus(
52
+ view: CardFieldView,
53
+ autofocus: Boolean = false,
54
+ ) {
41
55
  view.setAutofocus(autofocus)
42
56
  }
43
57
 
44
58
  @ReactProp(name = "cardStyle")
45
- fun setCardStyle(view: CardFieldView, cardStyle: ReadableMap) {
59
+ fun setCardStyle(
60
+ view: CardFieldView,
61
+ cardStyle: ReadableMap,
62
+ ) {
46
63
  view.setCardStyle(cardStyle)
47
64
  }
48
65
 
49
66
  @ReactProp(name = "countryCode")
50
- fun setCountryCode(view: CardFieldView, countryCode: String?) {
67
+ fun setCountryCode(
68
+ view: CardFieldView,
69
+ countryCode: String?,
70
+ ) {
51
71
  view.setCountryCode(countryCode)
52
72
  }
53
73
 
54
74
  @ReactProp(name = "onBehalfOf")
55
- fun setOnBehalfOf(view: CardFieldView, onBehalfOf: String?) {
75
+ fun setOnBehalfOf(
76
+ view: CardFieldView,
77
+ onBehalfOf: String?,
78
+ ) {
56
79
  view.setOnBehalfOf(onBehalfOf)
57
80
  }
58
81
 
59
82
  @ReactProp(name = "placeholders")
60
- fun setPlaceHolders(view: CardFieldView, placeholders: ReadableMap) {
83
+ fun setPlaceHolders(
84
+ view: CardFieldView,
85
+ placeholders: ReadableMap,
86
+ ) {
61
87
  view.setPlaceHolders(placeholders)
62
88
  }
63
89
 
64
90
  @ReactProp(name = "disabled")
65
- fun setDisabled(view: CardFieldView, isDisabled: Boolean) {
91
+ fun setDisabled(
92
+ view: CardFieldView,
93
+ isDisabled: Boolean,
94
+ ) {
66
95
  view.setDisabled(isDisabled)
67
96
  }
68
97
 
69
98
  @ReactProp(name = "preferredNetworks")
70
- fun setPreferredNetworks(view: CardFieldView, preferredNetworks: ReadableArray?) {
99
+ fun setPreferredNetworks(
100
+ view: CardFieldView,
101
+ preferredNetworks: ReadableArray?,
102
+ ) {
71
103
  val networks = preferredNetworks?.toArrayList()?.filterIsInstance<Int>()?.let { ArrayList(it) }
72
104
  view.setPreferredNetworks(networks)
73
105
  }
74
106
 
75
107
  override fun createViewInstance(reactContext: ThemedReactContext): CardFieldView {
76
- val stripeSdkModule: StripeSdkModule? = reactContext.getNativeModule(StripeSdkModule::class.java)
108
+ val stripeSdkModule: StripeSdkModule? =
109
+ reactContext.getNativeModule(StripeSdkModule::class.java)
77
110
  val view = CardFieldView(reactContext)
78
111
 
79
112
  reactContextRef = reactContext
@@ -85,8 +118,13 @@ class CardFieldViewManager : SimpleViewManager<CardFieldView>() {
85
118
  override fun onDropViewInstance(view: CardFieldView) {
86
119
  super.onDropViewInstance(view)
87
120
 
88
- val stripeSdkModule: StripeSdkModule? = reactContextRef?.getNativeModule(StripeSdkModule::class.java)
121
+ val stripeSdkModule: StripeSdkModule? =
122
+ reactContextRef?.getNativeModule(StripeSdkModule::class.java)
89
123
  stripeSdkModule?.cardFieldView = null
90
124
  reactContextRef = null
91
125
  }
126
+
127
+ companion object {
128
+ const val REACT_CLASS = "CardField"
129
+ }
92
130
  }