Fix card always setting setup_future_usage instead of only setting if… (#420)

* Fix card always setting setup_future_usage instead of only setting if checkbox is showing

* PR feedback
This commit is contained in:
Yuki 2021-10-18 08:26:15 -07:00 committed by GitHub
parent 28dc61bcf9
commit 7d86da8e40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 13 deletions

View File

@ -205,15 +205,13 @@ extension CardDetailsEditView: STPFormViewInternalDelegate {
/// :nodoc: /// :nodoc:
extension CardDetailsEditView: PaymentMethodElement { extension CardDetailsEditView: PaymentMethodElement {
var shouldSavePaymentMethod: Bool {
return saveThisCardCheckboxView.isEnabled && saveThisCardCheckboxView.isSelected && !saveThisCardCheckboxView.isHidden
}
func updateParams(params: IntentConfirmParams) -> IntentConfirmParams? { func updateParams(params: IntentConfirmParams) -> IntentConfirmParams? {
if let paymentMethodParams = paymentMethodParams { if let paymentMethodParams = paymentMethodParams {
params.paymentMethodParams.card = paymentMethodParams.card params.paymentMethodParams.card = paymentMethodParams.card
params.paymentMethodParams.billingDetails = paymentMethodParams.billingDetails params.paymentMethodParams.billingDetails = paymentMethodParams.billingDetails
params.savePaymentMethod = shouldSavePaymentMethod if !saveThisCardCheckboxView.isHidden {
params.shouldSavePaymentMethod = saveThisCardCheckboxView.isEnabled && saveThisCardCheckboxView.isSelected
}
return params return params
} else { } else {
return nil return nil

View File

@ -64,8 +64,9 @@ class IntentConfirmParams {
let paymentMethodParams: STPPaymentMethodParams let paymentMethodParams: STPPaymentMethodParams
let paymentMethodType: STPPaymentMethodType let paymentMethodType: STPPaymentMethodType
/// If we're displaying a "Save for future payments?" toggle, this should be set to the value of the toggle. Otherwise, leave it nil.
/// - Note: PaymentIntent-only /// - Note: PaymentIntent-only
var savePaymentMethod: Bool? = nil var shouldSavePaymentMethod: Bool? = nil
/// - Note: PaymentIntent-only /// - Note: PaymentIntent-only
var paymentMethodOptions: STPConfirmPaymentMethodOptions? var paymentMethodOptions: STPConfirmPaymentMethodOptions?
@ -79,11 +80,9 @@ class IntentConfirmParams {
params.paymentMethodParams = paymentMethodParams params.paymentMethodParams = paymentMethodParams
params.paymentMethodOptions = paymentMethodOptions params.paymentMethodOptions = paymentMethodOptions
if let savePaymentMethod = savePaymentMethod { if let shouldSavePaymentMethod = shouldSavePaymentMethod {
// Use additionalAPIParameters to send "" as a value, to avoid changing the public string value of STPPaymentIntentSetupFutureUsage.none // Instead of using `params.setupFutureUsage`, we use additionalAPIParameters to send "" as a value to avoid changing the public string value of STPPaymentIntentSetupFutureUsage.none
params.additionalAPIParameters["setup_future_usage"] = savePaymentMethod ? "off_session" : "" params.additionalAPIParameters["setup_future_usage"] = shouldSavePaymentMethod ? "off_session" : ""
} else {
params.setupFutureUsage = nil
} }
return params return params
} }
@ -100,7 +99,7 @@ class IntentConfirmParams {
// Dashboard only supports a specific payment flow today // Dashboard only supports a specific payment flow today
assert(paymentMethodOptions == nil) assert(paymentMethodOptions == nil)
assert(savePaymentMethod == false) assert(shouldSavePaymentMethod == false)
params.paymentMethodOptions = STPConfirmPaymentMethodOptions() params.paymentMethodOptions = STPConfirmPaymentMethodOptions()
let cardOptions = STPConfirmCardOptions() let cardOptions = STPConfirmCardOptions()
cardOptions.additionalAPIParameters["moto"] = true cardOptions.additionalAPIParameters["moto"] = true

View File

@ -129,7 +129,9 @@ extension PaymentSheetFormFactory {
func makeSaveCheckbox(didToggle: @escaping ((Bool) -> ())) -> PaymentMethodElementWrapper<SaveCheckboxElement> { func makeSaveCheckbox(didToggle: @escaping ((Bool) -> ())) -> PaymentMethodElementWrapper<SaveCheckboxElement> {
let element = SaveCheckboxElement(didToggle: didToggle) let element = SaveCheckboxElement(didToggle: didToggle)
return PaymentMethodElementWrapper(element) { checkbox, params in return PaymentMethodElementWrapper(element) { checkbox, params in
params.savePaymentMethod = checkbox.checkboxButton.isSelected if !checkbox.checkboxButton.isHidden {
params.shouldSavePaymentMethod = checkbox.checkboxButton.isSelected
}
return params return params
} }
} }