@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.
- package/README.md +2 -2
- package/android/detekt/detekt-baseline.xml +1 -76
- package/android/gradle.properties +4 -4
- package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +3 -1
- package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormViewManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +56 -58
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementEvent.kt +26 -0
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +139 -0
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +59 -0
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +105 -49
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +72 -12
- package/android/src/main/java/com/reactnativestripesdk/EventEmitterCompat.kt +4 -0
- package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetManager.kt +8 -4
- package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +26 -11
- package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/NavigationBarView.kt +14 -5
- package/android/src/main/java/com/reactnativestripesdk/PaymentElementConfig.kt +6 -2
- package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfig.kt +6 -2
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementViewManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/PaymentOptionDisplayDataMapper.kt +8 -4
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +9 -3
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +118 -48
- package/android/src/main/java/com/reactnativestripesdk/StripeAbstractComposeView.kt +1 -0
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +281 -46
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +2 -0
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +3 -1
- package/android/src/main/java/com/reactnativestripesdk/customersheet/CustomerSheetManager.kt +8 -18
- package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerAdapter.kt +3 -1
- package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerSessionProvider.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutAddressUpdate.kt +45 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutMappers.kt +127 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/DefaultActivityLifecycleCallbacks.kt +41 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +4 -2
- package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -1
- package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +29 -13
- package/android/src/main/java/com/reactnativestripesdk/utils/PostalCodeUtilities.kt +2 -1
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +6 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +2 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +35 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +18 -0
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeOnrampSdkModuleSpec.java +17 -3
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +13 -1
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampMappers.kt +116 -0
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +109 -1
- package/android/src/test/java/com/reactnativestripesdk/DrawableLoadingTest.kt +6 -2
- package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +60 -0
- package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +145 -0
- package/android/src/test/java/com/reactnativestripesdk/mappers/PaymentOptionDisplayDataMapperTest.kt +9 -4
- package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutMappersTest.kt +98 -0
- package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutTestFixtures.java +57 -0
- package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewController.swift +6 -8
- package/ios/CurrencySelectorElementManager.m +16 -0
- package/ios/CurrencySelectorElementView.swift +159 -0
- package/ios/EmbeddedPaymentElementView.swift +1 -1
- package/ios/Mappers+Checkout.swift +337 -0
- package/ios/Mappers.swift +90 -2
- package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +16 -2
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.h +10 -0
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +89 -0
- package/ios/OldArch/StripeSdkEventEmitterCompat.h +1 -0
- package/ios/OldArch/StripeSdkEventEmitterCompat.m +6 -0
- package/ios/PaymentOptionDisplayData+ReactNative.swift +1 -1
- package/ios/PaymentSheetAppearance.swift +1 -1
- package/ios/StripeOnrampSdk.mm +19 -0
- package/ios/StripeSdk.mm +136 -0
- package/ios/StripeSdkEmitter.swift +1 -0
- package/ios/StripeSdkImpl+Checkout.swift +360 -0
- package/ios/StripeSdkImpl+CustomerSheet.swift +1 -1
- package/ios/StripeSdkImpl+Embedded.swift +108 -27
- package/ios/StripeSdkImpl+PaymentSheet.swift +18 -2
- package/ios/StripeSdkImpl.swift +89 -7
- package/jest/mock.js +13 -1
- package/lib/commonjs/components/AddToWalletButton.js +1 -1
- package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
- package/lib/commonjs/components/AddressSheet.js +1 -1
- package/lib/commonjs/components/AddressSheet.js.map +1 -1
- package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
- package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
- package/lib/commonjs/components/CardField.js +1 -1
- package/lib/commonjs/components/CardField.js.map +1 -1
- package/lib/commonjs/components/CardForm.js +1 -1
- package/lib/commonjs/components/CardForm.js.map +1 -1
- package/lib/commonjs/components/CurrencySelectorElement.js +2 -0
- package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -0
- package/lib/commonjs/components/PaymentMethodMessagingElement.js +1 -1
- package/lib/commonjs/components/PaymentMethodMessagingElement.js.map +1 -1
- package/lib/commonjs/components/PlatformPayButton.js +1 -1
- package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
- package/lib/commonjs/components/StripeContainer.js +1 -1
- package/lib/commonjs/components/StripeContainer.js.map +1 -1
- package/lib/commonjs/connect/Components.js +1 -1
- package/lib/commonjs/connect/Components.js.map +1 -1
- package/lib/commonjs/connect/ConnectComponentsProvider.js +1 -1
- package/lib/commonjs/connect/ConnectComponentsProvider.js.map +1 -1
- package/lib/commonjs/connect/EmbeddedComponent.js +1 -1
- package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
- package/lib/commonjs/connect/ModalCloseButton.js +1 -1
- package/lib/commonjs/connect/ModalCloseButton.js.map +1 -1
- package/lib/commonjs/connect/NavigationBar.js +1 -1
- package/lib/commonjs/connect/NavigationBar.js.map +1 -1
- package/lib/commonjs/events.js.map +1 -1
- package/lib/commonjs/functions.js +1 -1
- package/lib/commonjs/functions.js.map +1 -1
- package/lib/commonjs/helpers.js +1 -1
- package/lib/commonjs/hooks/useCheckout.js +1 -1
- package/lib/commonjs/hooks/useCheckout.js.map +1 -1
- package/lib/commonjs/hooks/useOnramp.js +1 -1
- package/lib/commonjs/hooks/useOnramp.js.map +1 -1
- package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
- package/lib/commonjs/specs/NativeAddressSheet.js +1 -1
- package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
- package/lib/commonjs/specs/NativeAuBECSDebitForm.js +1 -1
- package/lib/commonjs/specs/NativeCardField.js +1 -1
- package/lib/commonjs/specs/NativeCardField.js.map +1 -1
- package/lib/commonjs/specs/NativeCardForm.js +1 -1
- package/lib/commonjs/specs/NativeCardForm.js.map +1 -1
- package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js +1 -1
- package/lib/commonjs/specs/NativeCurrencySelectorElement.js +2 -0
- package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -0
- package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
- package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
- package/lib/commonjs/specs/NativeGooglePayButton.js +1 -1
- package/lib/commonjs/specs/NativeNavigationBar.js +1 -1
- package/lib/commonjs/specs/NativeOnrampSdkModule.js.map +1 -1
- package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js +1 -1
- package/lib/commonjs/specs/NativeStripeContainer.js +1 -1
- package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
- package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
- package/lib/module/components/AddToWalletButton.js +1 -1
- package/lib/module/components/AddToWalletButton.js.map +1 -1
- package/lib/module/components/AddressSheet.js +1 -1
- package/lib/module/components/AddressSheet.js.map +1 -1
- package/lib/module/components/AuBECSDebitForm.js +1 -1
- package/lib/module/components/AuBECSDebitForm.js.map +1 -1
- package/lib/module/components/CardField.js +1 -1
- package/lib/module/components/CardField.js.map +1 -1
- package/lib/module/components/CardForm.js +1 -1
- package/lib/module/components/CardForm.js.map +1 -1
- package/lib/module/components/CurrencySelectorElement.js +2 -0
- package/lib/module/components/CurrencySelectorElement.js.map +1 -0
- package/lib/module/components/PaymentMethodMessagingElement.js +1 -1
- package/lib/module/components/PaymentMethodMessagingElement.js.map +1 -1
- package/lib/module/components/PlatformPayButton.js +1 -1
- package/lib/module/components/PlatformPayButton.js.map +1 -1
- package/lib/module/components/StripeContainer.js +1 -1
- package/lib/module/components/StripeContainer.js.map +1 -1
- package/lib/module/connect/Components.js +1 -1
- package/lib/module/connect/Components.js.map +1 -1
- package/lib/module/connect/ConnectComponentsProvider.js +1 -1
- package/lib/module/connect/ConnectComponentsProvider.js.map +1 -1
- package/lib/module/connect/EmbeddedComponent.js +1 -1
- package/lib/module/connect/EmbeddedComponent.js.map +1 -1
- package/lib/module/connect/ModalCloseButton.js +1 -1
- package/lib/module/connect/ModalCloseButton.js.map +1 -1
- package/lib/module/connect/NavigationBar.js +1 -1
- package/lib/module/connect/NavigationBar.js.map +1 -1
- package/lib/module/events.js.map +1 -1
- package/lib/module/functions.js +1 -1
- package/lib/module/functions.js.map +1 -1
- package/lib/module/helpers.js +1 -1
- package/lib/module/hooks/useCheckout.js +1 -1
- package/lib/module/hooks/useCheckout.js.map +1 -1
- package/lib/module/hooks/useOnramp.js +1 -1
- package/lib/module/hooks/useOnramp.js.map +1 -1
- package/lib/module/specs/NativeAddToWalletButton.js +1 -1
- package/lib/module/specs/NativeAddressSheet.js +1 -1
- package/lib/module/specs/NativeApplePayButton.js +1 -1
- package/lib/module/specs/NativeAuBECSDebitForm.js +1 -1
- package/lib/module/specs/NativeCardField.js +1 -1
- package/lib/module/specs/NativeCardField.js.map +1 -1
- package/lib/module/specs/NativeCardForm.js +1 -1
- package/lib/module/specs/NativeCardForm.js.map +1 -1
- package/lib/module/specs/NativeConnectAccountOnboardingView.js +1 -1
- package/lib/module/specs/NativeCurrencySelectorElement.js +2 -0
- package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -0
- package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
- package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
- package/lib/module/specs/NativeGooglePayButton.js +1 -1
- package/lib/module/specs/NativeNavigationBar.js +1 -1
- package/lib/module/specs/NativeOnrampSdkModule.js.map +1 -1
- package/lib/module/specs/NativePaymentMethodMessagingElement.js +1 -1
- package/lib/module/specs/NativeStripeContainer.js +1 -1
- package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/module/types/EmbeddedPaymentElement.js +1 -1
- package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
- package/lib/typescript/src/components/CurrencySelectorElement.d.ts +62 -0
- package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -0
- package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts +1 -1
- package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts.map +1 -1
- package/lib/typescript/src/events.d.ts +11 -0
- package/lib/typescript/src/events.d.ts.map +1 -1
- package/lib/typescript/src/functions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useCheckout.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useOnramp.d.ts +22 -0
- package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +25 -0
- package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +5 -1
- package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts +3 -0
- package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +5 -2
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/types/Checkout.d.ts +268 -86
- package/lib/typescript/src/types/Checkout.d.ts.map +1 -1
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +36 -1
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/types/Onramp.d.ts +94 -0
- package/lib/typescript/src/types/Onramp.d.ts.map +1 -1
- package/package.json +16 -4
- package/src/components/CurrencySelectorElement.tsx +95 -0
- package/src/components/PaymentMethodMessagingElement.tsx +54 -52
- package/src/events.ts +11 -0
- package/src/functions.ts +30 -1
- package/src/hooks/useCheckout.tsx +129 -74
- package/src/hooks/useOnramp.tsx +44 -0
- package/src/specs/NativeCurrencySelectorElement.ts +35 -0
- package/src/specs/NativeEmbeddedPaymentElement.ts +12 -2
- package/src/specs/NativeOnrampSdkModule.ts +5 -0
- package/src/specs/NativeStripeSdkModule.ts +16 -2
- package/src/types/Checkout.ts +291 -86
- package/src/types/EmbeddedPaymentElement.tsx +117 -26
- package/src/types/Onramp.ts +109 -0
- package/stripe-react-native.podspec +1 -1
- package/android/.idea/AndroidProjectSystem.xml +0 -6
- package/android/.idea/caches/deviceStreaming.xml +0 -835
- package/android/.idea/compiler.xml +0 -6
- package/android/.idea/gradle.xml +0 -17
- package/android/.idea/migrations.xml +0 -10
- package/android/.idea/misc.xml +0 -10
- package/android/.idea/runConfigurations.xml +0 -17
- package/android/.idea/vcs.xml +0 -6
- 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
|
|
79
|
-
- Your `compileSdkVersion` must be `
|
|
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.<no name provided>${ }</ID>
|
|
15
|
-
<ID>EmptyFunctionBlock:CardFieldView.kt:CardFieldView.<no name provided>${}</ID>
|
|
16
|
-
<ID>EmptyFunctionBlock:CustomerSheetManager.kt:CustomerSheetManager.<no name provided>${ }</ID>
|
|
17
|
-
<ID>EmptyFunctionBlock:CustomerSheetManager.kt:CustomerSheetManager.<no name provided>${}</ID>
|
|
18
|
-
<ID>EmptyFunctionBlock:DrawableLoadingTest.kt:DrawableLoadingTest.MockAsyncDrawable${}</ID>
|
|
19
|
-
<ID>EmptyFunctionBlock:PaymentSheetManager.kt:<no name provided>${}</ID>
|
|
20
|
-
<ID>EmptyFunctionBlock:PaymentSheetManager.kt:PaymentSheetManager.<no name provided>${ }</ID>
|
|
21
|
-
<ID>EmptyFunctionBlock:PaymentSheetManager.kt:PaymentSheetManager.<no name provided>${}</ID>
|
|
22
|
-
<ID>EmptyFunctionBlock:StripeAbstractComposeView.kt:StripeAbstractComposeView.CompatView${ }</ID>
|
|
23
|
-
<ID>EmptyFunctionBlock:StripeSdkModule.kt:StripeSdkModule.<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 <b><font color=\"#0000FF\"><u><a href=\"https://stripe.com/terms\">Terms</a></u></font></b> and <i><font color=\"#FF0000\"><a href=\"https://stripe.com/privacy\">Privacy</a></font></i>. Important details are <span style=\"background-color: #FFFF00;\">highlighted</span>."</ID>
|
|
103
|
-
<ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"By continuing, you agree to our <a href=\"https://stripe.com/privacy\">Privacy Policy</a> and <a href=\"https://stripe.com/terms\">Terms of Service</a>."</ID>
|
|
104
|
-
<ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"Check <b><a href=\"https://stripe.com\">Stripe</a></b> and <i><font color=\"#00FF00\"><a href=\"https://github.com\">GitHub</a></font></i>"</ID>
|
|
105
|
-
<ID>MaxLineLength:PaymentOptionDisplayDataMapperTest.kt:PaymentOptionDisplayDataMapperTest$"Visit our <b><font color=\"#0000FF\"><a href=\"https://stripe.com/privacy\">Privacy Policy</a></font></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<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=
|
|
3
|
-
StripeSdk_targetSdkVersion=
|
|
4
|
-
StripeSdk_minSdkVersion=
|
|
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
|
+
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(
|
|
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 =
|
|
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(
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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 :
|
|
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
|
+
}
|