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:
parent
28dc61bcf9
commit
7d86da8e40
|
@ -205,15 +205,13 @@ extension CardDetailsEditView: STPFormViewInternalDelegate {
|
|||
|
||||
/// :nodoc:
|
||||
extension CardDetailsEditView: PaymentMethodElement {
|
||||
var shouldSavePaymentMethod: Bool {
|
||||
return saveThisCardCheckboxView.isEnabled && saveThisCardCheckboxView.isSelected && !saveThisCardCheckboxView.isHidden
|
||||
}
|
||||
|
||||
func updateParams(params: IntentConfirmParams) -> IntentConfirmParams? {
|
||||
if let paymentMethodParams = paymentMethodParams {
|
||||
params.paymentMethodParams.card = paymentMethodParams.card
|
||||
params.paymentMethodParams.billingDetails = paymentMethodParams.billingDetails
|
||||
params.savePaymentMethod = shouldSavePaymentMethod
|
||||
if !saveThisCardCheckboxView.isHidden {
|
||||
params.shouldSavePaymentMethod = saveThisCardCheckboxView.isEnabled && saveThisCardCheckboxView.isSelected
|
||||
}
|
||||
return params
|
||||
} else {
|
||||
return nil
|
||||
|
|
|
@ -64,8 +64,9 @@ class IntentConfirmParams {
|
|||
let paymentMethodParams: STPPaymentMethodParams
|
||||
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
|
||||
var savePaymentMethod: Bool? = nil
|
||||
var shouldSavePaymentMethod: Bool? = nil
|
||||
/// - Note: PaymentIntent-only
|
||||
var paymentMethodOptions: STPConfirmPaymentMethodOptions?
|
||||
|
||||
|
@ -79,11 +80,9 @@ class IntentConfirmParams {
|
|||
params.paymentMethodParams = paymentMethodParams
|
||||
params.paymentMethodOptions = paymentMethodOptions
|
||||
|
||||
if let savePaymentMethod = savePaymentMethod {
|
||||
// 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" : ""
|
||||
} else {
|
||||
params.setupFutureUsage = nil
|
||||
if let shouldSavePaymentMethod = shouldSavePaymentMethod {
|
||||
// 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"] = shouldSavePaymentMethod ? "off_session" : ""
|
||||
}
|
||||
return params
|
||||
}
|
||||
|
@ -100,7 +99,7 @@ class IntentConfirmParams {
|
|||
|
||||
// Dashboard only supports a specific payment flow today
|
||||
assert(paymentMethodOptions == nil)
|
||||
assert(savePaymentMethod == false)
|
||||
assert(shouldSavePaymentMethod == false)
|
||||
params.paymentMethodOptions = STPConfirmPaymentMethodOptions()
|
||||
let cardOptions = STPConfirmCardOptions()
|
||||
cardOptions.additionalAPIParameters["moto"] = true
|
||||
|
|
|
@ -129,7 +129,9 @@ extension PaymentSheetFormFactory {
|
|||
func makeSaveCheckbox(didToggle: @escaping ((Bool) -> ())) -> PaymentMethodElementWrapper<SaveCheckboxElement> {
|
||||
let element = SaveCheckboxElement(didToggle: didToggle)
|
||||
return PaymentMethodElementWrapper(element) { checkbox, params in
|
||||
params.savePaymentMethod = checkbox.checkboxButton.isSelected
|
||||
if !checkbox.checkboxButton.isHidden {
|
||||
params.shouldSavePaymentMethod = checkbox.checkboxButton.isSelected
|
||||
}
|
||||
return params
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue