@stripe/stripe-react-native 0.55.1 → 0.57.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/android/gradle.properties +1 -1
- package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +4 -3
- package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +7 -6
- package/android/src/main/java/com/reactnativestripesdk/CardFormView.kt +11 -11
- package/android/src/main/java/com/reactnativestripesdk/{CollectBankAccountLauncherFragment.kt → CollectBankAccountLauncherManager.kt} +21 -44
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +17 -24
- package/android/src/main/java/com/reactnativestripesdk/EventEmitterCompat.kt +8 -0
- package/android/src/main/java/com/reactnativestripesdk/{FinancialConnectionsSheetFragment.kt → FinancialConnectionsSheetManager.kt} +30 -77
- package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +107 -0
- package/android/src/main/java/com/reactnativestripesdk/GooglePayPaymentMethodLauncherManager.kt +37 -0
- package/android/src/main/java/com/reactnativestripesdk/{PaymentLauncherFragment.kt → PaymentLauncherManager.kt} +39 -77
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +8 -20
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +366 -483
- package/android/src/main/java/com/reactnativestripesdk/{PaymentSheetFragment.kt → PaymentSheetManager.kt} +79 -88
- package/android/src/main/java/com/reactnativestripesdk/StripeAbstractComposeView.kt +3 -2
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +213 -210
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherManager.kt +78 -0
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +48 -35
- package/android/src/main/java/com/reactnativestripesdk/customersheet/{CustomerSheetFragment.kt → CustomerSheetManager.kt} +127 -104
- package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerSessionProvider.kt +35 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +47 -12
- package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +87 -142
- package/android/src/main/java/com/reactnativestripesdk/utils/StripeUIManager.kt +62 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/ApplePayButtonManagerDelegate.java +12 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/ApplePayButtonManagerInterface.java +4 -0
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +8 -64
- package/ios/AddressSheet/AddressSheetView.swift +1 -1
- package/ios/ApplePayButtonManager.m +1 -1
- package/ios/ApplePayButtonView.swift +2 -2
- package/ios/FinancialConnections.swift +2 -2
- package/ios/Mappers.swift +2 -4
- package/ios/NewArch/ApplePayButtonComponentView.mm +1 -1
- package/ios/OldArch/StripeSdkEventEmitterCompat.h +2 -0
- package/ios/OldArch/StripeSdkEventEmitterCompat.m +12 -0
- package/ios/PaymentMethodFactory.swift +0 -17
- package/ios/PushProvisioning/AddToWalletButtonView.swift +1 -1
- package/ios/StripeSdk.mm +14 -0
- package/ios/StripeSdkEmitter.swift +2 -0
- package/ios/StripeSdkImpl+CustomerSheet.swift +71 -20
- package/ios/StripeSdkImpl+PaymentSheet.swift +29 -13
- package/ios/StripeSdkImpl.swift +9 -7
- 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/CustomerSheet.js +1 -1
- package/lib/commonjs/components/CustomerSheet.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/events.js.map +1 -1
- package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
- package/lib/commonjs/specs/NativeApplePayButton.js.map +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/commonjs/types/PaymentIntent.js.map +1 -1
- package/lib/commonjs/types/PaymentSheet.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/CustomerSheet.js +1 -1
- package/lib/module/components/CustomerSheet.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/events.js.map +1 -1
- package/lib/module/specs/NativeApplePayButton.js +1 -1
- package/lib/module/specs/NativeApplePayButton.js.map +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/module/types/PaymentIntent.js.map +1 -1
- package/lib/module/types/PaymentSheet.js.map +1 -1
- package/lib/typescript/src/components/CustomerSheet.d.ts +1 -1
- package/lib/typescript/src/components/CustomerSheet.d.ts.map +1 -1
- package/lib/typescript/src/events.d.ts +2 -0
- package/lib/typescript/src/events.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeApplePayButton.d.ts +1 -1
- package/lib/typescript/src/specs/NativeApplePayButton.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +3 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/types/ConfirmationToken.d.ts +0 -3
- package/lib/typescript/src/types/ConfirmationToken.d.ts.map +1 -1
- package/lib/typescript/src/types/CustomerSheet.d.ts +70 -12
- package/lib/typescript/src/types/CustomerSheet.d.ts.map +1 -1
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +2 -4
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentIntent.d.ts +1 -9
- package/lib/typescript/src/types/PaymentIntent.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentMethod.d.ts +2 -8
- package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentSheet.d.ts +1 -6
- package/lib/typescript/src/types/PaymentSheet.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/CustomerSheet.tsx +65 -9
- package/src/components/PlatformPayButton.tsx +1 -1
- package/src/events.ts +2 -0
- package/src/specs/NativeApplePayButton.ts +1 -1
- package/src/specs/NativeStripeSdkModule.ts +7 -0
- package/src/types/ConfirmationToken.ts +0 -3
- package/src/types/CustomerSheet.ts +80 -12
- package/src/types/EmbeddedPaymentElement.tsx +2 -4
- package/src/types/PaymentIntent.ts +0 -10
- package/src/types/PaymentMethod.ts +0 -9
- package/src/types/PaymentSheet.ts +1 -6
- package/stripe-react-native.podspec +1 -1
- package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +0 -146
- package/android/src/main/java/com/reactnativestripesdk/GooglePayPaymentMethodLauncherFragment.kt +0 -68
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherFragment.kt +0 -102
- package/android/src/main/java/com/reactnativestripesdk/utils/StripeFragment.kt +0 -52
|
@@ -97,9 +97,7 @@ export type SetupParams =
|
|
|
97
97
|
})
|
|
98
98
|
| (SetupParamsBase & {
|
|
99
99
|
customerEphemeralKeySecret?: never;
|
|
100
|
-
/**
|
|
101
|
-
* The client secret of this Customer Session. Used on the client to set up secure access to the given customer.
|
|
102
|
-
*/
|
|
100
|
+
/** The client secret of this Customer Session. Used on the client to set up secure access to the given customer. */
|
|
103
101
|
customerSessionClientSecret: string;
|
|
104
102
|
})
|
|
105
103
|
| SetupParamsBase;
|
|
@@ -580,9 +578,6 @@ export type IntentConfiguration = {
|
|
|
580
578
|
) => void;
|
|
581
579
|
|
|
582
580
|
/**
|
|
583
|
-
* @internal DO NOT USE - This API is under active development and is not ready for use.
|
|
584
|
-
* The API is subject to breaking changes without notice. Do not use in production or development.
|
|
585
|
-
*
|
|
586
581
|
* Called when the customer confirms payment using confirmation tokens.
|
|
587
582
|
* Your implementation should follow the guide to create (and optionally confirm) a PaymentIntent or SetupIntent on your server and call the `intentCreationCallback` with its client secret or an error if one occurred.
|
|
588
583
|
*
|
|
@@ -2,7 +2,7 @@ require 'json'
|
|
|
2
2
|
|
|
3
3
|
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
|
4
4
|
# Keep stripe_version in sync with https://github.com/stripe/stripe-identity-react-native/blob/main/stripe-identity-react-native.podspec
|
|
5
|
-
stripe_version = '~>
|
|
5
|
+
stripe_version = '~> 25.0.1'
|
|
6
6
|
|
|
7
7
|
fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
|
|
8
8
|
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
package com.reactnativestripesdk
|
|
2
|
-
|
|
3
|
-
import androidx.fragment.app.FragmentActivity
|
|
4
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
-
import com.facebook.react.bridge.ReadableMap
|
|
6
|
-
import com.facebook.react.bridge.WritableMap
|
|
7
|
-
import com.reactnativestripesdk.utils.ErrorType
|
|
8
|
-
import com.reactnativestripesdk.utils.GooglePayErrorType
|
|
9
|
-
import com.reactnativestripesdk.utils.StripeFragment
|
|
10
|
-
import com.reactnativestripesdk.utils.createError
|
|
11
|
-
import com.reactnativestripesdk.utils.createMissingActivityError
|
|
12
|
-
import com.reactnativestripesdk.utils.getBooleanOr
|
|
13
|
-
import com.reactnativestripesdk.utils.getIntOrNull
|
|
14
|
-
import com.stripe.android.googlepaylauncher.GooglePayEnvironment
|
|
15
|
-
import com.stripe.android.googlepaylauncher.GooglePayLauncher
|
|
16
|
-
|
|
17
|
-
class GooglePayLauncherFragment : StripeFragment() {
|
|
18
|
-
enum class Mode {
|
|
19
|
-
ForSetup,
|
|
20
|
-
ForPayment,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
private lateinit var launcher: GooglePayLauncher
|
|
24
|
-
private lateinit var clientSecret: String
|
|
25
|
-
private lateinit var mode: Mode
|
|
26
|
-
private lateinit var configuration: GooglePayLauncher.Config
|
|
27
|
-
private lateinit var currencyCode: String
|
|
28
|
-
private var amount: Int? = null
|
|
29
|
-
private var label: String? = null
|
|
30
|
-
private lateinit var callback: (result: GooglePayLauncher.Result?, error: WritableMap?) -> Unit
|
|
31
|
-
|
|
32
|
-
override fun prepare() {
|
|
33
|
-
launcher =
|
|
34
|
-
GooglePayLauncher(
|
|
35
|
-
fragment = this,
|
|
36
|
-
config = configuration,
|
|
37
|
-
readyCallback = ::onGooglePayReady,
|
|
38
|
-
resultCallback = ::onGooglePayResult,
|
|
39
|
-
)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
fun presentGooglePaySheet(
|
|
43
|
-
clientSecret: String,
|
|
44
|
-
mode: Mode,
|
|
45
|
-
googlePayParams: ReadableMap,
|
|
46
|
-
context: ReactApplicationContext,
|
|
47
|
-
callback: (GooglePayLauncher.Result?, error: WritableMap?) -> Unit,
|
|
48
|
-
) {
|
|
49
|
-
this.clientSecret = clientSecret
|
|
50
|
-
this.mode = mode
|
|
51
|
-
this.callback = callback
|
|
52
|
-
this.currencyCode = googlePayParams.getString("currencyCode") ?: "USD"
|
|
53
|
-
this.amount = getIntOrNull(googlePayParams, "amount")
|
|
54
|
-
this.label = googlePayParams.getString("label")
|
|
55
|
-
this.configuration =
|
|
56
|
-
GooglePayLauncher.Config(
|
|
57
|
-
environment =
|
|
58
|
-
if (googlePayParams.getBoolean("testEnv")) {
|
|
59
|
-
GooglePayEnvironment.Test
|
|
60
|
-
} else {
|
|
61
|
-
GooglePayEnvironment.Production
|
|
62
|
-
},
|
|
63
|
-
merchantCountryCode = googlePayParams.getString("merchantCountryCode").orEmpty(),
|
|
64
|
-
merchantName = googlePayParams.getString("merchantName").orEmpty(),
|
|
65
|
-
isEmailRequired = googlePayParams.getBooleanOr("isEmailRequired", false),
|
|
66
|
-
billingAddressConfig =
|
|
67
|
-
buildBillingAddressParameters(googlePayParams.getMap("billingAddressConfig")),
|
|
68
|
-
existingPaymentMethodRequired =
|
|
69
|
-
googlePayParams.getBooleanOr("existingPaymentMethodRequired", false),
|
|
70
|
-
allowCreditCards = googlePayParams.getBooleanOr("allowCreditCards", true),
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
(context.currentActivity as? FragmentActivity)?.let {
|
|
74
|
-
attemptToCleanupPreviousFragment(it)
|
|
75
|
-
commitFragmentAndStartFlow(it)
|
|
76
|
-
}
|
|
77
|
-
?: run {
|
|
78
|
-
callback(null, createMissingActivityError())
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private fun attemptToCleanupPreviousFragment(currentActivity: FragmentActivity) {
|
|
84
|
-
currentActivity.supportFragmentManager
|
|
85
|
-
.beginTransaction()
|
|
86
|
-
.remove(this)
|
|
87
|
-
.commitAllowingStateLoss()
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
private fun commitFragmentAndStartFlow(currentActivity: FragmentActivity) {
|
|
91
|
-
try {
|
|
92
|
-
currentActivity.supportFragmentManager
|
|
93
|
-
.beginTransaction()
|
|
94
|
-
.add(this, TAG)
|
|
95
|
-
.commit()
|
|
96
|
-
} catch (error: IllegalStateException) {
|
|
97
|
-
callback(null, createError(ErrorType.Failed.toString(), error.message))
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
private fun onGooglePayReady(isReady: Boolean) {
|
|
102
|
-
if (isReady) {
|
|
103
|
-
when (mode) {
|
|
104
|
-
Mode.ForSetup -> {
|
|
105
|
-
launcher.presentForSetupIntent(clientSecret, currencyCode, amount?.toLong(), label)
|
|
106
|
-
}
|
|
107
|
-
Mode.ForPayment -> {
|
|
108
|
-
launcher.presentForPaymentIntent(clientSecret, label)
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
} else {
|
|
112
|
-
callback(
|
|
113
|
-
null,
|
|
114
|
-
createError(
|
|
115
|
-
GooglePayErrorType.Failed.toString(),
|
|
116
|
-
"Google Pay is not available on this device. You can use isPlatformPaySupported to preemptively check for Google Pay support.",
|
|
117
|
-
),
|
|
118
|
-
)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
private fun onGooglePayResult(result: GooglePayLauncher.Result) {
|
|
123
|
-
callback(result, null)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
companion object {
|
|
127
|
-
const val TAG = "google_pay_launcher_fragment"
|
|
128
|
-
|
|
129
|
-
private fun buildBillingAddressParameters(params: ReadableMap?): GooglePayLauncher.BillingAddressConfig {
|
|
130
|
-
val isRequired = params?.getBooleanOr("isRequired", false)
|
|
131
|
-
val isPhoneNumberRequired = params?.getBooleanOr("isPhoneNumberRequired", false)
|
|
132
|
-
val format =
|
|
133
|
-
when (params?.getString("format").orEmpty()) {
|
|
134
|
-
"FULL" -> GooglePayLauncher.BillingAddressConfig.Format.Full
|
|
135
|
-
"MIN" -> GooglePayLauncher.BillingAddressConfig.Format.Min
|
|
136
|
-
else -> GooglePayLauncher.BillingAddressConfig.Format.Min
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return GooglePayLauncher.BillingAddressConfig(
|
|
140
|
-
isRequired = isRequired ?: false,
|
|
141
|
-
format = format,
|
|
142
|
-
isPhoneNumberRequired = isPhoneNumberRequired ?: false,
|
|
143
|
-
)
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
package/android/src/main/java/com/reactnativestripesdk/GooglePayPaymentMethodLauncherFragment.kt
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
package com.reactnativestripesdk
|
|
2
|
-
|
|
3
|
-
import android.os.Bundle
|
|
4
|
-
import android.view.LayoutInflater
|
|
5
|
-
import android.view.View
|
|
6
|
-
import android.view.ViewGroup
|
|
7
|
-
import android.widget.FrameLayout
|
|
8
|
-
import androidx.fragment.app.Fragment
|
|
9
|
-
import com.facebook.react.bridge.Promise
|
|
10
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
11
|
-
import com.reactnativestripesdk.utils.removeFragment
|
|
12
|
-
import com.stripe.android.googlepaylauncher.GooglePayEnvironment
|
|
13
|
-
import com.stripe.android.googlepaylauncher.GooglePayPaymentMethodLauncher
|
|
14
|
-
|
|
15
|
-
class GooglePayPaymentMethodLauncherFragment : Fragment() {
|
|
16
|
-
private lateinit var context: ReactApplicationContext
|
|
17
|
-
private var isTestEnv = false
|
|
18
|
-
private var paymentMethodRequired = false
|
|
19
|
-
private lateinit var promise: Promise
|
|
20
|
-
|
|
21
|
-
override fun onCreateView(
|
|
22
|
-
inflater: LayoutInflater,
|
|
23
|
-
container: ViewGroup?,
|
|
24
|
-
savedInstanceState: Bundle?,
|
|
25
|
-
): View = FrameLayout(requireActivity()).also { it.visibility = View.GONE }
|
|
26
|
-
|
|
27
|
-
override fun onViewCreated(
|
|
28
|
-
view: View,
|
|
29
|
-
savedInstanceState: Bundle?,
|
|
30
|
-
) {
|
|
31
|
-
super.onViewCreated(view, savedInstanceState)
|
|
32
|
-
GooglePayPaymentMethodLauncher(
|
|
33
|
-
this,
|
|
34
|
-
config =
|
|
35
|
-
GooglePayPaymentMethodLauncher.Config(
|
|
36
|
-
environment =
|
|
37
|
-
if (isTestEnv) GooglePayEnvironment.Test else GooglePayEnvironment.Production,
|
|
38
|
-
existingPaymentMethodRequired = paymentMethodRequired,
|
|
39
|
-
merchantCountryCode =
|
|
40
|
-
"", // Unnecessary since all we are checking for is Google Pay availability
|
|
41
|
-
merchantName = "", // Same as above
|
|
42
|
-
),
|
|
43
|
-
readyCallback = {
|
|
44
|
-
promise.resolve(it)
|
|
45
|
-
removeFragment(context)
|
|
46
|
-
},
|
|
47
|
-
resultCallback = {},
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
companion object {
|
|
52
|
-
const val TAG = "google_pay_support_fragment"
|
|
53
|
-
|
|
54
|
-
fun create(
|
|
55
|
-
context: ReactApplicationContext,
|
|
56
|
-
isTestEnv: Boolean,
|
|
57
|
-
paymentMethodRequired: Boolean,
|
|
58
|
-
promise: Promise,
|
|
59
|
-
): GooglePayPaymentMethodLauncherFragment {
|
|
60
|
-
val instance = GooglePayPaymentMethodLauncherFragment()
|
|
61
|
-
instance.context = context
|
|
62
|
-
instance.isTestEnv = isTestEnv
|
|
63
|
-
instance.paymentMethodRequired = paymentMethodRequired
|
|
64
|
-
instance.promise = promise
|
|
65
|
-
return instance
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherFragment.kt
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
package com.reactnativestripesdk.addresssheet
|
|
2
|
-
|
|
3
|
-
import androidx.fragment.app.FragmentActivity
|
|
4
|
-
import com.facebook.react.bridge.ReactContext
|
|
5
|
-
import com.facebook.react.bridge.WritableMap
|
|
6
|
-
import com.reactnativestripesdk.utils.ErrorType
|
|
7
|
-
import com.reactnativestripesdk.utils.StripeFragment
|
|
8
|
-
import com.reactnativestripesdk.utils.createError
|
|
9
|
-
import com.stripe.android.paymentsheet.PaymentSheet
|
|
10
|
-
import com.stripe.android.paymentsheet.addresselement.AddressDetails
|
|
11
|
-
import com.stripe.android.paymentsheet.addresselement.AddressLauncher
|
|
12
|
-
import com.stripe.android.paymentsheet.addresselement.AddressLauncherResult
|
|
13
|
-
|
|
14
|
-
class AddressLauncherFragment : StripeFragment() {
|
|
15
|
-
companion object {
|
|
16
|
-
internal var publishableKey: String? = null
|
|
17
|
-
internal const val TAG = "address_launcher_fragment"
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
private lateinit var addressLauncher: AddressLauncher
|
|
21
|
-
private var configuration = AddressLauncher.Configuration()
|
|
22
|
-
private var callback: ((error: WritableMap?, address: AddressDetails?) -> Unit)? = null
|
|
23
|
-
|
|
24
|
-
override fun prepare() {
|
|
25
|
-
publishableKey?.let { publishableKey ->
|
|
26
|
-
addressLauncher =
|
|
27
|
-
AddressLauncher(this, ::onAddressLauncherResult).also {
|
|
28
|
-
it.present(publishableKey = publishableKey, configuration = configuration)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
?: run {
|
|
32
|
-
callback?.invoke(
|
|
33
|
-
createError(
|
|
34
|
-
ErrorType.Failed.toString(),
|
|
35
|
-
"No publishable key set. Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component or the initStripe method.",
|
|
36
|
-
),
|
|
37
|
-
null,
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
private fun onAddressLauncherResult(result: AddressLauncherResult) {
|
|
43
|
-
when (result) {
|
|
44
|
-
is AddressLauncherResult.Canceled -> {
|
|
45
|
-
callback?.invoke(
|
|
46
|
-
createError(ErrorType.Canceled.toString(), "The flow has been canceled."),
|
|
47
|
-
null,
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
-
is AddressLauncherResult.Succeeded -> {
|
|
51
|
-
callback?.invoke(null, result.address)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
fun presentAddressSheet(
|
|
57
|
-
context: ReactContext,
|
|
58
|
-
appearance: PaymentSheet.Appearance,
|
|
59
|
-
defaultAddress: AddressDetails?,
|
|
60
|
-
allowedCountries: Set<String>,
|
|
61
|
-
buttonTitle: String?,
|
|
62
|
-
title: String?,
|
|
63
|
-
googlePlacesApiKey: String?,
|
|
64
|
-
autocompleteCountries: Set<String>,
|
|
65
|
-
additionalFields: AddressLauncher.AdditionalFieldsConfiguration?,
|
|
66
|
-
callback: ((error: WritableMap?, address: AddressDetails?) -> Unit),
|
|
67
|
-
) {
|
|
68
|
-
configuration =
|
|
69
|
-
AddressLauncher.Configuration(
|
|
70
|
-
appearance = appearance,
|
|
71
|
-
address = defaultAddress,
|
|
72
|
-
allowedCountries = allowedCountries,
|
|
73
|
-
buttonTitle = buttonTitle,
|
|
74
|
-
additionalFields = additionalFields,
|
|
75
|
-
title = title,
|
|
76
|
-
googlePlacesApiKey = googlePlacesApiKey,
|
|
77
|
-
autocompleteCountries = autocompleteCountries,
|
|
78
|
-
)
|
|
79
|
-
this.callback = callback
|
|
80
|
-
(context.currentActivity as? FragmentActivity)?.let {
|
|
81
|
-
attemptToCleanupPreviousFragment(it)
|
|
82
|
-
commitFragmentAndStartFlow(it)
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
private fun attemptToCleanupPreviousFragment(currentActivity: FragmentActivity) {
|
|
87
|
-
currentActivity.supportFragmentManager
|
|
88
|
-
.beginTransaction()
|
|
89
|
-
.remove(this)
|
|
90
|
-
.commitAllowingStateLoss()
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
private fun commitFragmentAndStartFlow(currentActivity: FragmentActivity) {
|
|
94
|
-
try {
|
|
95
|
-
currentActivity.supportFragmentManager
|
|
96
|
-
.beginTransaction()
|
|
97
|
-
.add(this, TAG)
|
|
98
|
-
.commit()
|
|
99
|
-
} catch (_: IllegalStateException) {
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
package com.reactnativestripesdk.utils
|
|
2
|
-
|
|
3
|
-
import android.os.Bundle
|
|
4
|
-
import android.view.LayoutInflater
|
|
5
|
-
import android.view.View
|
|
6
|
-
import android.view.ViewGroup
|
|
7
|
-
import android.widget.FrameLayout
|
|
8
|
-
import androidx.fragment.app.Fragment
|
|
9
|
-
import androidx.fragment.app.FragmentActivity
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Base fragment class to be used to launch Stripe UI that requires a fragment. Use the prepare
|
|
13
|
-
* method to configure it.
|
|
14
|
-
*
|
|
15
|
-
* Note that subclasses of this must implement a no arguments constructor since that is what is
|
|
16
|
-
* invoked when fragments are restored after activity re-creation.
|
|
17
|
-
*/
|
|
18
|
-
abstract class StripeFragment : Fragment() {
|
|
19
|
-
private var isRestored = false
|
|
20
|
-
|
|
21
|
-
override fun onCreate(savedInstanceState: Bundle?) {
|
|
22
|
-
super.onCreate(savedInstanceState)
|
|
23
|
-
|
|
24
|
-
isRestored = savedInstanceState != null
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
override fun onCreateView(
|
|
28
|
-
inflater: LayoutInflater,
|
|
29
|
-
container: ViewGroup?,
|
|
30
|
-
savedInstanceState: Bundle?,
|
|
31
|
-
): View = FrameLayout(requireActivity()).also { it.visibility = View.GONE }
|
|
32
|
-
|
|
33
|
-
override fun onViewCreated(
|
|
34
|
-
view: View,
|
|
35
|
-
savedInstanceState: Bundle?,
|
|
36
|
-
) {
|
|
37
|
-
super.onViewCreated(view, savedInstanceState)
|
|
38
|
-
|
|
39
|
-
// Prevent fragment from being re-created.
|
|
40
|
-
if (isRestored) {
|
|
41
|
-
(context as? FragmentActivity)
|
|
42
|
-
?.supportFragmentManager
|
|
43
|
-
?.beginTransaction()
|
|
44
|
-
?.remove(this)
|
|
45
|
-
?.commitAllowingStateLoss()
|
|
46
|
-
} else {
|
|
47
|
-
prepare()
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
abstract fun prepare()
|
|
52
|
-
}
|