From 1403094744c9996fe7562e32034cb184cc69d396 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 27 Nov 2024 13:28:18 -0800 Subject: [PATCH 01/54] reading default_payment_method from back end? --- .../CustomerSheetTestPlayground.swift | 3 ++ ...ustomerSheetTestPlaygroundController.swift | 3 +- .../CustomerSheetTestPlaygroundSettings.swift | 10 ++++++- .../PaymentSheetTestPlayground.swift | 3 ++ .../PaymentSheetTestPlaygroundSettings.swift | 10 ++++++- .../PlaygroundController.swift | 4 ++- .../ElementsCustomer.swift | 4 ++- .../STPElementsSession.swift | 1 + .../CustomerPaymentOption.swift | 2 +- ...ymentMethodsCollectionViewController.swift | 4 ++- ...merSavedPaymentMethodsViewController.swift | 6 ++-- .../CustomerSheet/CustomerSheet.swift | 16 ++++++++++- .../CustomerSheetConfiguration.swift | 5 ++++ .../EmbeddedPaymentElement+Internal.swift | 10 +++++++ .../EmbeddedPaymentElementConfiguration.swift | 5 ++++ .../PaymentElementConfiguration.swift | 1 + .../PaymentSheetConfiguration.swift | 5 ++++ .../PaymentSheet/PaymentSheetLoader.swift | 20 +++++++++++-- .../SavedPaymentMethodCollectionView.swift | 4 ++- .../SavedPaymentOptionsViewController.swift | 28 +++++++++++++++---- ...entSheetFlowControllerViewController.swift | 4 ++- .../PaymentSheetVerticalViewController.swift | 9 ++++++ .../PaymentSheetViewController.swift | 4 ++- 23 files changed, 140 insertions(+), 21 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift index 22ea9084dbd..b4e79b4bb17 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift @@ -52,6 +52,9 @@ struct CustomerSheetTestPlayground: View { } SettingPickerView(setting: $playgroundController.settings.paymentMethodRemove) SettingPickerView(setting: $playgroundController.settings.paymentMethodAllowRedisplayFilters) + if playgroundController.settings.alternateUpdatePaymentMethodNavigation == .on { + SettingPickerView(setting: $playgroundController.settings.allowsSetAsDefaultPM) + } } } } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift index 4a4f638f5ce..ddd3b292d7f 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift @@ -4,7 +4,7 @@ // import Combine -@_spi(STP) @_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) import StripePaymentSheet +@_spi(STP) @_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) @_spi(AllowsSetAsDefaultPM) import StripePaymentSheet import SwiftUI class CustomerSheetTestPlaygroundController: ObservableObject { @@ -148,6 +148,7 @@ class CustomerSheetTestPlaygroundController: ObservableObject { configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on + configuration.allowsSetAsDefaultPM = settings.allowsSetAsDefaultPM == .on return configuration } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift index 7a06f7174b4..2954c0b455a 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift @@ -148,6 +148,12 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { case off } + enum AllowsSetAsDefaultPM: String, PickerEnum { + static let enumName: String = "allowsSetAsDefaultPM" + case on + case off + } + var customerMode: CustomerMode var customerId: String? var customerKeyType: CustomerKeyType @@ -169,6 +175,7 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { var paymentMethodAllowRedisplayFilters: PaymentMethodAllowRedisplayFilters var cardBrandAcceptance: CardBrandAcceptance var alternateUpdatePaymentMethodNavigation: AlternateUpdatePaymentMethodNavigation + var allowsSetAsDefaultPM: AllowsSetAsDefaultPM static func defaultValues() -> CustomerSheetTestPlaygroundSettings { return CustomerSheetTestPlaygroundSettings(customerMode: .new, @@ -190,7 +197,8 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { paymentMethodRemove: .enabled, paymentMethodAllowRedisplayFilters: .always, cardBrandAcceptance: .all, - alternateUpdatePaymentMethodNavigation: .off) + alternateUpdatePaymentMethodNavigation: .off, + allowsSetAsDefaultPM: .off) } var base64Data: String { diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift index aa3f3c3982c..a9c12497a7e 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift @@ -119,6 +119,9 @@ struct PaymentSheetTestPlayground: View { if playgroundController.settings.paymentMethodRedisplay == .enabled { SettingPickerView(setting: $playgroundController.settings.paymentMethodAllowRedisplayFilters) } + if playgroundController.settings.alternateUpdatePaymentMethodNavigation == .on { + SettingPickerView(setting: $playgroundController.settings.allowsSetAsDefaultPM) + } } } } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift index 006818d00e3..32395d7e8db 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift @@ -444,6 +444,12 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { case off } + enum AllowsSetAsDefaultPM: String, PickerEnum { + static let enumName: String = "allowsSetAsDefaultPM" + case on + case off + } + var uiStyle: UIStyle var layout: Layout var mode: Mode @@ -490,6 +496,7 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { var embeddedViewDisplaysMandateText: DisplaysMandateTextEnabled var cardBrandAcceptance: CardBrandAcceptance var alternateUpdatePaymentMethodNavigation: AlternateUpdatePaymentMethodNavigation + var allowsSetAsDefaultPM: AllowsSetAsDefaultPM static func defaultValues() -> PaymentSheetTestPlaygroundSettings { return PaymentSheetTestPlaygroundSettings( @@ -535,7 +542,8 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { formSheetAction: .confirm, embeddedViewDisplaysMandateText: .on, cardBrandAcceptance: .all, - alternateUpdatePaymentMethodNavigation: .off) + alternateUpdatePaymentMethodNavigation: .off, + allowsSetAsDefaultPM: .off) } static let nsUserDefaultsKey = "PaymentSheetTestPlaygroundSettings" diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift b/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift index f192f61b022..72e7e56e4fb 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift @@ -14,7 +14,7 @@ import Contacts import PassKit @_spi(STP) import StripeCore @_spi(STP) import StripePayments -@_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(PaymentSheetSkipConfirmation) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) import StripePaymentSheet +@_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(PaymentSheetSkipConfirmation) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) @_spi(AllowsSetAsDefaultPM) import StripePaymentSheet import SwiftUI import UIKit @@ -185,6 +185,7 @@ class PlaygroundController: ObservableObject { configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on + configuration.allowsSetAsDefaultPM = settings.allowsSetAsDefaultPM == .on return configuration } @@ -273,6 +274,7 @@ class PlaygroundController: ObservableObject { configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on + configuration.allowsSetAsDefaultPM = settings.allowsSetAsDefaultPM == .on return configuration } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index 5ff41532bed..eb15b24ea95 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -36,7 +36,9 @@ struct ElementsCustomer: Equatable, Hashable { } // Optional - let defaultPaymentMethod = response["default_payment_method"] as? String +// let defaultPaymentMethod = response["default_payment_method"] as? String + let defaultPaymentMethod: String? = "pm_1QPqgILu5o3P18ZpQNyB8VrP" + print("getting backend default payment method \(defaultPaymentMethod ?? "nil")") return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift index 8d98ef38aaa..ad3a3c0ba86 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift @@ -224,6 +224,7 @@ extension STPElementsSession { var isLinkCardBrand: Bool { linkSettings?.linkMode == .linkCardBrand } + } extension STPElementsSession { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift index 63905b0c4be..5dea071e1c3 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift @@ -60,7 +60,7 @@ public enum CustomerPaymentOption: Equatable { guard let value = UserDefaults.standard.customerToLastSelectedPaymentMethod?[key] else { return nil } - + return CustomerPaymentOption(value: value) } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index a1554fbcac6..e5515627b86 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -83,6 +83,7 @@ class CustomerSavedPaymentMethodsCollectionViewController: UIViewController { let paymentMethodRemove: Bool let isTestMode: Bool let alternateUpdatePaymentMethodNavigation: Bool + let allowsSetAsDefaultPM: Bool } /// Whether or not you can edit save payment methods by removing or updating them. @@ -388,7 +389,8 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift index 6a070a3d844..c8f839a59f0 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift @@ -104,7 +104,8 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { allowsRemovalOfLastSavedPaymentMethod: configuration.allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM ), appearance: configuration.appearance, cbcEligible: cbcEligible, @@ -656,7 +657,8 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { allowsRemovalOfLastSavedPaymentMethod: configuration.allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM ), appearance: configuration.appearance, cbcEligible: cbcEligible, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift index 4ece2ba2fc2..2ad965674b0 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift @@ -310,7 +310,21 @@ extension CustomerSheet { switch customerSheetDataSource.dataSource { case .customerSession(let customerSessionAdapter): let (elementsSession, customerSessionClientSecret) = try await customerSessionAdapter.elementsSessionWithCustomerSessionClientSecret() - let selectedPaymentOption = CustomerPaymentOption.defaultPaymentMethod(for: customerSessionClientSecret.customerId) + + var selectedPaymentOption: CustomerPaymentOption? + + // read from back end + if configuration.allowsSetAsDefaultPM, + let customer = elementsSession.customer { + let defaultPaymentMethod = customer.paymentMethods.filter { + $0.stripeId == customer.defaultPaymentMethod + }.first + guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } + selectedPaymentOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + selectedPaymentOption = CustomerPaymentOption.defaultPaymentMethod(for: customerSessionClientSecret.customerId) + } switch selectedPaymentOption { case .applePay: diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift index 03508b9be46..ba1b7c15457 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift @@ -86,6 +86,11 @@ extension CustomerSheet { /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false + /// This is an experimental feature that may be removed at any time. + /// If true, users can set a payment method as default. + /// If false (default), users cannot set default payment methods. + @_spi(AllowsSetAsDefaultPM) public var allowsSetAsDefaultPM = false + public init () { } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index adac81d1293..ab1244e9e3f 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -37,6 +37,16 @@ extension EmbeddedPaymentElement { isFlatCheckmarkStyle: configuration.appearance.embeddedPaymentElement.row.style == .flatWithCheckmark ) let initialSelection: EmbeddedPaymentMethodsView.Selection? = { + // read from back end + if configuration.allowsSetAsDefaultPM, + let customer = loadResult.elementsSession.customer { + let defaultPaymentMethod = customer.paymentMethods.filter { + $0.stripeId == customer.defaultPaymentMethod + }.first + guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } + return .saved(paymentMethod: defaultPaymentMethod) + } + // Select the previous payment option switch previousPaymentOption { case .applePay: diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift index b224a784d1d..e43d2da2b98 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift @@ -136,6 +136,11 @@ extension EmbeddedPaymentElement { /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false + /// This is an experimental feature that may be removed at any time. + /// If true, users can set a payment method as default. + /// If false (default), users cannot set default payment methods. + @_spi(AllowsSetAsDefaultPM) public var allowsSetAsDefaultPM = false + /// The view can display payment methods like “Card” that, when tapped, open a form sheet where customers enter their payment method details. The sheet has a button at the bottom. `FormSheetAction` enumerates the actions the button can perform. public enum FormSheetAction { /// The button says “Pay” or “Setup”. When tapped, we confirm the payment or setup in the form sheet. diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift index 09334d57a50..0842e182394 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift @@ -38,6 +38,7 @@ protocol PaymentElementConfiguration: PaymentMethodRequirementProvider { var analyticPayload: [String: Any] { get } var disableWalletPaymentMethodFiltering: Bool { get set } var alternateUpdatePaymentMethodNavigation: Bool { get set } + var allowsSetAsDefaultPM: Bool { get set } var linkPaymentMethodsOnly: Bool { get set } var forceNativeLinkEnabled: Bool { get set } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift index f85122850fb..ac655d97d92 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift @@ -215,6 +215,11 @@ extension PaymentSheet { /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false + + /// This is an experimental feature that may be removed at any time. + /// If true, users can set a payment method as default. + /// If false (default), users cannot set default payment methods. + @_spi(AllowsSetAsDefaultPM) public var allowsSetAsDefaultPM = false } /// Defines the layout orientations available for displaying payment methods in PaymentSheet. diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift index b1802dca622..0724bbdc7f3 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift @@ -116,7 +116,9 @@ final class PaymentSheetLoader { savedPaymentMethods: filteredSavedPaymentMethods, customerID: configuration.customer?.id, showApplePay: integrationShape.canDefaultToLinkOrApplePay ? isApplePayEnabled : false, - showLink: integrationShape.canDefaultToLinkOrApplePay ? isLinkEnabled : false + showLink: integrationShape.canDefaultToLinkOrApplePay ? isLinkEnabled : false, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, + elementsSession: elementsSession ) let paymentMethodTypes = PaymentSheet.PaymentMethodType.filteredPaymentMethodTypes(from: intent, elementsSession: elementsSession, configuration: configuration, logAvailability: true) @@ -316,9 +318,21 @@ final class PaymentSheetLoader { // Move default PM to front if let customerID = configuration.customer?.id { - let defaultPaymentMethod = CustomerPaymentOption.defaultPaymentMethod(for: customerID) + var defaultPaymentMethodOption: CustomerPaymentOption? + // read from back end + if configuration.allowsSetAsDefaultPM, + let customer = elementsSession.customer { + let defaultPaymentMethod = customer.paymentMethods.filter { + $0.stripeId == customer.defaultPaymentMethod + }.first + guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } + defaultPaymentMethodOption = .stripeId(defaultPaymentMethod.stripeId) + } + else { + defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) + } if let defaultPMIndex = savedPaymentMethods.firstIndex(where: { - $0.stripeId == defaultPaymentMethod?.value + $0.stripeId == defaultPaymentMethodOption?.value }) { let defaultPM = savedPaymentMethods.remove(at: defaultPMIndex) savedPaymentMethods.insert(defaultPM, at: 0) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 84039502938..927955e3e4d 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -113,6 +113,7 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true var alternateUpdatePaymentMethodNavigation: Bool = false + var allowsSetAsDefaultPM: Bool = false /// Indicates whether the cell should be editable or just removable. /// If the card is a co-branded card and the merchant is eligible for card brand choice, then @@ -218,7 +219,7 @@ extension SavedPaymentMethodCollectionView { // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool, allowsSetAsDefaultPM: Bool) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false @@ -226,6 +227,7 @@ extension SavedPaymentMethodCollectionView { self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation + self.allowsSetAsDefaultPM = allowsSetAsDefaultPM update() } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 25b7fba3a56..d0caf28e85a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -104,6 +104,7 @@ class SavedPaymentOptionsViewController: UIViewController { let allowsRemovalOfLastSavedPaymentMethod: Bool let allowsRemovalOfPaymentMethods: Bool let alternateUpdatePaymentMethodNavigation: Bool + let allowsSetAsDefaultPM: Bool } // MARK: - Internal Properties @@ -217,6 +218,7 @@ class SavedPaymentOptionsViewController: UIViewController { } weak var delegate: SavedPaymentOptionsViewControllerDelegate? var appearance = PaymentSheet.Appearance.default + var elementsSession: STPElementsSession // MARK: - Private Properties private var selectedViewModelIndex: Int? @@ -312,6 +314,7 @@ class SavedPaymentOptionsViewController: UIViewController { paymentSheetConfiguration: PaymentSheet.Configuration, intent: Intent, appearance: PaymentSheet.Appearance, + elementsSession: STPElementsSession, cbcEligible: Bool = false, analyticsHelper: PaymentSheetAnalyticsHelper, delegate: SavedPaymentOptionsViewControllerDelegate? = nil @@ -321,6 +324,7 @@ class SavedPaymentOptionsViewController: UIViewController { self.paymentSheetConfiguration = paymentSheetConfiguration self.intent = intent self.appearance = appearance + self.elementsSession = elementsSession self.cbcEligible = cbcEligible self.delegate = delegate self.analyticsHelper = analyticsHelper @@ -364,7 +368,9 @@ class SavedPaymentOptionsViewController: UIViewController { savedPaymentMethods: savedPaymentMethods, customerID: configuration.customerID, showApplePay: configuration.showApplePay, - showLink: configuration.showLink + showLink: configuration.showLink, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, + elementsSession: elementsSession ) collectionView.reloadData() @@ -438,9 +444,21 @@ class SavedPaymentOptionsViewController: UIViewController { /// Creates the list of viewmodels to display in the "saved payment methods" carousel e.g. `["+ Add", "Apple Pay", "Link", "Visa 4242"]` /// - Returns defaultSelectedIndex: The index of the view model that is the default e.g. in the above list, if "Visa 4242" is the default, the index is 3. - static func makeViewModels(savedPaymentMethods: [STPPaymentMethod], customerID: String?, showApplePay: Bool, showLink: Bool) -> (defaultSelectedIndex: Int, viewModels: [Selection]) { + static func makeViewModels(savedPaymentMethods: [STPPaymentMethod], customerID: String?, showApplePay: Bool, showLink: Bool, allowsSetAsDefaultPM: Bool, elementsSession: STPElementsSession) -> (defaultSelectedIndex: Int, viewModels: [Selection]) { // Get the default - let defaultPaymentMethod = CustomerPaymentOption.defaultPaymentMethod(for: customerID) + var defaultPaymentMethodOption: CustomerPaymentOption? + // read from back end + if allowsSetAsDefaultPM, + let customer = elementsSession.customer { + let defaultPaymentMethod = customer.paymentMethods.filter { + $0.stripeId == customer.defaultPaymentMethod + }.first + guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } + defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) + } // Transform saved PaymentMethods into view models let savedPMViewModels = savedPaymentMethods.compactMap { paymentMethod in @@ -461,7 +479,7 @@ class SavedPaymentOptionsViewController: UIViewController { let firstPaymentMethodIsLink = !showApplePay && showLink let defaultIndex = firstPaymentMethodIsLink ? 2 : 1 - let defaultSelectedIndex = viewModels.firstIndex(where: { $0 == defaultPaymentMethod }) ?? defaultIndex + let defaultSelectedIndex = viewModels.firstIndex(where: { $0 == defaultPaymentMethodOption }) ?? defaultIndex return (defaultSelectedIndex, viewModels) } } @@ -493,7 +511,7 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation, allowsSetAsDefaultPM: self.configuration.allowsSetAsDefaultPM) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift index fb93ae948c6..b9a3360f61a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift @@ -207,11 +207,13 @@ class PaymentSheetFlowControllerViewController: UIViewController, FlowController isTestMode: configuration.apiClient.isTestmode, allowsRemovalOfLastSavedPaymentMethod: configuration.allowsRemovalOfLastSavedPaymentMethod, allowsRemovalOfPaymentMethods: elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet(), - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM ), paymentSheetConfiguration: configuration, intent: intent, appearance: configuration.appearance, + elementsSession: elementsSession, cbcEligible: elementsSession.isCardBrandChoiceEligible, analyticsHelper: analyticsHelper ) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index f3888aba9cd..e7b5ed4249d 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -288,6 +288,15 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo if let selection { return selection } + // read from back end + if configuration.allowsSetAsDefaultPM, + let customer = elementsSession.customer { + let defaultPaymentMethod = customer.paymentMethods.filter { + $0.stripeId == customer.defaultPaymentMethod + }.first + guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } + return .saved(paymentMethod: defaultPaymentMethod) + } switch previousPaymentOption { case .applePay: diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift index 55265f254e9..63edd3181a4 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift @@ -175,11 +175,13 @@ class PaymentSheetViewController: UIViewController, PaymentSheetViewControllerPr isTestMode: configuration.apiClient.isTestmode, allowsRemovalOfLastSavedPaymentMethod: configuration.allowsRemovalOfLastSavedPaymentMethod, allowsRemovalOfPaymentMethods: loadResult.elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet(), - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM ), paymentSheetConfiguration: configuration, intent: intent, appearance: configuration.appearance, + elementsSession: elementsSession, cbcEligible: elementsSession.isCardBrandChoiceEligible, analyticsHelper: analyticsHelper ) From 71c5516436ac0742c7dc98b5292bac7dd91ca30e Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 27 Nov 2024 13:34:21 -0800 Subject: [PATCH 02/54] revert accidental space changes; --- .../API Bindings/v1-elements-sessions/STPElementsSession.swift | 1 - .../PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift index ad3a3c0ba86..8d98ef38aaa 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/STPElementsSession.swift @@ -224,7 +224,6 @@ extension STPElementsSession { var isLinkCardBrand: Bool { linkSettings?.linkMode == .linkCardBrand } - } extension STPElementsSession { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift index 5dea071e1c3..63905b0c4be 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerAdapter/CustomerPaymentOption.swift @@ -60,7 +60,7 @@ public enum CustomerPaymentOption: Equatable { guard let value = UserDefaults.standard.customerToLastSelectedPaymentMethod?[key] else { return nil } - + return CustomerPaymentOption(value: value) } } From e3ecc2c9f89dfd1205364b311cd582b901a7a002 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 27 Nov 2024 14:13:47 -0800 Subject: [PATCH 03/54] customersheet default from back end --- .../v1-elements-sessions/ElementsCustomer.swift | 6 +++--- .../CustomerSessionAdapter/CustomerSessionAdapter.swift | 8 +++++++- .../Source/PaymentSheet/CustomerSheet/CustomerSheet.swift | 8 ++++++-- .../CustomerSheet/CustomerSheetDataSource.swift | 2 +- .../Embedded/EmbeddedPaymentElement+Internal.swift | 6 ++++-- .../Source/PaymentSheet/PaymentSheetLoader.swift | 8 ++++++-- .../PaymentSheetVerticalViewController.swift | 5 +++-- 7 files changed, 30 insertions(+), 13 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index eb15b24ea95..a973e4a78a2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -36,9 +36,9 @@ struct ElementsCustomer: Equatable, Hashable { } // Optional -// let defaultPaymentMethod = response["default_payment_method"] as? String - let defaultPaymentMethod: String? = "pm_1QPqgILu5o3P18ZpQNyB8VrP" - print("getting backend default payment method \(defaultPaymentMethod ?? "nil")") + // to test default payment methods reading from back end, hard-code a valid default payment method + // later, when API calls to get and update default payment method are available, that will no longer be needed + let defaultPaymentMethod = response["default_payment_method"] as? String return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift index 1eb5b5efc03..19951aa58eb 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift @@ -107,7 +107,13 @@ extension CustomerSessionAdapter { return stripePaymentMethodId } - func fetchSelectedPaymentOption(for customerId: String) -> CustomerPaymentOption? { + func fetchSelectedPaymentOption(for customerId: String, elementsSession: STPElementsSession? = nil) -> CustomerPaymentOption? { + if configuration.allowsSetAsDefaultPM, + let elementsSession = elementsSession, + let customer = elementsSession.customer, + let defaultPaymentMethod = customer.defaultPaymentMethod { + return CustomerPaymentOption.stripeId(defaultPaymentMethod) + } return CustomerPaymentOption.defaultPaymentMethod(for: customerId) } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift index 2ad965674b0..e250c16d8c5 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift @@ -319,8 +319,12 @@ extension CustomerSheet { let defaultPaymentMethod = customer.paymentMethods.filter { $0.stripeId == customer.defaultPaymentMethod }.first - guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } - selectedPaymentOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + if let defaultPaymentMethod = defaultPaymentMethod { + selectedPaymentOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + selectedPaymentOption = CustomerPaymentOption.defaultPaymentMethod(for: customerSessionClientSecret.customerId) + } } else { selectedPaymentOption = CustomerPaymentOption.defaultPaymentMethod(for: customerSessionClientSecret.customerId) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift index 2645ac50316..6020bb1bebc 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift @@ -41,8 +41,8 @@ class CustomerSheetDataSource { // Ensure local specs are loaded prior to the ones from elementSession await loadFormSpecs() let customerId = try await customerSessionClientSecret.customerId - let paymentOption = customerSessionAdapter.fetchSelectedPaymentOption(for: customerId) let elementSession = try await elementsSessionResult + let paymentOption = customerSessionAdapter.fetchSelectedPaymentOption(for: customerId, elementsSession: elementSession) // Override with specs from elementSession _ = FormSpecProvider.shared.loadFrom(elementSession.paymentMethodSpecs as Any) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index ab1244e9e3f..de87f802e3f 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -43,8 +43,10 @@ extension EmbeddedPaymentElement { let defaultPaymentMethod = customer.paymentMethods.filter { $0.stripeId == customer.defaultPaymentMethod }.first - guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } - return .saved(paymentMethod: defaultPaymentMethod) + if let defaultPaymentMethod = defaultPaymentMethod { + return .saved(paymentMethod: defaultPaymentMethod) + } + } // Select the previous payment option diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift index 0724bbdc7f3..75ee52b6055 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift @@ -325,8 +325,12 @@ final class PaymentSheetLoader { let defaultPaymentMethod = customer.paymentMethods.filter { $0.stripeId == customer.defaultPaymentMethod }.first - guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } - defaultPaymentMethodOption = .stripeId(defaultPaymentMethod.stripeId) + if let defaultPaymentMethod = defaultPaymentMethod { + defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) + } } else { defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index e7b5ed4249d..1707dcf443b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -294,8 +294,9 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo let defaultPaymentMethod = customer.paymentMethods.filter { $0.stripeId == customer.defaultPaymentMethod }.first - guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } - return .saved(paymentMethod: defaultPaymentMethod) + if let defaultPaymentMethod = defaultPaymentMethod { + return .saved(paymentMethod: defaultPaymentMethod) + } } switch previousPaymentOption { From fb86faa0601dac66eca291f92b082b599e9ca187 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 2 Dec 2024 07:45:02 -0800 Subject: [PATCH 04/54] removed unused value --- ...stomerSavedPaymentMethodsCollectionViewController.swift | 3 +-- .../SavedPaymentMethodCollectionView.swift | 4 +--- .../SavedPaymentOptionsViewController.swift | 7 ++++--- .../SavedPaymentOptionsViewControllerSnapshotTests.swift | 3 ++- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index e5515627b86..8e26c6f108b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -389,8 +389,7 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, - allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM) + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 927955e3e4d..84039502938 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -113,7 +113,6 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true var alternateUpdatePaymentMethodNavigation: Bool = false - var allowsSetAsDefaultPM: Bool = false /// Indicates whether the cell should be editable or just removable. /// If the card is a co-branded card and the merchant is eligible for card brand choice, then @@ -219,7 +218,7 @@ extension SavedPaymentMethodCollectionView { // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool, allowsSetAsDefaultPM: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false @@ -227,7 +226,6 @@ extension SavedPaymentMethodCollectionView { self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation - self.allowsSetAsDefaultPM = allowsSetAsDefaultPM update() } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index d0caf28e85a..6128f782736 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -449,9 +449,10 @@ class SavedPaymentOptionsViewController: UIViewController { var defaultPaymentMethodOption: CustomerPaymentOption? // read from back end if allowsSetAsDefaultPM, - let customer = elementsSession.customer { + let customer = elementsSession.customer, + let customerDefault = customer.defaultPaymentMethod { let defaultPaymentMethod = customer.paymentMethods.filter { - $0.stripeId == customer.defaultPaymentMethod + $0.stripeId == customerDefault }.first guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) @@ -511,7 +512,7 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation, allowsSetAsDefaultPM: self.configuration.allowsSetAsDefaultPM) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift index 7e4794aba79..097736d56a3 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift @@ -32,13 +32,14 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase STPPaymentMethod._testUSBankAccount(), STPPaymentMethod._testSEPA(), ] - let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, alternateUpdatePaymentMethodNavigation: false) + let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, alternateUpdatePaymentMethodNavigation: false, allowsSetAsDefaultPM: false) let intent = Intent.deferredIntent(intentConfig: .init(mode: .payment(amount: 0, currency: "USD", setupFutureUsage: nil, captureMethod: .automatic), confirmHandler: { _, _, _ in })) let sut = SavedPaymentOptionsViewController(savedPaymentMethods: paymentMethods, configuration: config, paymentSheetConfiguration: PaymentSheet.Configuration(), intent: intent, appearance: appearance, + elementsSession: .emptyElementsSession, analyticsHelper: ._testValue()) let testWindow = UIWindow() testWindow.isHidden = false From 9ed5ed2884424ab53decff08c802b5d56bf91702 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 2 Dec 2024 08:07:06 -0800 Subject: [PATCH 05/54] remove unused property --- .../CustomerSavedPaymentMethodsCollectionViewController.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index 8e26c6f108b..a1554fbcac6 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -83,7 +83,6 @@ class CustomerSavedPaymentMethodsCollectionViewController: UIViewController { let paymentMethodRemove: Bool let isTestMode: Bool let alternateUpdatePaymentMethodNavigation: Bool - let allowsSetAsDefaultPM: Bool } /// Whether or not you can edit save payment methods by removing or updating them. From 3c36c97d34e091715dfe65a7bcad88ca1cf12f71 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 2 Dec 2024 08:22:12 -0800 Subject: [PATCH 06/54] fix build issue --- .../CustomerSavedPaymentMethodsViewController.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift index c8f839a59f0..6a070a3d844 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift @@ -104,8 +104,7 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { allowsRemovalOfLastSavedPaymentMethod: configuration.allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, - allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation ), appearance: configuration.appearance, cbcEligible: cbcEligible, @@ -657,8 +656,7 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { allowsRemovalOfLastSavedPaymentMethod: configuration.allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, - allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation ), appearance: configuration.appearance, cbcEligible: cbcEligible, From aac6ae1f0412b8c4e54a389a89501148d4e1c52f Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 2 Dec 2024 08:32:36 -0800 Subject: [PATCH 07/54] fix test --- .../PaymentSheet/SavedPaymentOptionsViewControllerTests.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift index d8f97611e0a..675aefa0857 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift @@ -304,7 +304,8 @@ class SavedPaymentOptionsViewControllerTests: XCTestCase { isTestMode: true, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, allowsRemovalOfPaymentMethods: allowsRemovalOfPaymentMethods, - alternateUpdatePaymentMethodNavigation: false) + alternateUpdatePaymentMethodNavigation: false, + allowsSetAsDefaultPM: false) } func savedPaymentOptionsController(_ configuration: SavedPaymentOptionsViewController.Configuration, @@ -315,6 +316,7 @@ class SavedPaymentOptionsViewControllerTests: XCTestCase { paymentSheetConfiguration: paymentSheetConfiguration, intent: Intent._testValue(), appearance: .default, + elementsSession: .emptyElementsSession, cbcEligible: cbcEligible, analyticsHelper: ._testValue(), delegate: nil) From 90e15a4d00210e0b3b15978d04c5a811cd938f4c Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 2 Dec 2024 12:48:05 -0800 Subject: [PATCH 08/54] display default badge --- .../ElementsCustomer.swift | 3 +- ...ymentMethodsCollectionViewController.swift | 3 +- .../EmbeddedPaymentElement+Internal.swift | 3 +- .../Embedded/EmbeddedPaymentMethodsView.swift | 5 +- .../SavedPaymentMethodCollectionView.swift | 42 +++++++++++++-- .../SavedPaymentOptionsViewController.swift | 6 ++- .../SavedPaymentMethodRowButton.swift | 8 ++- ...calSavedPaymentMethodsViewController.swift | 5 +- .../Vertical Main Screen/RowButton.swift | 53 +++++++++++++++---- ...ticalPaymentMethodListViewController.swift | 5 +- .../PaymentSheetVerticalViewController.swift | 3 +- ...vedPaymentOptionsViewControllerTests.swift | 4 +- 12 files changed, 114 insertions(+), 26 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index a973e4a78a2..9d1ddc9654e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -38,7 +38,8 @@ struct ElementsCustomer: Equatable, Hashable { // Optional // to test default payment methods reading from back end, hard-code a valid default payment method // later, when API calls to get and update default payment method are available, that will no longer be needed - let defaultPaymentMethod = response["default_payment_method"] as? String +// let defaultPaymentMethod = response["default_payment_method"] as? String + let defaultPaymentMethod = "pm_1QRbjGLu5o3P18Zpu56ggl22" return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index a1554fbcac6..12c02d3defc 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -388,7 +388,8 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + allowsSetAsDefaultPM: false) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index d981a324cd1..738e2f36a69 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -94,7 +94,8 @@ extension EmbeddedPaymentElement { shouldShowMandate: configuration.embeddedViewDisplaysMandateText, savedPaymentMethods: loadResult.savedPaymentMethods, customer: configuration.customer, - delegate: delegate + delegate: delegate, + isDefaultPM: loadResult.savedPaymentMethods.first?.stripeId == loadResult.elementsSession.customer?.defaultPaymentMethod ) } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift index 2abe5686886..d6240ee93a3 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift @@ -67,6 +67,7 @@ class EmbeddedPaymentMethodsView: UIView { private var savedPaymentMethodButton: RowButton? weak var delegate: EmbeddedPaymentMethodsViewDelegate? + var isDefaultPM: Bool = false init( initialSelection: Selection?, @@ -80,7 +81,8 @@ class EmbeddedPaymentMethodsView: UIView { shouldShowMandate: Bool = true, savedPaymentMethods: [STPPaymentMethod] = [], customer: PaymentSheet.CustomerConfiguration? = nil, - delegate: EmbeddedPaymentMethodsViewDelegate? = nil + delegate: EmbeddedPaymentMethodsViewDelegate? = nil, + isDefaultPM: Bool = false ) { self.appearance = appearance self.mandateProvider = mandateProvider @@ -88,6 +90,7 @@ class EmbeddedPaymentMethodsView: UIView { self.rowButtonAppearance = appearance.embeddedPaymentElement.row.style.appearanceForStyle(appearance: appearance) self.customer = customer self.delegate = delegate + self.isDefaultPM = isDefaultPM super.init(frame: .zero) if let savedPaymentMethod { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 84039502938..76f39d6824b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -15,7 +15,7 @@ import UIKit // MARK: - Constants /// Entire cell size -private let cellSize: CGSize = CGSize(width: 106, height: 94) +private let cellSize: CGSize = CGSize(width: 106, height: 106) /// Size of the rounded rectangle that contains the PM logo let roundedRectangleSize = CGSize(width: 100, height: 64) private let paymentMethodLogoSize: CGSize = CGSize(width: 54, height: 40) @@ -49,7 +49,7 @@ class SavedPaymentMethodCollectionView: UICollectionView { } override var intrinsicContentSize: CGSize { - return CGSize(width: UIView.noIntrinsicMetric, height: 100) + return CGSize(width: UIView.noIntrinsicMetric, height: 112) } } @@ -93,8 +93,21 @@ extension SavedPaymentMethodCollectionView { button.accessibilityIdentifier = "Remove" return button }() + lazy var defaultBadge: UILabel = { + let label = UILabel() + label.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) + label.textColor = appearance.colors.textSecondary + label.adjustsFontForContentSizeCategory = true + label.text = "Default" + return label + }() fileprivate var viewModel: SavedPaymentOptionsViewController.Selection? + var isDefaultPM: Bool = false { + didSet { + update() + } + } var isRemovingPaymentMethods: Bool = false { didSet { @@ -113,6 +126,7 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true var alternateUpdatePaymentMethodNavigation: Bool = false + var allowsSetAsDefaultPM: Bool = false /// Indicates whether the cell should be editable or just removable. /// If the card is a co-branded card and the merchant is eligible for card brand choice, then @@ -150,7 +164,7 @@ extension SavedPaymentMethodCollectionView { paymentMethodLogo.contentMode = .scaleAspectFit accessoryButton.addTarget(self, action: #selector(didSelectAccessory), for: .touchUpInside) let views = [ - label, shadowRoundedRectangle, paymentMethodLogo, plus, selectedIcon, accessoryButton, + label, shadowRoundedRectangle, paymentMethodLogo, plus, selectedIcon, accessoryButton, defaultBadge, ] views.forEach { $0.translatesAutoresizingMaskIntoConstraints = false @@ -167,10 +181,16 @@ extension SavedPaymentMethodCollectionView { label.topAnchor.constraint( equalTo: shadowRoundedRectangle.bottomAnchor, constant: 4), - label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), +// label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + defaultBadge.topAnchor.constraint( + equalTo: label.bottomAnchor, constant: 4), + defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), + defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + paymentMethodLogo.centerXAnchor.constraint( equalTo: shadowRoundedRectangle.centerXAnchor), paymentMethodLogo.centerYAnchor.constraint( @@ -196,6 +216,7 @@ extension SavedPaymentMethodCollectionView { equalTo: contentView.trailingAnchor, constant: 0), accessoryButton.topAnchor.constraint( equalTo: contentView.topAnchor, constant: 0), + ]) } @@ -218,7 +239,7 @@ extension SavedPaymentMethodCollectionView { // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool, allowsSetAsDefaultPM: Bool) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false @@ -226,6 +247,7 @@ extension SavedPaymentMethodCollectionView { self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation + self.allowsSetAsDefaultPM = allowsSetAsDefaultPM update() } @@ -343,17 +365,25 @@ extension SavedPaymentMethodCollectionView { accessoryButton.backgroundColor = UIColor.dynamic( light: .systemGray5, dark: appearance.colors.componentBackground.lighten(by: 0.075)) accessoryButton.iconColor = appearance.colors.icon + if allowsSetAsDefaultPM && isDefaultPM { + defaultBadge.isHidden = false + } + else { + defaultBadge.isHidden = true + } } else if allowsPaymentMethodRemoval { accessoryButton.isHidden = false accessoryButton.set(style: .remove, with: appearance.colors.danger) accessoryButton.backgroundColor = appearance.colors.danger accessoryButton.iconColor = appearance.colors.danger.contrastingColor + defaultBadge.isHidden = true } contentView.bringSubviewToFront(accessoryButton) applyDefaultStyle() } else { accessoryButton.isHidden = true + defaultBadge.isHidden = true // apply disabled style shadowRoundedRectangle.isEnabled = false @@ -364,6 +394,7 @@ extension SavedPaymentMethodCollectionView { } else if isSelected { accessoryButton.isHidden = true + defaultBadge.isHidden = true shadowRoundedRectangle.isEnabled = true label.textColor = appearance.colors.text paymentMethodLogo.alpha = 1 @@ -375,6 +406,7 @@ extension SavedPaymentMethodCollectionView { shadowRoundedRectangle.isSelected = true } else { accessoryButton.isHidden = true + defaultBadge.isHidden = true applyDefaultStyle() } accessoryButton.isAccessibilityElement = !accessoryButton.isHidden diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 6128f782736..1f76f769dae 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -148,6 +148,7 @@ class SavedPaymentOptionsViewController: UIViewController { } } } + var bottomNoticeAttributedString: NSAttributedString? { if case .saved(let paymentMethod, _) = selectedPaymentOption { if paymentMethod.usBankAccount != nil { @@ -512,9 +513,12 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation, allowsSetAsDefaultPM: self.configuration.allowsSetAsDefaultPM) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods + if self.configuration.allowsSetAsDefaultPM { + cell.isDefaultPM = viewModel.savedPaymentMethod?.stripeId == elementsSession.customer?.defaultPaymentMethod + } cell.appearance = appearance return cell diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 0ca1096d569..78824740532 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -52,6 +52,8 @@ final class SavedPaymentMethodRowButton: UIView { } } + var showDefaultPMBadge: Bool = false + private var isEditing: Bool { switch state { case .selected, .unselected: @@ -118,7 +120,7 @@ final class SavedPaymentMethodRowButton: UIView { }() private lazy var rowButton: RowButton = { - let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, rightAccessoryView: stackView, didTap: handleRowButtonTapped) + let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, showDefaultPMBadge: showDefaultPMBadge, rightAccessoryView: stackView, didTap: handleRowButtonTapped) return button }() @@ -127,10 +129,12 @@ final class SavedPaymentMethodRowButton: UIView { init(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, - alternateUpdatePaymentMethodNavigation: Bool = false) { + alternateUpdatePaymentMethodNavigation: Bool = false, + showDefaultPMBadge: Bool = false) { self.paymentMethod = paymentMethod self.appearance = appearance self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation + self.showDefaultPMBadge = showDefaultPMBadge super.init(frame: .zero) addAndPinSubview(rowButton) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index 99e66e644b6..678ce0f4b3d 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -189,7 +189,8 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { return paymentMethods.map { paymentMethod in let button = SavedPaymentMethodRowButton(paymentMethod: paymentMethod, appearance: configuration.appearance, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, + showDefaultPMBadge: configuration.allowsSetAsDefaultPM && paymentMethod.stripeId == elementsSession.customer?.defaultPaymentMethod) button.delegate = self return button } @@ -388,7 +389,7 @@ extension VerticalSavedPaymentMethodsViewController: UpdatePaymentMethodViewCont } // Create the new button - let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance, alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance, alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, showDefaultPMBadge: configuration.allowsSetAsDefaultPM && updatedPaymentMethod.stripeId == elementsSession.customer?.defaultPaymentMethod) newButton.delegate = self newButton.previousSelectedState = oldButton.previousSelectedState newButton.state = oldButton.state diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index 44766b5deef..b77137af909 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -32,6 +32,7 @@ class RowButton: UIView { let imageView: UIImageView let label: UILabel let sublabel: UILabel? + let defaultBadge: UILabel? let rightAccessoryView: UIView? let shouldAnimateOnPress: Bool let appearance: PaymentSheet.Appearance @@ -58,7 +59,7 @@ class RowButton: UIView { } var heightConstraint: NSLayoutConstraint? - init(appearance: PaymentSheet.Appearance, imageView: UIImageView, text: String, subtext: String? = nil, rightAccessoryView: UIView? = nil, shouldAnimateOnPress: Bool = false, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) { + init(appearance: PaymentSheet.Appearance, imageView: UIImageView, text: String, subtext: String? = nil, showDefaultPMBadge: Bool = false, rightAccessoryView: UIView? = nil, shouldAnimateOnPress: Bool = false, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) { self.appearance = appearance self.shouldAnimateOnPress = true self.didTap = didTap @@ -79,6 +80,17 @@ class RowButton: UIView { } else { self.sublabel = nil } + if showDefaultPMBadge { + let defaultBadge = UILabel() + defaultBadge.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) + defaultBadge.textColor = appearance.colors.textSecondary + defaultBadge.adjustsFontForContentSizeCategory = true + defaultBadge.text = "Default" + self.defaultBadge = defaultBadge + } + else { + self.defaultBadge = nil + } super.init(frame: .zero) // Label and sublabel @@ -89,6 +101,11 @@ class RowButton: UIView { labelsStackView.axis = .vertical labelsStackView.alignment = .leading + let horizontalStackView = UIStackView(arrangedSubviews: [labelsStackView, defaultBadge].compactMap { $0 }) + horizontalStackView.axis = .horizontal + horizontalStackView.alignment = .leading + horizontalStackView.setCustomSpacing(8, after: labelsStackView) + addAndPinSubview(shadowRoundedRect) if let rightAccessoryView, !isFlatWithCheckmarkStyle { @@ -124,13 +141,31 @@ class RowButton: UIView { ]) } - for view in [radioButton, imageView, labelsStackView].compactMap({ $0 }) { + for view in [radioButton, imageView, horizontalStackView].compactMap({ $0 }) { view.translatesAutoresizingMaskIntoConstraints = false view.isUserInteractionEnabled = false view.isAccessibilityElement = false addSubview(view) } + if let defaultBadge = defaultBadge { + for view in [labelsStackView, defaultBadge].compactMap({ $0 }) { + view.translatesAutoresizingMaskIntoConstraints = false + view.isUserInteractionEnabled = false + view.isAccessibilityElement = false + addSubview(view) + } + let stackViewConstraints = [ + labelsStackView.leadingAnchor.constraint(equalTo: horizontalStackView.leadingAnchor), + labelsStackView.topAnchor.constraint(equalTo: horizontalStackView.topAnchor), + labelsStackView.bottomAnchor.constraint(equalTo: horizontalStackView.bottomAnchor), + defaultBadge.centerYAnchor.constraint(equalTo: centerYAnchor), + defaultBadge.leadingAnchor.constraint(equalTo: labelsStackView.trailingAnchor, constant: 8), + defaultBadge.trailingAnchor.constraint(lessThanOrEqualTo: horizontalStackView.trailingAnchor) + ] + NSLayoutConstraint.activate(stackViewConstraints) + } + // Resolve ambiguous height warning by setting these constraints w/ low priority let imageViewTopConstraint = imageView.topAnchor.constraint(equalTo: topAnchor, constant: 14) imageViewTopConstraint.priority = .defaultLow @@ -174,11 +209,11 @@ class RowButton: UIView { radioButton?.heightAnchor.constraint(equalToConstant: 18), radioButton?.widthAnchor.constraint(equalToConstant: 18), - labelsStackView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 12), - labelsStackView.trailingAnchor.constraint(equalTo: labelTrailingConstant, constant: -12), - labelsStackView.centerYAnchor.constraint(equalTo: centerYAnchor), - labelsStackView.topAnchor.constraint(greaterThanOrEqualTo: topAnchor, constant: insets), - labelsStackView.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor, constant: -insets), + horizontalStackView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 12), + horizontalStackView.trailingAnchor.constraint(equalTo: labelTrailingConstant, constant: -12), + horizontalStackView.centerYAnchor.constraint(equalTo: centerYAnchor), + horizontalStackView.topAnchor.constraint(greaterThanOrEqualTo: topAnchor, constant: insets), + horizontalStackView.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor, constant: -insets), imageViewBottomConstraint, imageViewTopConstraint, @@ -363,10 +398,10 @@ extension RowButton { return button } - static func makeForSavedPaymentMethod(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, rightAccessoryView: UIView? = nil, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) -> RowButton { + static func makeForSavedPaymentMethod(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, subtext: String? = nil, showDefaultPMBadge: Bool = false, rightAccessoryView: UIView? = nil, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) -> RowButton { let imageView = UIImageView(image: paymentMethod.makeSavedPaymentMethodRowImage()) imageView.contentMode = .scaleAspectFit - let button = RowButton(appearance: appearance, imageView: imageView, text: paymentMethod.paymentSheetLabel, rightAccessoryView: rightAccessoryView, isEmbedded: isEmbedded, didTap: didTap) + let button = RowButton(appearance: appearance, imageView: imageView, text: paymentMethod.paymentSheetLabel, subtext: subtext, showDefaultPMBadge: showDefaultPMBadge, rightAccessoryView: rightAccessoryView, isEmbedded: isEmbedded, didTap: didTap) button.shadowRoundedRect.accessibilityLabel = paymentMethod.paymentSheetAccessibilityLabel return button } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift index b4877f5da77..449d3e8c40e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift @@ -24,6 +24,7 @@ class VerticalPaymentMethodListViewController: UIViewController { let stackView = UIStackView() let appearance: PaymentSheet.Appearance weak var delegate: VerticalPaymentMethodListViewControllerDelegate? + var isDefaultPM: Bool = false required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") @@ -40,11 +41,13 @@ class VerticalPaymentMethodListViewController: UIViewController { appearance: PaymentSheet.Appearance, currency: String?, amount: Int?, - delegate: VerticalPaymentMethodListViewControllerDelegate + delegate: VerticalPaymentMethodListViewControllerDelegate, + isDefaultPM: Bool = false ) { self.delegate = delegate self.appearance = appearance self.delegate = delegate + self.isDefaultPM = isDefaultPM super.init(nibName: nil, bundle: nil) // Add the header - either the passed in `header` or "Select payment method" diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index 1707dcf443b..402c52f6fd8 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -369,7 +369,8 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo appearance: configuration.appearance, currency: loadResult.intent.currency, amount: loadResult.intent.amount, - delegate: self + delegate: self, + isDefaultPM: savedPaymentMethods.first?.stripeId == elementsSession.customer?.defaultPaymentMethod ) } diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift index d8f97611e0a..675aefa0857 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift @@ -304,7 +304,8 @@ class SavedPaymentOptionsViewControllerTests: XCTestCase { isTestMode: true, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, allowsRemovalOfPaymentMethods: allowsRemovalOfPaymentMethods, - alternateUpdatePaymentMethodNavigation: false) + alternateUpdatePaymentMethodNavigation: false, + allowsSetAsDefaultPM: false) } func savedPaymentOptionsController(_ configuration: SavedPaymentOptionsViewController.Configuration, @@ -315,6 +316,7 @@ class SavedPaymentOptionsViewControllerTests: XCTestCase { paymentSheetConfiguration: paymentSheetConfiguration, intent: Intent._testValue(), appearance: .default, + elementsSession: .emptyElementsSession, cbcEligible: cbcEligible, analyticsHelper: ._testValue(), delegate: nil) From 16e6b0c1c9ff6eb4b139725aa652d2fd72519224 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 4 Dec 2024 11:52:23 -0800 Subject: [PATCH 09/54] use localized string for Default badge --- .../API Bindings/v1-elements-sessions/ElementsCustomer.swift | 3 +-- .../SavedPaymentMethodCollectionView.swift | 2 +- .../Source/PaymentSheet/Vertical Main Screen/RowButton.swift | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index 9d1ddc9654e..a973e4a78a2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -38,8 +38,7 @@ struct ElementsCustomer: Equatable, Hashable { // Optional // to test default payment methods reading from back end, hard-code a valid default payment method // later, when API calls to get and update default payment method are available, that will no longer be needed -// let defaultPaymentMethod = response["default_payment_method"] as? String - let defaultPaymentMethod = "pm_1QRbjGLu5o3P18Zpu56ggl22" + let defaultPaymentMethod = response["default_payment_method"] as? String return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 76f39d6824b..e9fda59a83e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -98,7 +98,7 @@ extension SavedPaymentMethodCollectionView { label.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) label.textColor = appearance.colors.textSecondary label.adjustsFontForContentSizeCategory = true - label.text = "Default" + label.text = STPLocalizedString("Default", "Label for identifying the default payment method.") return label }() diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index b77137af909..34caaaebf07 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -85,7 +85,7 @@ class RowButton: UIView { defaultBadge.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) defaultBadge.textColor = appearance.colors.textSecondary defaultBadge.adjustsFontForContentSizeCategory = true - defaultBadge.text = "Default" + defaultBadge.text = STPLocalizedString("Default", "Label for identifying the default payment method.") self.defaultBadge = defaultBadge } else { From 5cd59d65baf29cd05334bf2d96cf257e2db70e7e Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 4 Dec 2024 14:51:42 -0800 Subject: [PATCH 10/54] small change for less repetition in code --- .../SavedPaymentMethodCollectionView.swift | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index e9fda59a83e..a24b98e4173 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -356,6 +356,8 @@ extension SavedPaymentMethodCollectionView { selectedIcon.isHidden = true layer.shadowOpacity = 0 } + + defaultBadge.isHidden = true if isRemovingPaymentMethods { if case .saved = viewModel { @@ -368,22 +370,17 @@ extension SavedPaymentMethodCollectionView { if allowsSetAsDefaultPM && isDefaultPM { defaultBadge.isHidden = false } - else { - defaultBadge.isHidden = true - } } else if allowsPaymentMethodRemoval { accessoryButton.isHidden = false accessoryButton.set(style: .remove, with: appearance.colors.danger) accessoryButton.backgroundColor = appearance.colors.danger accessoryButton.iconColor = appearance.colors.danger.contrastingColor - defaultBadge.isHidden = true } contentView.bringSubviewToFront(accessoryButton) applyDefaultStyle() } else { accessoryButton.isHidden = true - defaultBadge.isHidden = true // apply disabled style shadowRoundedRectangle.isEnabled = false @@ -394,7 +391,6 @@ extension SavedPaymentMethodCollectionView { } else if isSelected { accessoryButton.isHidden = true - defaultBadge.isHidden = true shadowRoundedRectangle.isEnabled = true label.textColor = appearance.colors.text paymentMethodLogo.alpha = 1 @@ -406,7 +402,6 @@ extension SavedPaymentMethodCollectionView { shadowRoundedRectangle.isSelected = true } else { accessoryButton.isHidden = true - defaultBadge.isHidden = true applyDefaultStyle() } accessoryButton.isAccessibilityElement = !accessoryButton.isHidden From 54a8073ed66de4bbafbd701a0f5d8d105c38f238 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 10:44:57 -0800 Subject: [PATCH 11/54] snapshot tests --- .../STPFixtures+PaymentSheet.swift | 52 ++++++++++++++---- ...ntOptionsViewControllerSnapshotTests.swift | 13 ++++- ...ntMethodsViewControllerSnapshotTests.swift | 15 ++++- ...nd_apple_pay_and_link_default_badge@3x.png | Bin 0 -> 94657 bytes ...ControllerSnapshotTestsDefaultBadge@3x.png | Bin 0 -> 104140 bytes 5 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png create mode 100644 Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge@3x.png diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift index 43ed581fbc5..e294f27e183 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift @@ -45,6 +45,19 @@ extension STPElementsSession { return _testValue(paymentMethodTypes: ["card"]) } + static func _testDefaultCardValue(defaultPaymentMethod: STPPaymentMethod) -> STPElementsSession { + return _testValue(paymentMethodTypes: ["card"], customerSessionData: [ + "mobile_payment_element": [ + "enabled": true, + "features": ["payment_method_save": "enabled", + "payment_method_remove": "enabled", + ], + ], + "customer_sheet": [ + "enabled": false, + ]], allowsSetAsDefaultPM: true, defaultPaymentMethod: defaultPaymentMethod) + } + static func _testValue( paymentMethodTypes: [String], externalPaymentMethodTypes: [String] = [], @@ -53,7 +66,9 @@ extension STPElementsSession { isLinkPassthroughModeEnabled: Bool? = nil, linkMode: LinkMode? = nil, linkFundingSources: Set = [], - disableLinkSignup: Bool? = nil + disableLinkSignup: Bool? = nil, + allowsSetAsDefaultPM: Bool = false, + defaultPaymentMethod: STPPaymentMethod? = nil ) -> STPElementsSession { var json = STPTestUtils.jsonNamed("ElementsSession")! json[jsonDict: "payment_method_preference"]?["ordered_payment_method_types"] = paymentMethodTypes @@ -66,16 +81,31 @@ extension STPElementsSession { ] } if let customerSessionData { - json["customer"] = ["payment_methods": [], - "customer_session": [ - "id": "id123", - "livemode": false, - "api_key": "ek_12345", - "api_key_expiry": 12345, - "customer": "cus_123", - "components": customerSessionData, - ], - ] + if allowsSetAsDefaultPM { + json["customer"] = ["payment_methods": [], + "customer_session": [ + "id": "id123", + "livemode": false, + "api_key": "ek_12345", + "api_key_expiry": 12345, + "customer": "cus_123", + "components": customerSessionData, + ], + "default_payment_method": defaultPaymentMethod?.stripeId ?? "nil" + ] + } + else { + json["customer"] = ["payment_methods": [], + "customer_session": [ + "id": "id123", + "livemode": false, + "api_key": "ek_12345", + "api_key_expiry": 12345, + "customer": "cus_123", + "components": customerSessionData, + ] + ] + } } if let cardBrandChoiceData { diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift index 097736d56a3..f5661ed1806 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift @@ -26,20 +26,24 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase _test_all_saved_pms_and_apple_pay_and_link(darkMode: false, appearance: ._testMSPaintTheme) } - func _test_all_saved_pms_and_apple_pay_and_link(darkMode: Bool, appearance: PaymentSheet.Appearance = .default) { + func test_all_saved_pms_and_apple_pay_and_link_default_badge() { + _test_all_saved_pms_and_apple_pay_and_link(darkMode: false, showDefaultPMBadge: true) + } + + func _test_all_saved_pms_and_apple_pay_and_link(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, showDefaultPMBadge: Bool = false) { let paymentMethods = [ STPPaymentMethod._testCard(), STPPaymentMethod._testUSBankAccount(), STPPaymentMethod._testSEPA(), ] - let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, alternateUpdatePaymentMethodNavigation: false, allowsSetAsDefaultPM: false) + let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, alternateUpdatePaymentMethodNavigation: showDefaultPMBadge, allowsSetAsDefaultPM: showDefaultPMBadge) let intent = Intent.deferredIntent(intentConfig: .init(mode: .payment(amount: 0, currency: "USD", setupFutureUsage: nil, captureMethod: .automatic), confirmHandler: { _, _, _ in })) let sut = SavedPaymentOptionsViewController(savedPaymentMethods: paymentMethods, configuration: config, paymentSheetConfiguration: PaymentSheet.Configuration(), intent: intent, appearance: appearance, - elementsSession: .emptyElementsSession, + elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first ?? STPPaymentMethod._testCard()) : .emptyElementsSession, analyticsHelper: ._testValue()) let testWindow = UIWindow() testWindow.isHidden = false @@ -54,6 +58,9 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase sut.view.topAnchor.constraint(equalTo: testWindow.topAnchor), sut.view.leftAnchor.constraint(equalTo: testWindow.leftAnchor), ]) + if showDefaultPMBadge { + sut.isRemovingPaymentMethods = true + } STPSnapshotVerifyView(sut.view) } } diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift index fdea400f34d..bb1abbf9132 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift @@ -44,15 +44,22 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, isEmbedded: true, isRemoveOnlyMode: true) } - func _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, isEmbedded: Bool = false, isRemoveOnlyMode: Bool = false) { + func test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge() { + _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, showDefaultPMBadge: true) + } + + func _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, isEmbedded: Bool = false, isRemoveOnlyMode: Bool = false, showDefaultPMBadge: Bool = false) { var configuration = PaymentSheet.Configuration() configuration.appearance = appearance + if showDefaultPMBadge { + configuration.allowsSetAsDefaultPM = true + } let paymentMethods = isRemoveOnlyMode ? [STPPaymentMethod._testCardAmex()] : generatePaymentMethods() let sut = VerticalSavedPaymentMethodsViewController(configuration: configuration, selectedPaymentMethod: paymentMethods.first, paymentMethods: paymentMethods, - elementsSession: ._testCardValue(), + elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first ?? STPPaymentMethod._testCard()) : ._testCardValue(), analyticsHelper: ._testValue() ) let bottomSheet: BottomSheetViewController @@ -81,7 +88,9 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT } private func generatePaymentMethods() -> [STPPaymentMethod] { - return [STPFixtures.paymentMethod(), + let card = STPPaymentMethod._testCard() + return [card, + STPFixtures.paymentMethod(), STPFixtures.usBankAccountPaymentMethod(), STPFixtures.usBankAccountPaymentMethod(bankName: "BANK OF AMERICA"), STPFixtures.usBankAccountPaymentMethod(bankName: "STRIPE"), diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..41ddec79f83a9e4cbfe7a25b46d9850b708a4522 GIT binary patch literal 94657 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�aPMphqR~QM8T)S!ml{? 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
  • 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 Date: Thu, 5 Dec 2024 10:46:05 -0800 Subject: [PATCH 12/54] check default pm against savedPaymentMethods instead of customer.paymentMethods --- .../SavedPaymentOptionsViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 6128f782736..0c4fe88ccf3 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -451,7 +451,7 @@ class SavedPaymentOptionsViewController: UIViewController { if allowsSetAsDefaultPM, let customer = elementsSession.customer, let customerDefault = customer.defaultPaymentMethod { - let defaultPaymentMethod = customer.paymentMethods.filter { + let defaultPaymentMethod = savedPaymentMethods.filter { $0.stripeId == customerDefault }.first guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } From c226e09f2827e1fe5200926bb201a87e8f648f3c Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 11:45:46 -0800 Subject: [PATCH 13/54] removed alternateUpdatePaymentMethodNavigation, consolidated reading from elements session logic --- .../CustomerSheetTestPlayground.swift | 5 +-- ...ustomerSheetTestPlaygroundController.swift | 3 +- .../CustomerSheetTestPlaygroundSettings.swift | 8 ---- .../PaymentSheetTestPlayground.swift | 5 +-- .../PaymentSheetTestPlaygroundSettings.swift | 8 ---- .../PlaygroundController.swift | 4 +- .../CustomerSheetUITest.swift | 1 - .../PaymentSheetLPMUITest.swift | 1 - .../PaymentSheetUITest.swift | 18 -------- .../ElementsCustomer.swift | 5 +++ .../CustomerSessionAdapter.swift | 14 +++--- ...ymentMethodsCollectionViewController.swift | 4 +- ...merSavedPaymentMethodsViewController.swift | 6 +-- .../CustomerSheet/CustomerSheet.swift | 14 ++---- .../CustomerSheetConfiguration.swift | 7 +-- .../CustomerSheetDataSource.swift | 2 +- .../EmbeddedPaymentElement+Internal.swift | 14 ++---- .../EmbeddedPaymentElementConfiguration.swift | 7 +-- .../PaymentElementConfiguration.swift | 1 - .../PaymentSheetConfiguration.swift | 7 +-- .../PaymentSheet/PaymentSheetLoader.swift | 16 ++----- .../SavedPaymentMethodCollectionView.swift | 17 ++----- .../SavedPaymentOptionsViewController.swift | 16 +++---- .../SavedPaymentMethodRowButton.swift | 45 +++---------------- ...calSavedPaymentMethodsViewController.swift | 34 +++----------- ...entSheetFlowControllerViewController.swift | 1 - .../PaymentSheetVerticalViewController.swift | 15 +++---- .../PaymentSheetViewController.swift | 1 - ...MethodsCollectionViewControllerTests.swift | 3 +- ...ntOptionsViewControllerSnapshotTests.swift | 2 +- ...vedPaymentOptionsViewControllerTests.swift | 1 - 31 files changed, 62 insertions(+), 223 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift index fa1075c35ce..481c9161d0b 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift @@ -53,9 +53,7 @@ struct CustomerSheetTestPlayground: View { SettingPickerView(setting: $playgroundController.settings.paymentMethodRemove) SettingPickerView(setting: $playgroundController.settings.paymentMethodRemoveLast) SettingPickerView(setting: $playgroundController.settings.paymentMethodAllowRedisplayFilters) - if playgroundController.settings.alternateUpdatePaymentMethodNavigation == .on { - SettingPickerView(setting: $playgroundController.settings.allowsSetAsDefaultPM) - } + SettingPickerView(setting: $playgroundController.settings.allowsSetAsDefaultPM) } } } @@ -78,7 +76,6 @@ struct CustomerSheetTestPlayground: View { SettingView(setting: $playgroundController.settings.autoreload) TextField("headerTextForSelectionScreen", text: headerTextForSelectionScreenBinding) SettingView(setting: $playgroundController.settings.allowsRemovalOfLastSavedPaymentMethod) - SettingView(setting: $playgroundController.settings.alternateUpdatePaymentMethodNavigation) HStack { Text("Macros").font(.headline) Spacer() diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift index 31c5c94c517..519921e1063 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift @@ -4,7 +4,7 @@ // import Combine -@_spi(STP) @_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) @_spi(AllowsSetAsDefaultPM) import StripePaymentSheet +@_spi(STP) @_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @_spi(AllowsSetAsDefaultPM) import StripePaymentSheet import SwiftUI class CustomerSheetTestPlaygroundController: ObservableObject { @@ -147,7 +147,6 @@ class CustomerSheetTestPlaygroundController: ObservableObject { case .allowVisa: configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } - configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on configuration.allowsSetAsDefaultPM = settings.allowsSetAsDefaultPM == .on return configuration } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift index 9715d1c236c..365140d361e 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift @@ -148,12 +148,6 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { case allowVisa } - enum AlternateUpdatePaymentMethodNavigation: String, PickerEnum { - static let enumName: String = "alternateUpdatePaymentMethodNavigation" - case on - case off - } - enum AllowsSetAsDefaultPM: String, PickerEnum { static let enumName: String = "allowsSetAsDefaultPM" case on @@ -181,7 +175,6 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { var paymentMethodRemoveLast: PaymentMethodRemoveLast var paymentMethodAllowRedisplayFilters: PaymentMethodAllowRedisplayFilters var cardBrandAcceptance: CardBrandAcceptance - var alternateUpdatePaymentMethodNavigation: AlternateUpdatePaymentMethodNavigation var allowsSetAsDefaultPM: AllowsSetAsDefaultPM static func defaultValues() -> CustomerSheetTestPlaygroundSettings { @@ -205,7 +198,6 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { paymentMethodRemoveLast: .enabled, paymentMethodAllowRedisplayFilters: .always, cardBrandAcceptance: .all, - alternateUpdatePaymentMethodNavigation: .off, allowsSetAsDefaultPM: .off) } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift index e33226d2d7e..a1e559bf1d1 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift @@ -45,7 +45,6 @@ struct PaymentSheetTestPlayground: View { SettingView(setting: $playgroundController.settings.requireCVCRecollection) SettingView(setting: $playgroundController.settings.autoreload) SettingView(setting: $playgroundController.settings.shakeAmbiguousViews) - SettingView(setting: $playgroundController.settings.alternateUpdatePaymentMethodNavigation) SettingView(setting: $playgroundController.settings.instantDebitsIncentives) } @@ -120,9 +119,7 @@ struct PaymentSheetTestPlayground: View { if playgroundController.settings.paymentMethodRedisplay == .enabled { SettingPickerView(setting: $playgroundController.settings.paymentMethodAllowRedisplayFilters) } - if playgroundController.settings.alternateUpdatePaymentMethodNavigation == .on { - SettingPickerView(setting: $playgroundController.settings.allowsSetAsDefaultPM) - } + SettingPickerView(setting: $playgroundController.settings.allowsSetAsDefaultPM) } } } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift index 8906ca32329..c13fb0a485c 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift @@ -444,12 +444,6 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { case allowVisa } - enum AlternateUpdatePaymentMethodNavigation: String, PickerEnum { - static let enumName: String = "alternateUpdatePaymentMethodNavigation" - case on - case off - } - enum AllowsSetAsDefaultPM: String, PickerEnum { static let enumName: String = "allowsSetAsDefaultPM" case on @@ -502,7 +496,6 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { var formSheetAction: FormSheetAction var embeddedViewDisplaysMandateText: DisplaysMandateTextEnabled var cardBrandAcceptance: CardBrandAcceptance - var alternateUpdatePaymentMethodNavigation: AlternateUpdatePaymentMethodNavigation var allowsSetAsDefaultPM: AllowsSetAsDefaultPM static func defaultValues() -> PaymentSheetTestPlaygroundSettings { @@ -550,7 +543,6 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { formSheetAction: .confirm, embeddedViewDisplaysMandateText: .on, cardBrandAcceptance: .all, - alternateUpdatePaymentMethodNavigation: .off, allowsSetAsDefaultPM: .off) } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift b/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift index addece2210c..d17cc15515b 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift @@ -14,7 +14,7 @@ import Contacts import PassKit @_spi(STP) import StripeCore @_spi(STP) import StripePayments -@_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(PaymentSheetSkipConfirmation) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) @_spi(AllowsSetAsDefaultPM) import StripePaymentSheet +@_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(PaymentSheetSkipConfirmation) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CardBrandFilteringBeta) @_spi(AllowsSetAsDefaultPM) import StripePaymentSheet import SwiftUI import UIKit @@ -184,7 +184,6 @@ class PlaygroundController: ObservableObject { case .allowVisa: configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } - configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on configuration.allowsSetAsDefaultPM = settings.allowsSetAsDefaultPM == .on return configuration } @@ -273,7 +272,6 @@ class PlaygroundController: ObservableObject { case .allowVisa: configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } - configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on configuration.allowsSetAsDefaultPM = settings.allowsSetAsDefaultPM == .on return configuration } diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift index 1ba33c1f416..7572ccebdfc 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift @@ -475,7 +475,6 @@ class CustomerSheetUITest: XCTestCase { func testCardBrandChoiceUpdateAndRemove() { var settings = CustomerSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.customerMode = .returning diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift index 4f1af8d851f..f78114c8b61 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift @@ -1027,7 +1027,6 @@ class PaymentSheetStandardLPMUICBCTests: PaymentSheetStandardLPMUICase { func testCardBrandChoiceUpdateAndRemove() { var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.currency = .eur settings.customerMode = .returning diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift index fb7cfcb2377..fdaa590d31f 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift @@ -2562,7 +2562,6 @@ class PaymentSheetLinkUITests: PaymentSheetUITestCase { class PaymentSheetDefaultSPMUITests: PaymentSheetUITestCase { func testDefaultSPMHorizontalNavigation() { var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.currency = .eur settings.customerMode = .returning @@ -2578,7 +2577,6 @@ class PaymentSheetDefaultSPMUITests: PaymentSheetUITestCase { } func testDefaultSPMVerticalNavigation() { var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.currency = .eur settings.customerMode = .returning @@ -2592,22 +2590,6 @@ class PaymentSheetDefaultSPMUITests: PaymentSheetUITestCase { XCTAssertEqual(app.buttons.matching(identifier: "chevron").count, 2) } - func testDefaultSPMNavigationFlagOff() { - var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .off - settings.merchantCountryCode = .FR - settings.currency = .eur - settings.customerMode = .returning - settings.layout = .horizontal - - loadPlayground(app, settings) - - app.buttons["Present PaymentSheet"].waitForExistenceAndTap() - - app.buttons["Edit"].waitForExistenceAndTap() - - XCTAssertEqual(app.buttons.matching(identifier: "CircularButton.Edit").count, 1) - } } // MARK: Helpers diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index a973e4a78a2..dc74d4c1c9e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -41,4 +41,9 @@ struct ElementsCustomer: Equatable, Hashable { let defaultPaymentMethod = response["default_payment_method"] as? String return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } + + static func getDefaultPaymentMethod(from customer: ElementsCustomer?) -> STPPaymentMethod? { + guard let customer = customer else { return nil } + return customer.paymentMethods.first { $0.stripeId == customer.defaultPaymentMethod } + } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift index 19951aa58eb..129adf47d06 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift @@ -107,14 +107,14 @@ extension CustomerSessionAdapter { return stripePaymentMethodId } - func fetchSelectedPaymentOption(for customerId: String, elementsSession: STPElementsSession? = nil) -> CustomerPaymentOption? { - if configuration.allowsSetAsDefaultPM, - let elementsSession = elementsSession, - let customer = elementsSession.customer, - let defaultPaymentMethod = customer.defaultPaymentMethod { - return CustomerPaymentOption.stripeId(defaultPaymentMethod) + func fetchSelectedPaymentOption(for customerId: String, customer: ElementsCustomer? = nil) -> CustomerPaymentOption? { + guard configuration.allowsSetAsDefaultPM, + let customer = customer, + let defaultPaymentMethod = customer.defaultPaymentMethod else { + return CustomerPaymentOption.defaultPaymentMethod(for: customerId) } - return CustomerPaymentOption.defaultPaymentMethod(for: customerId) + + return CustomerPaymentOption.stripeId(defaultPaymentMethod) } func detachPaymentMethod(paymentMethodId: String) async throws { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index a1554fbcac6..810aa01d43a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -82,7 +82,6 @@ class CustomerSavedPaymentMethodsCollectionViewController: UIViewController { let allowsRemovalOfLastSavedPaymentMethod: Bool let paymentMethodRemove: Bool let isTestMode: Bool - let alternateUpdatePaymentMethodNavigation: Bool } /// Whether or not you can edit save payment methods by removing or updating them. @@ -387,8 +386,7 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, - allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + allowsPaymentMethodRemoval: configuration.paymentMethodRemove) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift index dce7266e5e6..5eccaca37ed 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift @@ -104,8 +104,7 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { showApplePay: showApplePay, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, - isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + isTestMode: configuration.apiClient.isTestmode ), appearance: configuration.appearance, cbcEligible: cbcEligible, @@ -658,8 +657,7 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { showApplePay: isApplePayEnabled, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, - isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + isTestMode: configuration.apiClient.isTestmode ), appearance: configuration.appearance, cbcEligible: cbcEligible, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift index efd20fc50aa..501edeac3a8 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift @@ -329,18 +329,10 @@ extension CustomerSheet { var selectedPaymentOption: CustomerPaymentOption? - // read from back end + // get default payment method from elements session if configuration.allowsSetAsDefaultPM, - let customer = elementsSession.customer { - let defaultPaymentMethod = customer.paymentMethods.filter { - $0.stripeId == customer.defaultPaymentMethod - }.first - if let defaultPaymentMethod = defaultPaymentMethod { - selectedPaymentOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) - } - else { - selectedPaymentOption = CustomerPaymentOption.defaultPaymentMethod(for: customerSessionClientSecret.customerId) - } + let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: elementsSession.customer) { + selectedPaymentOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) } else { selectedPaymentOption = CustomerPaymentOption.defaultPaymentMethod(for: customerSessionClientSecret.customerId) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift index ba1b7c15457..c1f253c575c 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift @@ -82,12 +82,7 @@ extension CustomerSheet { @_spi(CardBrandFilteringBeta) public var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance = .all /// This is an experimental feature that may be removed at any time. - /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. - /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. - @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false - - /// This is an experimental feature that may be removed at any time. - /// If true, users can set a payment method as default. + /// If true, users can set a payment method as default and sync their default payment method across web and mobile /// If false (default), users cannot set default payment methods. @_spi(AllowsSetAsDefaultPM) public var allowsSetAsDefaultPM = false diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift index 6020bb1bebc..d714d540e20 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetDataSource.swift @@ -42,7 +42,7 @@ class CustomerSheetDataSource { await loadFormSpecs() let customerId = try await customerSessionClientSecret.customerId let elementSession = try await elementsSessionResult - let paymentOption = customerSessionAdapter.fetchSelectedPaymentOption(for: customerId, elementsSession: elementSession) + let paymentOption = customerSessionAdapter.fetchSelectedPaymentOption(for: customerId, customer: elementSession.customer) // Override with specs from elementSession _ = FormSpecProvider.shared.loadFrom(elementSession.paymentMethodSpecs as Any) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index c440786e25d..bc52c588a90 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -37,16 +37,10 @@ extension EmbeddedPaymentElement { isFlatCheckmarkStyle: configuration.appearance.embeddedPaymentElement.row.style == .flatWithCheckmark ) let initialSelection: EmbeddedPaymentMethodsView.Selection? = { - // read from back end + // get default payment method from elements session if configuration.allowsSetAsDefaultPM, - let customer = loadResult.elementsSession.customer { - let defaultPaymentMethod = customer.paymentMethods.filter { - $0.stripeId == customer.defaultPaymentMethod - }.first - if let defaultPaymentMethod = defaultPaymentMethod { + let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: loadResult.elementsSession.customer) { return .saved(paymentMethod: defaultPaymentMethod) - } - } // Select the previous payment option @@ -156,11 +150,11 @@ extension EmbeddedPaymentElement: EmbeddedPaymentMethodsViewDelegate { } func presentSavedPaymentMethods(selectedSavedPaymentMethod: STPPaymentMethod?) { - // Special case, only 1 card remaining but is co-branded (or alternateUpdatePaymentMethodNavigation), skip showing the list and show update view controller + // Special case, only 1 card remaining, skip showing the list and show update view controller if savedPaymentMethods.count == 1, let paymentMethod = savedPaymentMethods.first, paymentMethod.isCoBrandedCard, - elementsSession.isCardBrandChoiceEligible || configuration.alternateUpdatePaymentMethodNavigation { + elementsSession.isCardBrandChoiceEligible { let updateViewModel = UpdatePaymentMethodViewModel(paymentMethod: paymentMethod, appearance: configuration.appearance, hostedSurface: .paymentSheet, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift index e43d2da2b98..1e2e8c0a600 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift @@ -132,12 +132,7 @@ extension EmbeddedPaymentElement { @_spi(CardBrandFilteringBeta) public var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance = .all /// This is an experimental feature that may be removed at any time. - /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. - /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. - @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false - - /// This is an experimental feature that may be removed at any time. - /// If true, users can set a payment method as default. + /// If true, users can set a payment method as default and sync their default payment method across web and mobile /// If false (default), users cannot set default payment methods. @_spi(AllowsSetAsDefaultPM) public var allowsSetAsDefaultPM = false diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift index 0842e182394..8c85ecae2e9 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift @@ -37,7 +37,6 @@ protocol PaymentElementConfiguration: PaymentMethodRequirementProvider { var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance { get set } var analyticPayload: [String: Any] { get } var disableWalletPaymentMethodFiltering: Bool { get set } - var alternateUpdatePaymentMethodNavigation: Bool { get set } var allowsSetAsDefaultPM: Bool { get set } var linkPaymentMethodsOnly: Bool { get set } var forceNativeLinkEnabled: Bool { get set } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift index ac655d97d92..38bebcecf5d 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift @@ -212,12 +212,7 @@ extension PaymentSheet { @_spi(CardBrandFilteringBeta) public var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance = .all /// This is an experimental feature that may be removed at any time. - /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. - /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. - @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false - - /// This is an experimental feature that may be removed at any time. - /// If true, users can set a payment method as default. + /// If true, users can set a payment method as default and sync their default payment method across web and mobile /// If false (default), users cannot set default payment methods. @_spi(AllowsSetAsDefaultPM) public var allowsSetAsDefaultPM = false } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift index 75ee52b6055..fee9ddf93b2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift @@ -118,7 +118,7 @@ final class PaymentSheetLoader { showApplePay: integrationShape.canDefaultToLinkOrApplePay ? isApplePayEnabled : false, showLink: integrationShape.canDefaultToLinkOrApplePay ? isLinkEnabled : false, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, - elementsSession: elementsSession + customer: elementsSession.customer ) let paymentMethodTypes = PaymentSheet.PaymentMethodType.filteredPaymentMethodTypes(from: intent, elementsSession: elementsSession, configuration: configuration, logAvailability: true) @@ -319,18 +319,10 @@ final class PaymentSheetLoader { // Move default PM to front if let customerID = configuration.customer?.id { var defaultPaymentMethodOption: CustomerPaymentOption? - // read from back end + // get default payment method from elements session if configuration.allowsSetAsDefaultPM, - let customer = elementsSession.customer { - let defaultPaymentMethod = customer.paymentMethods.filter { - $0.stripeId == customer.defaultPaymentMethod - }.first - if let defaultPaymentMethod = defaultPaymentMethod { - defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) - } - else { - defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) - } + let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: elementsSession.customer) { + defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) } else { defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 84039502938..8c677706286 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -112,19 +112,11 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true - var alternateUpdatePaymentMethodNavigation: Bool = false - /// Indicates whether the cell should be editable or just removable. - /// If the card is a co-branded card and the merchant is eligible for card brand choice, then - /// the cell should be editable. Otherwise, it should be just removable. + /// Indicates whether the cell should display the edit icon var shouldAllowEditing: Bool { - if alternateUpdatePaymentMethodNavigation { - return UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in - viewModel?.savedPaymentMethod?.type == type - } - } - else { - return (viewModel?.isCoBrandedCard ?? false) && cbcEligible + return UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in + viewModel?.savedPaymentMethod?.type == type } } @@ -218,14 +210,13 @@ extension SavedPaymentMethodCollectionView { // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false self.viewModel = viewModel self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval - self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation update() } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 0c4fe88ccf3..8cea528a12e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -103,7 +103,6 @@ class SavedPaymentOptionsViewController: UIViewController { let isTestMode: Bool let allowsRemovalOfLastSavedPaymentMethod: Bool let allowsRemovalOfPaymentMethods: Bool - let alternateUpdatePaymentMethodNavigation: Bool let allowsSetAsDefaultPM: Bool } @@ -370,7 +369,7 @@ class SavedPaymentOptionsViewController: UIViewController { showApplePay: configuration.showApplePay, showLink: configuration.showLink, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, - elementsSession: elementsSession + customer: elementsSession.customer ) collectionView.reloadData() @@ -444,17 +443,12 @@ class SavedPaymentOptionsViewController: UIViewController { /// Creates the list of viewmodels to display in the "saved payment methods" carousel e.g. `["+ Add", "Apple Pay", "Link", "Visa 4242"]` /// - Returns defaultSelectedIndex: The index of the view model that is the default e.g. in the above list, if "Visa 4242" is the default, the index is 3. - static func makeViewModels(savedPaymentMethods: [STPPaymentMethod], customerID: String?, showApplePay: Bool, showLink: Bool, allowsSetAsDefaultPM: Bool, elementsSession: STPElementsSession) -> (defaultSelectedIndex: Int, viewModels: [Selection]) { + static func makeViewModels(savedPaymentMethods: [STPPaymentMethod], customerID: String?, showApplePay: Bool, showLink: Bool, allowsSetAsDefaultPM: Bool, customer: ElementsCustomer?) -> (defaultSelectedIndex: Int, viewModels: [Selection]) { // Get the default var defaultPaymentMethodOption: CustomerPaymentOption? - // read from back end + // get default payment method from elements session if allowsSetAsDefaultPM, - let customer = elementsSession.customer, - let customerDefault = customer.defaultPaymentMethod { - let defaultPaymentMethod = savedPaymentMethods.filter { - $0.stripeId == customerDefault - }.first - guard let defaultPaymentMethod = defaultPaymentMethod else { fatalError("default payment method does not exist in saved payment methods") } + let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: customer) { defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) } else { @@ -512,7 +506,7 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 0ca1096d569..9bfe5d90817 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -33,11 +33,8 @@ final class SavedPaymentMethodRowButton: UIView { } rowButton.isSelected = isSelected - rowButton.isEnabled = !isEditing || alternateUpdatePaymentMethodNavigation - chevronButton.isHidden = !canUpdate || !alternateUpdatePaymentMethodNavigation - updateButton.isHidden = !canUpdate || alternateUpdatePaymentMethodNavigation - removeButton.isHidden = !canRemove || alternateUpdatePaymentMethodNavigation - stackView.isUserInteractionEnabled = isEditing + chevronButton.isHidden = !canUpdate + chevronButton.isUserInteractionEnabled = isEditing } } @@ -86,51 +83,23 @@ final class SavedPaymentMethodRowButton: UIView { private let appearance: PaymentSheet.Appearance // MARK: Private views - - private lazy var removeButton: CircularButton = { - let removeButton = CircularButton(style: .remove, iconColor: .white) - removeButton.backgroundColor = appearance.colors.danger - removeButton.isHidden = true - removeButton.addTarget(self, action: #selector(handleRemoveButtonTapped), for: .touchUpInside) - return removeButton - }() - - private lazy var updateButton: CircularButton = { - let updateButton = CircularButton(style: .edit, iconColor: .white) - updateButton.backgroundColor = appearance.colors.icon - updateButton.isHidden = true - updateButton.addTarget(self, action: #selector(handleUpdateButtonTapped), for: .touchUpInside) - return updateButton - }() - private lazy var chevronButton: RowButton.RightAccessoryButton = { let chevronButton = RowButton.RightAccessoryButton(accessoryType: .update, appearance: appearance, didTap: handleUpdateButtonTapped) chevronButton.isHidden = true + chevronButton.isUserInteractionEnabled = isEditing return chevronButton }() - private lazy var stackView: UIStackView = { - let stackView = UIStackView.makeRowButtonContentStackView(arrangedSubviews: [chevronButton, updateButton, removeButton]) - // margins handled by the `RowButton` - stackView.directionalLayoutMargins = .zero - stackView.isUserInteractionEnabled = isEditing - return stackView - }() - private lazy var rowButton: RowButton = { - let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, rightAccessoryView: stackView, didTap: handleRowButtonTapped) - + let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) + button.isEnabled = true return button }() - private let alternateUpdatePaymentMethodNavigation: Bool - init(paymentMethod: STPPaymentMethod, - appearance: PaymentSheet.Appearance, - alternateUpdatePaymentMethodNavigation: Bool = false) { + appearance: PaymentSheet.Appearance) { self.paymentMethod = paymentMethod self.appearance = appearance - self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation super.init(frame: .zero) addAndPinSubview(rowButton) @@ -150,7 +119,7 @@ final class SavedPaymentMethodRowButton: UIView { } @objc private func handleRowButtonTapped(_: RowButton) { - if alternateUpdatePaymentMethodNavigation && isEditing { + if isEditing { delegate?.didSelectUpdateButton(self, with: paymentMethod) } else { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index 99e66e644b6..d0129436caf 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -51,7 +51,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { paymentMethodRows.forEach { let allowsRemoval = canRemovePaymentMethods let paymentMethodType = $0.paymentMethod.type - let allowsUpdating = ($0.paymentMethod.isCoBrandedCard && isCBCEligible) || (configuration.alternateUpdatePaymentMethodNavigation && (UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in paymentMethodType == type })) + let allowsUpdating = ($0.paymentMethod.isCoBrandedCard && isCBCEligible) || UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in paymentMethodType == type } $0.state = .editing(allowsRemoval: allowsRemoval, allowsUpdating: allowsUpdating) } @@ -70,10 +70,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { } private var headerText: String { - if isRemoveOnlyMode { - return .Localized.remove_payment_method - } - if isEditingPaymentMethods { return paymentMethods.count == 1 ? .Localized.manage_payment_method : .Localized.manage_payment_methods } @@ -88,9 +84,8 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { } var canEdit: Bool { - // We can edit if there are removable or editable payment methods and we are not in remove only mode - // Or, under the new navigation flow, if any of the payment methods are cards, US bank accounts, or SEPA debit - return ((canRemovePaymentMethods || (hasCoBrandedCards && isCBCEligible)) && !isRemoveOnlyMode) || (configuration.alternateUpdatePaymentMethodNavigation && paymentMethods.contains { UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) }) + // We can edit if any of the payment methods are cards, US bank accounts, or SEPA debit + return paymentMethods.contains { UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) } } private var selectedPaymentMethod: STPPaymentMethod? { @@ -109,12 +104,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { SavedPaymentMethodManager(configuration: configuration, elementsSession: elementsSession) }() - /// Determines if the we should operate in "Remove Only Mode". This mode is enabled under the following conditions: - /// - There is exactly one payment method available at init time. - /// - The single available payment method is not a co-branded card. - /// In this mode, the user can only delete the payment method; updating or selecting other payment methods is disabled. - let isRemoveOnlyMode: Bool - // MARK: Internal properties weak var delegate: VerticalSavedPaymentMethodsViewControllerDelegate? @@ -171,15 +160,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { self.paymentMethodRemove = elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet() self.isCBCEligible = elementsSession.isCardBrandChoiceEligible self.analyticsHelper = analyticsHelper - if configuration.alternateUpdatePaymentMethodNavigation { - self.isRemoveOnlyMode = false - } - else { - // Put in remove only mode and don't show the option to update PMs if: - // 1. We only have 1 payment method - // 2. The customer can't update the card brand - self.isRemoveOnlyMode = paymentMethods.count == 1 && (!paymentMethods[0].isCoBrandedCard || !isCBCEligible) - } super.init(nibName: nil, bundle: nil) self.paymentMethodRows = buildPaymentMethodRows(paymentMethods: paymentMethods) setInitialState(selectedPaymentMethod: selectedPaymentMethod) @@ -188,8 +168,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { private func buildPaymentMethodRows(paymentMethods: [STPPaymentMethod]) -> [SavedPaymentMethodRowButton] { return paymentMethods.map { paymentMethod in let button = SavedPaymentMethodRowButton(paymentMethod: paymentMethod, - appearance: configuration.appearance, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + appearance: configuration.appearance) button.delegate = self return button } @@ -197,9 +176,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { private func setInitialState(selectedPaymentMethod: STPPaymentMethod?) { paymentMethodRows.first { $0.paymentMethod.stripeId == selectedPaymentMethod?.stripeId }?.state = .selected - if isRemoveOnlyMode { - paymentMethodRows.first?.state = .editing(allowsRemoval: canRemovePaymentMethods, allowsUpdating: false) - } } required init?(coder: NSCoder) { @@ -388,7 +364,7 @@ extension VerticalSavedPaymentMethodsViewController: UpdatePaymentMethodViewCont } // Create the new button - let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance, alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance) newButton.delegate = self newButton.previousSelectedState = oldButton.previousSelectedState newButton.state = oldButton.state diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift index f6de5a3c778..f93b164d8f2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift @@ -207,7 +207,6 @@ class PaymentSheetFlowControllerViewController: UIViewController, FlowController isTestMode: configuration.apiClient.isTestmode, allowsRemovalOfLastSavedPaymentMethod: PaymentSheetViewController.allowsRemovalOfLastPaymentMethod(elementsSession: elementsSession, configuration: configuration), allowsRemovalOfPaymentMethods: elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet(), - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM ), paymentSheetConfiguration: configuration, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index f87e91d6b76..50399267f3a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -288,15 +288,10 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo if let selection { return selection } - // read from back end + // get default payment method from elements session if configuration.allowsSetAsDefaultPM, - let customer = elementsSession.customer { - let defaultPaymentMethod = customer.paymentMethods.filter { - $0.stripeId == customer.defaultPaymentMethod - }.first - if let defaultPaymentMethod = defaultPaymentMethod { - return .saved(paymentMethod: defaultPaymentMethod) - } + let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: elementsSession.customer) { + return .saved(paymentMethod: defaultPaymentMethod) } switch previousPaymentOption { @@ -579,11 +574,11 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo @objc func presentManageScreen() { error = nil - // Special case, only 1 card remaining but is co-branded (or alternateUpdatePaymentMethodNavigation), skip showing the list and show update view controller + // Special case, only 1 card remaining, skip showing the list and show update view controller if savedPaymentMethods.count == 1, let paymentMethod = savedPaymentMethods.first, paymentMethod.isCoBrandedCard, - elementsSession.isCardBrandChoiceEligible || configuration.alternateUpdatePaymentMethodNavigation { + elementsSession.isCardBrandChoiceEligible { let updateViewModel = UpdatePaymentMethodViewModel(paymentMethod: paymentMethod, appearance: configuration.appearance, hostedSurface: .paymentSheet, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift index b893f3cb1bb..7406ed204db 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift @@ -175,7 +175,6 @@ class PaymentSheetViewController: UIViewController, PaymentSheetViewControllerPr isTestMode: configuration.apiClient.isTestmode, allowsRemovalOfLastSavedPaymentMethod: PaymentSheetViewController.allowsRemovalOfLastPaymentMethod(elementsSession: elementsSession, configuration: configuration), allowsRemovalOfPaymentMethods: loadResult.elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet(), - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM ), paymentSheetConfiguration: configuration, diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift index da2caaa23d1..39d782ab68e 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift @@ -296,8 +296,7 @@ class CustomerSavedPaymentMethodsCollectionViewControllerTests: XCTestCase { return CustomerSavedPaymentMethodsCollectionViewController.Configuration(showApplePay: false, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, - isTestMode: true, - alternateUpdatePaymentMethodNavigation: false) + isTestMode: true) } func customerSavedPaymentMethods(_ configuration: CustomerSavedPaymentMethodsCollectionViewController.Configuration, savedPaymentMethods: [STPPaymentMethod], diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift index 097736d56a3..08ece3c4cf9 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift @@ -32,7 +32,7 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase STPPaymentMethod._testUSBankAccount(), STPPaymentMethod._testSEPA(), ] - let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, alternateUpdatePaymentMethodNavigation: false, allowsSetAsDefaultPM: false) + let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, allowsSetAsDefaultPM: false) let intent = Intent.deferredIntent(intentConfig: .init(mode: .payment(amount: 0, currency: "USD", setupFutureUsage: nil, captureMethod: .automatic), confirmHandler: { _, _, _ in })) let sut = SavedPaymentOptionsViewController(savedPaymentMethods: paymentMethods, configuration: config, diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift index 675aefa0857..2d2d52a7772 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift @@ -304,7 +304,6 @@ class SavedPaymentOptionsViewControllerTests: XCTestCase { isTestMode: true, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, allowsRemovalOfPaymentMethods: allowsRemovalOfPaymentMethods, - alternateUpdatePaymentMethodNavigation: false, allowsSetAsDefaultPM: false) } From f8585360563b81d4c6463d440dff3d6d17d3ee59 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 16:39:40 -0800 Subject: [PATCH 14/54] remove alternateUpdatePaymentMethodNavigation flag and updated tests --- .../CustomerSheetTestPlayground.swift | 1 - ...ustomerSheetTestPlaygroundController.swift | 3 +- .../CustomerSheetTestPlaygroundSettings.swift | 10 +--- .../PaymentSheetTestPlayground.swift | 1 - .../PaymentSheetTestPlaygroundSettings.swift | 10 +--- .../PlaygroundController.swift | 4 +- .../CustomerSheetUITest.swift | 14 +++--- .../PaymentSheetUITest/EmbeddedUITest.swift | 17 +++++-- .../PaymentSheetLPMUITest.swift | 1 - .../PaymentSheetUITest.swift | 30 ++++-------- .../PaymentSheetVerticalUITest.swift | 9 ++-- ...ymentMethodsCollectionViewController.swift | 4 +- ...merSavedPaymentMethodsViewController.swift | 6 +-- .../CustomerSheetConfiguration.swift | 5 -- .../EmbeddedPaymentElement+Internal.swift | 6 +-- .../EmbeddedPaymentElementConfiguration.swift | 5 -- .../PaymentElementConfiguration.swift | 1 - .../PaymentSheetConfiguration.swift | 4 -- .../SavedPaymentMethodCollectionView.swift | 49 ++++++------------- .../SavedPaymentOptionsViewController.swift | 30 +----------- .../SavedPaymentMethodRowButton.swift | 41 ++-------------- ...calSavedPaymentMethodsViewController.swift | 22 +++------ ...entSheetFlowControllerViewController.swift | 3 +- .../PaymentSheetVerticalViewController.swift | 6 +-- .../PaymentSheetViewController.swift | 3 +- ...MethodsCollectionViewControllerTests.swift | 3 +- ...ntOptionsViewControllerSnapshotTests.swift | 2 +- ...vedPaymentOptionsViewControllerTests.swift | 3 +- 28 files changed, 80 insertions(+), 213 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift index 482c0724047..72a36a853e2 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlayground.swift @@ -75,7 +75,6 @@ struct CustomerSheetTestPlayground: View { SettingView(setting: $playgroundController.settings.autoreload) TextField("headerTextForSelectionScreen", text: headerTextForSelectionScreenBinding) SettingView(setting: $playgroundController.settings.allowsRemovalOfLastSavedPaymentMethod) - SettingView(setting: $playgroundController.settings.alternateUpdatePaymentMethodNavigation) HStack { Text("Macros").font(.headline) Spacer() diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift index 697f0af37e3..6d8f22e6665 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundController.swift @@ -4,7 +4,7 @@ // import Combine -@_spi(STP) @_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) import StripePaymentSheet +@_spi(STP) @_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) import StripePaymentSheet import SwiftUI class CustomerSheetTestPlaygroundController: ObservableObject { @@ -147,7 +147,6 @@ class CustomerSheetTestPlaygroundController: ObservableObject { case .allowVisa: configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } - configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on return configuration } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift index d325e11fc93..ecf1cfe11d8 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/CustomerSheetTestPlaygroundSettings.swift @@ -148,12 +148,6 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { case allowVisa } - enum AlternateUpdatePaymentMethodNavigation: String, PickerEnum { - static let enumName: String = "alternateUpdatePaymentMethodNavigation" - case on - case off - } - var customerMode: CustomerMode var customerId: String? var customerKeyType: CustomerKeyType @@ -175,7 +169,6 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { var paymentMethodRemoveLast: PaymentMethodRemoveLast var paymentMethodAllowRedisplayFilters: PaymentMethodAllowRedisplayFilters var cardBrandAcceptance: CardBrandAcceptance - var alternateUpdatePaymentMethodNavigation: AlternateUpdatePaymentMethodNavigation static func defaultValues() -> CustomerSheetTestPlaygroundSettings { return CustomerSheetTestPlaygroundSettings(customerMode: .new, @@ -197,8 +190,7 @@ public struct CustomerSheetTestPlaygroundSettings: Codable, Equatable { paymentMethodRemove: .enabled, paymentMethodRemoveLast: .enabled, paymentMethodAllowRedisplayFilters: .always, - cardBrandAcceptance: .all, - alternateUpdatePaymentMethodNavigation: .off) + cardBrandAcceptance: .all) } var base64Data: String { diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift index adcfafd3b48..5345a87d8bd 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlayground.swift @@ -45,7 +45,6 @@ struct PaymentSheetTestPlayground: View { SettingView(setting: $playgroundController.settings.requireCVCRecollection) SettingView(setting: $playgroundController.settings.autoreload) SettingView(setting: $playgroundController.settings.shakeAmbiguousViews) - SettingView(setting: $playgroundController.settings.alternateUpdatePaymentMethodNavigation) SettingView(setting: $playgroundController.settings.instantDebitsIncentives) } diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift index 3b426289685..d021cc74f36 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PaymentSheetTestPlaygroundSettings.swift @@ -444,12 +444,6 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { case allowVisa } - enum AlternateUpdatePaymentMethodNavigation: String, PickerEnum { - static let enumName: String = "alternateUpdatePaymentMethodNavigation" - case on - case off - } - var uiStyle: UIStyle var layout: Layout var mode: Mode @@ -496,7 +490,6 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { var formSheetAction: FormSheetAction var embeddedViewDisplaysMandateText: DisplaysMandateTextEnabled var cardBrandAcceptance: CardBrandAcceptance - var alternateUpdatePaymentMethodNavigation: AlternateUpdatePaymentMethodNavigation static func defaultValues() -> PaymentSheetTestPlaygroundSettings { return PaymentSheetTestPlaygroundSettings( @@ -542,8 +535,7 @@ struct PaymentSheetTestPlaygroundSettings: Codable, Equatable { collectAddress: .automatic, formSheetAction: .confirm, embeddedViewDisplaysMandateText: .on, - cardBrandAcceptance: .all, - alternateUpdatePaymentMethodNavigation: .off) + cardBrandAcceptance: .all) } static let nsUserDefaultsKey = "PaymentSheetTestPlaygroundSettings" diff --git a/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift b/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift index 728c42df18c..16d1e3bd5d6 100644 --- a/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift +++ b/Example/PaymentSheet Example/PaymentSheet Example/PlaygroundController.swift @@ -14,7 +14,7 @@ import Contacts import PassKit @_spi(STP) import StripeCore @_spi(STP) import StripePayments -@_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(PaymentSheetSkipConfirmation) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CardBrandFilteringBeta) @_spi(AlternateUpdatePaymentMethodNavigation) import StripePaymentSheet +@_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(PaymentSheetSkipConfirmation) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CardBrandFilteringBeta) import StripePaymentSheet import SwiftUI import UIKit @@ -184,7 +184,6 @@ class PlaygroundController: ObservableObject { case .allowVisa: configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } - configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on return configuration } @@ -272,7 +271,6 @@ class PlaygroundController: ObservableObject { case .allowVisa: configuration.cardBrandAcceptance = .allowed(brands: [.visa]) } - configuration.alternateUpdatePaymentMethodNavigation = settings.alternateUpdatePaymentMethodNavigation == .on return configuration } diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift index 1ba33c1f416..f8c1a893520 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift @@ -475,7 +475,6 @@ class CustomerSheetUITest: XCTestCase { func testCardBrandChoiceUpdateAndRemove() { var settings = CustomerSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.customerMode = .returning @@ -552,7 +551,8 @@ class CustomerSheetUITest: XCTestCase { XCTAssertTrue(app.staticTexts["Done"].waitForExistence(timeout: 1)) // Sanity check "Done" button is there // Remove one saved PM - XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Remove")?.tap()) + XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Edit")?.tap()) + app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) // Sleep for 1 second to ensure animation has been completed @@ -573,7 +573,8 @@ class CustomerSheetUITest: XCTestCase { XCTAssertTrue(app.staticTexts["Done"].waitForExistence(timeout: 1)) // Sanity check "Done" button is there // Remove the 4242 saved PM - XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Remove")?.tap()) + XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Edit")?.tap()) + app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) // Wait for alert view to disappear and removal animation to finish @@ -623,7 +624,6 @@ class CustomerSheetUITest: XCTestCase { // Assert there are no remove buttons on each tile and the update screen XCTAssertNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Remove")) XCTAssertTrue(app.buttons["CircularButton.Edit"].waitForExistenceAndTap(timeout: timeout)) - XCTAssertFalse(app.buttons["Remove"].exists) // Dismiss Sheet app.buttons["Back"].waitForExistenceAndTap(timeout: timeout) @@ -658,7 +658,6 @@ class CustomerSheetUITest: XCTestCase { // Assert there are no remove buttons on each tile and the update screen XCTAssertNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Remove")) XCTAssertTrue(app.buttons["CircularButton.Edit"].waitForExistenceAndTap(timeout: timeout)) - XCTAssertFalse(app.buttons["Remove"].exists) // Dismiss Sheet app.buttons["Back"].waitForExistenceAndTap(timeout: timeout) @@ -695,8 +694,9 @@ class CustomerSheetUITest: XCTestCase { } func removeFirstPaymentMethodInList(alertBody: String = "Visa •••• 4242") { - let removeButton1 = app.buttons["Remove"].firstMatch - removeButton1.tap() + let editButton = app.buttons["Edit"].firstMatch + editButton.tap() + app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: alertBody, alertTitle: "Remove card?", buttonToTap: "Remove") } diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift index 60c7f7c3786..81c9ea1e53c 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift @@ -211,6 +211,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove last card while selected state is NOT on the card app.buttons["Edit"].waitForExistenceAndTap() XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 3.0)) + app.buttons["CircularButton.Edit"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 1001", alertTitle: "Remove card?", buttonToTap: "Remove") @@ -278,6 +279,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove last card while selected state is on the card app.buttons["Edit"].waitForExistenceAndTap() XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 3.0)) + app.buttons["CircularButton.Edit"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Cartes Bancaires •••• 1001", alertTitle: "Remove card?", buttonToTap: "Remove") @@ -355,7 +357,8 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove selected 4242 card app.buttons["View more"].waitForExistenceAndTap() app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Remove"].firstMatch.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") app.buttons["Done"].waitForExistenceAndTap() @@ -367,7 +370,8 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove 6789 & verify app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Remove"].firstMatch.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Bank account •••• 6789", alertTitle: "Remove bank account?", buttonToTap: "Remove") XCTAssertFalse(card4242Button.waitForExistence(timeout: 3.0)) @@ -425,7 +429,8 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove bank acct. while it isn't selected app.buttons["View more"].waitForExistenceAndTap() app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Remove"].firstMatch.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Bank account •••• 6789", alertTitle: "Remove bank account?", buttonToTap: "Remove") app.buttons["Done"].waitForExistenceAndTap() @@ -438,7 +443,8 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove 4242 app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Remove"].firstMatch.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") XCTAssertFalse(card4242Button.waitForExistence(timeout: 3.0)) @@ -482,7 +488,8 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Delete one payment method so we only have one left, we should not auto select the last remaining saved PM XCTAssertTrue(app.buttons["View more"].waitForExistenceAndTap()) XCTAssertTrue(app.buttons["Edit"].waitForExistenceAndTap()) - XCTAssertTrue(app.buttons["CircularButton.Remove"].firstMatch.waitForExistenceAndTap()) + XCTAssertTrue(app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap()) + XCTAssertTrue(app.buttons["Remove"].waitForExistenceAndTap()) dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") XCTAssertTrue(app.buttons["Done"].waitForExistenceAndTap()) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift index 4f1af8d851f..f78114c8b61 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetLPMUITest.swift @@ -1027,7 +1027,6 @@ class PaymentSheetStandardLPMUICBCTests: PaymentSheetStandardLPMUICase { func testCardBrandChoiceUpdateAndRemove() { var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.currency = .eur settings.customerMode = .returning diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift index 09a3cce8b54..71fa1d51ebe 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift @@ -330,6 +330,9 @@ class PaymentSheetStandardUITests: PaymentSheetUITestCase { XCTAssertTrue(editButton.waitForExistence(timeout: 60.0)) editButton.tap() + let circularEditButton = app.buttons["CircularButton.Edit"] + circularEditButton.waitForExistenceAndTap() + let removeButton = app.buttons["Remove"] XCTAssertTrue(removeButton.waitForExistence(timeout: 60.0)) removeButton.tap() @@ -1169,6 +1172,9 @@ class PaymentSheetDeferredServerSideUITests: PaymentSheetUITestCase { XCTAssertTrue(editButton.waitForExistence(timeout: 60.0)) editButton.tap() + let circularEditButton = app.buttons["CircularButton.Edit"] + circularEditButton.waitForExistenceAndTap() + let removeButton = app.buttons["Remove"] XCTAssertTrue(removeButton.waitForExistence(timeout: 60.0)) removeButton.tap() @@ -1451,7 +1457,8 @@ class PaymentSheetCustomerSessionDedupeUITests: PaymentSheetUITestCase { XCTAssertTrue(app.staticTexts["Done"].waitForExistence(timeout: 1)) // Sanity check "Done" button is there // Remove one saved PM - XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Remove")?.tap()) + XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Edit")?.tap()) + XCTAssertTrue(app.buttons["Remove"].waitForExistenceAndTap()) XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) // Should be kicked out of edit mode now that we have one saved PM @@ -1533,7 +1540,8 @@ class PaymentSheetCustomerSessionDedupeUITests: PaymentSheetUITestCase { XCTAssertTrue(app.staticTexts["Done"].waitForExistence(timeout: 1)) // Sanity check "Done" button is there // Remove one saved PM - XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Remove")?.tap()) + XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Edit")?.tap()) + XCTAssertTrue(app.buttons["Remove"].waitForExistenceAndTap()) XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) // Should be kicked out of edit mode now that we have one saved PM @@ -2566,7 +2574,6 @@ class PaymentSheetLinkUITests: PaymentSheetUITestCase { class PaymentSheetDefaultSPMUITests: PaymentSheetUITestCase { func testDefaultSPMHorizontalNavigation() { var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.currency = .eur settings.customerMode = .returning @@ -2582,7 +2589,6 @@ class PaymentSheetDefaultSPMUITests: PaymentSheetUITestCase { } func testDefaultSPMVerticalNavigation() { var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .on settings.merchantCountryCode = .FR settings.currency = .eur settings.customerMode = .returning @@ -2596,22 +2602,6 @@ class PaymentSheetDefaultSPMUITests: PaymentSheetUITestCase { XCTAssertEqual(app.buttons.matching(identifier: "chevron").count, 2) } - func testDefaultSPMNavigationFlagOff() { - var settings = PaymentSheetTestPlaygroundSettings.defaultValues() - settings.alternateUpdatePaymentMethodNavigation = .off - settings.merchantCountryCode = .FR - settings.currency = .eur - settings.customerMode = .returning - settings.layout = .horizontal - - loadPlayground(app, settings) - - app.buttons["Present PaymentSheet"].waitForExistenceAndTap() - - app.buttons["Edit"].waitForExistenceAndTap() - - XCTAssertEqual(app.buttons.matching(identifier: "CircularButton.Edit").count, 1) - } } // MARK: Helpers diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift index adf0f9d20d2..74d6103da4c 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift @@ -225,7 +225,8 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { app.buttons["View more"].waitForExistenceAndTap() XCTAssertTrue(firstPaymentMethod.isSelected) app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Remove"].firstMatch.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["Remove"].waitForExistenceAndTap() app.alerts.buttons["Remove"].waitForExistenceAndTap() XCTAssertFalse(firstPaymentMethod.exists) app.buttons["Done"].waitForExistenceAndTap() @@ -243,12 +244,13 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { XCTAssertTrue(app.buttons["Edit"].waitForExistenceAndTap()) // Remove the 4242 card - app.otherElements["•••• 4242"].buttons["CircularButton.Remove"].waitForExistenceAndTap() + app.otherElements["•••• 4242"].buttons["CircularButton.Edit"].waitForExistenceAndTap() + app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) // Exit edit mode, remove button should be hidden XCTAssertTrue(app.buttons["Done"].waitForExistenceAndTap()) - XCTAssertFalse(app.buttons["CircularButton.Remove"].waitForExistence(timeout: 2.0)) + XCTAssertFalse(app.buttons["CircularButton.Edit"].waitForExistence(timeout: 2.0)) // Update the card brand on the last card XCTAssertTrue(app.buttons["Cartes Bancaires ending in 1 0 0 1"].waitForExistence(timeout: 1.0)) // Cartes Bancaires card should be selected now that 4242 card is removed @@ -276,6 +278,7 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { // Reselect edit icon and delete the card from the update view controller app.buttons["Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index a1554fbcac6..810aa01d43a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -82,7 +82,6 @@ class CustomerSavedPaymentMethodsCollectionViewController: UIViewController { let allowsRemovalOfLastSavedPaymentMethod: Bool let paymentMethodRemove: Bool let isTestMode: Bool - let alternateUpdatePaymentMethodNavigation: Bool } /// Whether or not you can edit save payment methods by removing or updating them. @@ -387,8 +386,7 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, - allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + allowsPaymentMethodRemoval: configuration.paymentMethodRemove) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift index dce7266e5e6..5eccaca37ed 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsViewController.swift @@ -104,8 +104,7 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { showApplePay: showApplePay, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, - isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + isTestMode: configuration.apiClient.isTestmode ), appearance: configuration.appearance, cbcEligible: cbcEligible, @@ -658,8 +657,7 @@ class CustomerSavedPaymentMethodsViewController: UIViewController { showApplePay: isApplePayEnabled, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, - isTestMode: configuration.apiClient.isTestmode, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + isTestMode: configuration.apiClient.isTestmode ), appearance: configuration.appearance, cbcEligible: cbcEligible, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift index 03508b9be46..67f6785c5df 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheetConfiguration.swift @@ -81,11 +81,6 @@ extension CustomerSheet { /// Note: Card brand filtering is not currently supported by Link. @_spi(CardBrandFilteringBeta) public var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance = .all - /// This is an experimental feature that may be removed at any time. - /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. - /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. - @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false - public init () { } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index 7ad84a15724..7d5541b722b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -144,11 +144,9 @@ extension EmbeddedPaymentElement: EmbeddedPaymentMethodsViewDelegate { } func presentSavedPaymentMethods(selectedSavedPaymentMethod: STPPaymentMethod?) { - // Special case, only 1 card remaining but is co-branded (or alternateUpdatePaymentMethodNavigation), skip showing the list and show update view controller + // Special case, only 1 card remaining, skip showing the list and show update view controller if savedPaymentMethods.count == 1, - let paymentMethod = savedPaymentMethods.first, - paymentMethod.isCoBrandedCard, - elementsSession.isCardBrandChoiceEligible || configuration.alternateUpdatePaymentMethodNavigation { + let paymentMethod = savedPaymentMethods.first { let updateViewModel = UpdatePaymentMethodViewModel(paymentMethod: paymentMethod, appearance: configuration.appearance, hostedSurface: .paymentSheet, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift index b224a784d1d..4a6dbf14d50 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElementConfiguration.swift @@ -131,11 +131,6 @@ extension EmbeddedPaymentElement { /// Note: Card brand filtering is not currently supported by Link. @_spi(CardBrandFilteringBeta) public var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance = .all - /// This is an experimental feature that may be removed at any time. - /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. - /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. - @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false - /// The view can display payment methods like “Card” that, when tapped, open a form sheet where customers enter their payment method details. The sheet has a button at the bottom. `FormSheetAction` enumerates the actions the button can perform. public enum FormSheetAction { /// The button says “Pay” or “Setup”. When tapped, we confirm the payment or setup in the form sheet. diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift index 09334d57a50..c548c2080be 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentElementConfiguration.swift @@ -37,7 +37,6 @@ protocol PaymentElementConfiguration: PaymentMethodRequirementProvider { var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance { get set } var analyticPayload: [String: Any] { get } var disableWalletPaymentMethodFiltering: Bool { get set } - var alternateUpdatePaymentMethodNavigation: Bool { get set } var linkPaymentMethodsOnly: Bool { get set } var forceNativeLinkEnabled: Bool { get set } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift index f85122850fb..85934702a49 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetConfiguration.swift @@ -211,10 +211,6 @@ extension PaymentSheet { /// Note: Card brand filtering is not currently supported by Link. @_spi(CardBrandFilteringBeta) public var cardBrandAcceptance: PaymentSheet.CardBrandAcceptance = .all - /// This is an experimental feature that may be removed at any time. - /// If true, when editing, cards and us bank accounts will have the edit icon and users cannot remove them from the list screen. - /// If false (default), only card brand choice eligible cards can be edited and users can remove payment methods from the list screen. - @_spi(AlternateUpdatePaymentMethodNavigation) public var alternateUpdatePaymentMethodNavigation = false } /// Defines the layout orientations available for displaying payment methods in PaymentSheet. diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 84039502938..af6082dd479 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -56,8 +56,6 @@ class SavedPaymentMethodCollectionView: UICollectionView { // MARK: - Cells protocol PaymentOptionCellDelegate: AnyObject { - func paymentOptionCellDidSelectRemove( - _ paymentOptionCell: SavedPaymentMethodCollectionView.PaymentOptionCell) func paymentOptionCellDidSelectEdit( _ paymentOptionCell: SavedPaymentMethodCollectionView.PaymentOptionCell) } @@ -85,12 +83,15 @@ extension SavedPaymentMethodCollectionView { return ShadowedRoundedRectangle(appearance: appearance) }() lazy var accessoryButton: CircularButton = { - let button = CircularButton(style: .remove, + let button = CircularButton(style: .edit, dangerColor: appearance.colors.danger) - button.backgroundColor = appearance.colors.danger + button.set(style: .edit, with: appearance.colors.danger) + button.backgroundColor = UIColor.dynamic( + light: .systemGray5, dark: appearance.colors.componentBackground.lighten(by: 0.075)) + button.iconColor = appearance.colors.icon button.isAccessibilityElement = true - button.accessibilityLabel = String.Localized.remove - button.accessibilityIdentifier = "Remove" + button.accessibilityLabel = String.Localized.edit + button.accessibilityIdentifier = "Edit" return button }() @@ -112,20 +113,14 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true - var alternateUpdatePaymentMethodNavigation: Bool = false - /// Indicates whether the cell should be editable or just removable. - /// If the card is a co-branded card and the merchant is eligible for card brand choice, then - /// the cell should be editable. Otherwise, it should be just removable. + /// Indicates whether the cell should display the edit icon. + /// True if supported saved pm (card, US bank account, or SEPA debit) var shouldAllowEditing: Bool { - if alternateUpdatePaymentMethodNavigation { - return UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in - viewModel?.savedPaymentMethod?.type == type - } - } - else { - return (viewModel?.isCoBrandedCard ?? false) && cbcEligible + guard UpdatePaymentMethodViewModel.supportedPaymentMethods.contains(where: { viewModel?.savedPaymentMethod?.type == $0 }) else { + fatalError("Payment method does not match supported saved payment methods.") } + return true } // MARK: - UICollectionViewCell @@ -218,14 +213,13 @@ extension SavedPaymentMethodCollectionView { // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, alternateUpdatePaymentMethodNavigation: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false self.viewModel = viewModel self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval - self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation update() } @@ -249,8 +243,6 @@ extension SavedPaymentMethodCollectionView { private func didSelectAccessory() { if shouldAllowEditing { delegate?.paymentOptionCellDidSelectEdit(self) - } else if allowsPaymentMethodRemoval { - delegate?.paymentOptionCellDidSelectRemove(self) } } @@ -336,19 +328,8 @@ extension SavedPaymentMethodCollectionView { } if isRemovingPaymentMethods { - if case .saved = viewModel { - if shouldAllowEditing { - accessoryButton.isHidden = false - accessoryButton.set(style: .edit, with: appearance.colors.danger) - accessoryButton.backgroundColor = UIColor.dynamic( - light: .systemGray5, dark: appearance.colors.componentBackground.lighten(by: 0.075)) - accessoryButton.iconColor = appearance.colors.icon - } else if allowsPaymentMethodRemoval { - accessoryButton.isHidden = false - accessoryButton.set(style: .remove, with: appearance.colors.danger) - accessoryButton.backgroundColor = appearance.colors.danger - accessoryButton.iconColor = appearance.colors.danger.contrastingColor - } + if case .saved = viewModel, shouldAllowEditing { + accessoryButton.isHidden = false contentView.bringSubviewToFront(accessoryButton) applyDefaultStyle() diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 2bbf324ec40..4b2e406271c 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -103,7 +103,6 @@ class SavedPaymentOptionsViewController: UIViewController { let isTestMode: Bool let allowsRemovalOfLastSavedPaymentMethod: Bool let allowsRemovalOfPaymentMethods: Bool - let alternateUpdatePaymentMethodNavigation: Bool } // MARK: - Internal Properties @@ -493,7 +492,7 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, alternateUpdatePaymentMethodNavigation: self.configuration.alternateUpdatePaymentMethodNavigation) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance @@ -569,33 +568,6 @@ extension SavedPaymentOptionsViewController: PaymentOptionCellDelegate { self.bottomSheetController?.pushContentViewController(editVc) } - func paymentOptionCellDidSelectRemove( - _ paymentOptionCell: SavedPaymentMethodCollectionView.PaymentOptionCell - ) { - guard let indexPath = collectionView.indexPath(for: paymentOptionCell), - case .saved(let paymentMethod) = viewModels[indexPath.row] - else { - let errorAnalytic = ErrorAnalytic(event: .unexpectedPaymentSheetError, - error: Error.paymentOptionCellDidSelectRemoveOnNonSavedItem, - additionalNonPIIParams: [ - "indexPathRow": collectionView.indexPath(for: paymentOptionCell)?.row ?? "nil", - "viewModels": viewModels.map { $0.analyticsValue }, - ] - ) - STPAnalyticsClient.sharedClient.log(analytic: errorAnalytic) - stpAssertionFailure() - return - } - - let alertController = UIAlertController.makeRemoveAlertController(paymentMethod: paymentMethod, - removeSavedPaymentMethodMessage: configuration.removeSavedPaymentMethodMessage) { [weak self] in - guard let self = self else { return } - self.removePaymentMethod(paymentMethod) - } - - present(alertController, animated: true, completion: nil) - } - private func removePaymentMethod(_ paymentMethod: STPPaymentMethod) { guard let row = viewModels.firstIndex(where: { $0.savedPaymentMethod?.stripeId == paymentMethod.stripeId }) else { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 0ca1096d569..660fe74741e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -33,11 +33,7 @@ final class SavedPaymentMethodRowButton: UIView { } rowButton.isSelected = isSelected - rowButton.isEnabled = !isEditing || alternateUpdatePaymentMethodNavigation - chevronButton.isHidden = !canUpdate || !alternateUpdatePaymentMethodNavigation - updateButton.isHidden = !canUpdate || alternateUpdatePaymentMethodNavigation - removeButton.isHidden = !canRemove || alternateUpdatePaymentMethodNavigation - stackView.isUserInteractionEnabled = isEditing + chevronButton.isHidden = !canUpdate } } @@ -87,50 +83,23 @@ final class SavedPaymentMethodRowButton: UIView { // MARK: Private views - private lazy var removeButton: CircularButton = { - let removeButton = CircularButton(style: .remove, iconColor: .white) - removeButton.backgroundColor = appearance.colors.danger - removeButton.isHidden = true - removeButton.addTarget(self, action: #selector(handleRemoveButtonTapped), for: .touchUpInside) - return removeButton - }() - - private lazy var updateButton: CircularButton = { - let updateButton = CircularButton(style: .edit, iconColor: .white) - updateButton.backgroundColor = appearance.colors.icon - updateButton.isHidden = true - updateButton.addTarget(self, action: #selector(handleUpdateButtonTapped), for: .touchUpInside) - return updateButton - }() - private lazy var chevronButton: RowButton.RightAccessoryButton = { let chevronButton = RowButton.RightAccessoryButton(accessoryType: .update, appearance: appearance, didTap: handleUpdateButtonTapped) chevronButton.isHidden = true + chevronButton.isUserInteractionEnabled = isEditing return chevronButton }() - private lazy var stackView: UIStackView = { - let stackView = UIStackView.makeRowButtonContentStackView(arrangedSubviews: [chevronButton, updateButton, removeButton]) - // margins handled by the `RowButton` - stackView.directionalLayoutMargins = .zero - stackView.isUserInteractionEnabled = isEditing - return stackView - }() - private lazy var rowButton: RowButton = { - let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, rightAccessoryView: stackView, didTap: handleRowButtonTapped) + let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) return button }() - private let alternateUpdatePaymentMethodNavigation: Bool - init(paymentMethod: STPPaymentMethod, - appearance: PaymentSheet.Appearance, - alternateUpdatePaymentMethodNavigation: Bool = false) { + appearance: PaymentSheet.Appearance) { self.paymentMethod = paymentMethod self.appearance = appearance - self.alternateUpdatePaymentMethodNavigation = alternateUpdatePaymentMethodNavigation super.init(frame: .zero) addAndPinSubview(rowButton) @@ -150,7 +119,7 @@ final class SavedPaymentMethodRowButton: UIView { } @objc private func handleRowButtonTapped(_: RowButton) { - if alternateUpdatePaymentMethodNavigation && isEditing { + if isEditing { delegate?.didSelectUpdateButton(self, with: paymentMethod) } else { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index 99e66e644b6..e4831aa59b2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -51,7 +51,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { paymentMethodRows.forEach { let allowsRemoval = canRemovePaymentMethods let paymentMethodType = $0.paymentMethod.type - let allowsUpdating = ($0.paymentMethod.isCoBrandedCard && isCBCEligible) || (configuration.alternateUpdatePaymentMethodNavigation && (UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in paymentMethodType == type })) + let allowsUpdating = UpdatePaymentMethodViewModel.supportedPaymentMethods.contains { type in paymentMethodType == type } $0.state = .editing(allowsRemoval: allowsRemoval, allowsUpdating: allowsUpdating) } @@ -90,7 +90,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { var canEdit: Bool { // We can edit if there are removable or editable payment methods and we are not in remove only mode // Or, under the new navigation flow, if any of the payment methods are cards, US bank accounts, or SEPA debit - return ((canRemovePaymentMethods || (hasCoBrandedCards && isCBCEligible)) && !isRemoveOnlyMode) || (configuration.alternateUpdatePaymentMethodNavigation && paymentMethods.contains { UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) }) + return !isRemoveOnlyMode && paymentMethods.contains { UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) } } private var selectedPaymentMethod: STPPaymentMethod? { @@ -171,15 +171,10 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { self.paymentMethodRemove = elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet() self.isCBCEligible = elementsSession.isCardBrandChoiceEligible self.analyticsHelper = analyticsHelper - if configuration.alternateUpdatePaymentMethodNavigation { - self.isRemoveOnlyMode = false - } - else { - // Put in remove only mode and don't show the option to update PMs if: - // 1. We only have 1 payment method - // 2. The customer can't update the card brand - self.isRemoveOnlyMode = paymentMethods.count == 1 && (!paymentMethods[0].isCoBrandedCard || !isCBCEligible) - } + // Put in remove only mode and don't show the option to update PMs if: + // 1. We only have 1 payment method + // 2. The customer can't update the card brand + self.isRemoveOnlyMode = paymentMethods.count == 1 && (!paymentMethods[0].isCoBrandedCard || !isCBCEligible) super.init(nibName: nil, bundle: nil) self.paymentMethodRows = buildPaymentMethodRows(paymentMethods: paymentMethods) setInitialState(selectedPaymentMethod: selectedPaymentMethod) @@ -188,8 +183,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { private func buildPaymentMethodRows(paymentMethods: [STPPaymentMethod]) -> [SavedPaymentMethodRowButton] { return paymentMethods.map { paymentMethod in let button = SavedPaymentMethodRowButton(paymentMethod: paymentMethod, - appearance: configuration.appearance, - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + appearance: configuration.appearance) button.delegate = self return button } @@ -388,7 +382,7 @@ extension VerticalSavedPaymentMethodsViewController: UpdatePaymentMethodViewCont } // Create the new button - let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance, alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation) + let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance) newButton.delegate = self newButton.previousSelectedState = oldButton.previousSelectedState newButton.state = oldButton.state diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift index 6294faea7d5..ebb367770b8 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetFlowControllerViewController.swift @@ -206,8 +206,7 @@ class PaymentSheetFlowControllerViewController: UIViewController, FlowController isCVCRecollectionEnabled: false, isTestMode: configuration.apiClient.isTestmode, allowsRemovalOfLastSavedPaymentMethod: PaymentSheetViewController.allowsRemovalOfLastPaymentMethod(elementsSession: elementsSession, configuration: configuration), - allowsRemovalOfPaymentMethods: elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet(), - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + allowsRemovalOfPaymentMethods: elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet() ), paymentSheetConfiguration: configuration, intent: intent, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index df40729ae11..59d7c70479f 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -569,11 +569,9 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo @objc func presentManageScreen() { error = nil - // Special case, only 1 card remaining but is co-branded (or alternateUpdatePaymentMethodNavigation), skip showing the list and show update view controller + // Special case, only 1 card remaining, skip showing the list and show update view controller if savedPaymentMethods.count == 1, - let paymentMethod = savedPaymentMethods.first, - paymentMethod.isCoBrandedCard, - elementsSession.isCardBrandChoiceEligible || configuration.alternateUpdatePaymentMethodNavigation { + let paymentMethod = savedPaymentMethods.first { let updateViewModel = UpdatePaymentMethodViewModel(paymentMethod: paymentMethod, appearance: configuration.appearance, hostedSurface: .paymentSheet, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift index 29da3db04a6..bd97053d0f9 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetViewController.swift @@ -174,8 +174,7 @@ class PaymentSheetViewController: UIViewController, PaymentSheetViewControllerPr isCVCRecollectionEnabled: isCVCRecollectionEnabled, isTestMode: configuration.apiClient.isTestmode, allowsRemovalOfLastSavedPaymentMethod: PaymentSheetViewController.allowsRemovalOfLastPaymentMethod(elementsSession: elementsSession, configuration: configuration), - allowsRemovalOfPaymentMethods: loadResult.elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet(), - alternateUpdatePaymentMethodNavigation: configuration.alternateUpdatePaymentMethodNavigation + allowsRemovalOfPaymentMethods: loadResult.elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet() ), paymentSheetConfiguration: configuration, intent: intent, diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift index da2caaa23d1..39d782ab68e 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewControllerTests.swift @@ -296,8 +296,7 @@ class CustomerSavedPaymentMethodsCollectionViewControllerTests: XCTestCase { return CustomerSavedPaymentMethodsCollectionViewController.Configuration(showApplePay: false, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, paymentMethodRemove: paymentMethodRemove, - isTestMode: true, - alternateUpdatePaymentMethodNavigation: false) + isTestMode: true) } func customerSavedPaymentMethods(_ configuration: CustomerSavedPaymentMethodsCollectionViewController.Configuration, savedPaymentMethods: [STPPaymentMethod], diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift index 7e4794aba79..bdba1b9a487 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift @@ -32,7 +32,7 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase STPPaymentMethod._testUSBankAccount(), STPPaymentMethod._testSEPA(), ] - let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true, alternateUpdatePaymentMethodNavigation: false) + let config = SavedPaymentOptionsViewController.Configuration(customerID: "cus_123", showApplePay: true, showLink: true, removeSavedPaymentMethodMessage: nil, merchantDisplayName: "Test Merchant", isCVCRecollectionEnabled: false, isTestMode: false, allowsRemovalOfLastSavedPaymentMethod: false, allowsRemovalOfPaymentMethods: true) let intent = Intent.deferredIntent(intentConfig: .init(mode: .payment(amount: 0, currency: "USD", setupFutureUsage: nil, captureMethod: .automatic), confirmHandler: { _, _, _ in })) let sut = SavedPaymentOptionsViewController(savedPaymentMethods: paymentMethods, configuration: config, diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift index d8f97611e0a..9dec04ccc72 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerTests.swift @@ -303,8 +303,7 @@ class SavedPaymentOptionsViewControllerTests: XCTestCase { isCVCRecollectionEnabled: true, isTestMode: true, allowsRemovalOfLastSavedPaymentMethod: allowsRemovalOfLastSavedPaymentMethod, - allowsRemovalOfPaymentMethods: allowsRemovalOfPaymentMethods, - alternateUpdatePaymentMethodNavigation: false) + allowsRemovalOfPaymentMethods: allowsRemovalOfPaymentMethods) } func savedPaymentOptionsController(_ configuration: SavedPaymentOptionsViewController.Configuration, From 8d1c90bdb01e53832dfd252ba6de395e2308ee4b Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 16:54:59 -0800 Subject: [PATCH 15/54] update snapshot tests --- ...wButton_editing_canRemove_canUpdate@3x.png | Bin 17089 -> 8435 bytes ...Button_editing_canRemove_cantUpdate@3x.png | Bin 12340 -> 8157 bytes ...Button_editing_cantRemove_canUpdate@3x.png | Bin 13473 -> 8435 bytes ...wButton_newPaymentMethod_unselected@3x.png | Bin 7836 -> 7824 bytes ...wPaymentMethod_withPromo_unselected@3x.png | Bin 11416 -> 11404 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 38455 -> 34445 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 38206 -> 34196 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_canRemove_canUpdate@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_canRemove_canUpdate@3x.png index 9332e94500014322f46b207077eaa6643d247e56..6e7936fb11416bbbd3a1294974b99268e654525f 100644 GIT binary patch literal 8435 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 F{6871K-d5P diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_canRemove_cantUpdate@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_canRemove_cantUpdate@3x.png index b53141db515cf8b41ff63bdf948ba4b24072cfa5..20c39508cda4dba6bebc575cfcbd6c2d9a2ebfcb 100644 GIT binary patch literal 8157 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 XzylV{gT;Uh9Yf)cs!XA@>Er(aqLIiT literal 12340 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 Qukw1CXNnTVU_-zE0m?%tYybcN diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_cantRemove_canUpdate@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_cantRemove_canUpdate@3x.png index a1cf81691cef91d4b28cb645a7db96e81a89d570..6e7936fb11416bbbd3a1294974b99268e654525f 100644 GIT binary patch literal 8435 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 R@$-Lq6lK+9D#0c%{~yM6Wi9{! diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_unselected@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_unselected@3x.png index 838eafa6586a6adade5c9358b714a8b741b6cf4b..d0ea7bb2be25da99c6fce1222e8734cc9afa8e69 100644 GIT binary patch delta 82 zcmbPZJHd8>p?ywjglC$sFM}2X0|N&G3!@YRE0Dzq#CD9*aJCzx1_Lu#oQZ*W|(jS)-g+f1{Kn_kHR0Qcw(CIA2c delta 94 zcmbPWJI8i{p?5`UglC$sFM}2X0|N&GE29ttGmymygba*Q46I-_1A`Z%G@Kp8r~y^O a#K6#=$-n|t6E(5Gh-H;dM8(EsuVev8W(^ns diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_withPromo_unselected@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_withPromo_unselected@3x.png index 6142a4d44cfd3d1eb2e10f5f6a1f05d5fdc75b60..9170b468bdc1c10329fb3cc8e5123a51b42bde13 100644 GIT binary patch delta 82 zcmbOc*%LXz&^{+M!ZXd+mqCkxfq{d8g;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%h TRpU3Y#)u{LZKm1AP0zFe2K5bK delta 94 zcmeB)oDn&}(7Pfv!ZXd+mqCkxfq{d8l~IU+8OUM;LIy@D239befx(MW8qN-4)PSmC aVqj>`WMF}+iJDko#Ii~!qGIE+XW9T+qzzI4 diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png index f2760aa40c8bcdfa30bb9ca7a5911b75377e9c17..713570cb4f801e610ce2731d679aa134087dc459 100644 GIT binary patch delta 15631 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 diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png index 306782b900dcccc9a1b4f232d8f203d0d0d1c3d0..6a87abf13f600c804523a183d23c87db89d7a221 100644 GIT binary patch delta 15598 zcmc&*dpy(o|34{pI*R(rC1Sc9Qto$QlR8P}k~&EXn;otaOLq)tUO$&e+tN=Rsc$ffjq{Lc6HIG6sK9{apMulMu)e7#=J*X#8j_Bl`FEuNRt zM*-byMu!icq_*+Bbo|v{=JG-F8;SSE?(KV|wNtG6>G4EeHO1q~2jvCriGxU^3efCJkAEe`J+(;3#4ZgfI~5|O?j8vT5cEWO?8BrVD(1I)|z13 z01n#(>)!k-*(jeiTm&DUWYai?DENuX1N`@XSi`gK$1PI&SLZ+AbM%Kl)gg!5JQXnr zmKO#w>xId_>IK=Scr?PKV)Cww)(4Fat&LYaJ}33u#0!ecAjE3gl>hVPabRJgU@PGp z$bh*uKrB`h1E>2~UNw5XY64yjf8T!3mp6TRrRqMZNXpdPykr~Y?YC}PL5UuPQFVD* z%@PpzFvA6#7L9YVk(#6w_!3G2hiLX>5dCT%{+w9Hi%9f!E05drdjOUmICq5inu-Lb zDX)INw7s(OEu%B0jUFw+GDTgf)RE=w&MjSr=X(p*V+&SoV^&QQM(w;~uEg zDH(@<3(wQ5<|$o*q^N**4sy~?%0^X`Gp3}^4!$!v5|V3pfE7q?iS`d}O6_acV~k~$ zMj!$F+7^`%m#f(pPGU|Umk|2`*mj{Um0p2%B#X@G+wb1WNxNuUSGmCAhQcv<6}!Iy zOmPcqytSy$20Y2gqDA=Y!<>{hUp`d{t&r0Oj;uV(EmBH}JO=1+vx~3+Ayig$^t(Os zsczctw@_`Pbv}M8ZI#kL*UM{%iAOM6t8la6Nw%`Ug{n;{Yif?6!|_C12fg@}6-q3gEHgq0Vz|d10I_DHH{>|3uak04hIU#VOEXxfQjzxC{hLCnp||Qr zRz4Sf^{TlO&j%e9;PAIQE!mCBv7niN8m%rg9IYn&EH3^v-ShN^>O5)j2xb!*hlTX6 zaYvV{J++cO;TJ{pKIzJDBYc42V867#`Rz3e&z)7!sNP@~j4j~j_8|_$6p;By^ZApN)XD`}WLniLBf#<-pR1L^f zxj@Vvam``1n?@1Zlu;kCIEiIT`Zs>ZIWiuoggU#NF+g{fUNJUvbsMBM$XM%$v)QC(_x!e)Fx~E* zyWtxoyv#j2Lq#&0&}IR6quUHK&bV3iew)$Xg$j~6<}J$}D<>@#X$5^cLU(^=34L#8 zCydI8%jn6GH}&bPivh%g#0=1e6B$&GK0O8_+}Dl%2;}ZsQxL$S&J1c0^x`Fr`|ck? z=Zfd!ONL>M7hSRJI#>WrJ~j_uGW#>&J<&Q?$07!Cx@3IS$;GbrWa?X5I!(`c_sf_1 z)2z$g_Y5@HH=!mqB@(@e`uI=HBVc$}O9PVJ_@zT`N zDvf22ytNuiIgLvq@%a`hBXZC~d+C#P@F7`ucPxqT*Yy#a>3#)H>=I7`gl2Dv4^v5v z14y-QbqKQGK;8p2nMXxfrXuKcTN0q_JI;gAYxn;x<{BpHr%&AAxxp_#9q}`Cv}f5hD)XETnE~ebYIcMxWrCHSTH*}smDt` z)&0sVJRmhYml?))38og=JV-dD&S>X!oCUVf zgEL!o8Q4~w;@^qrlNAAkLfHIYicyIp8~QiGCN&=@M#5vveQ^sIsX z(!2_gf%NOmRBA<<6>&5rLNmER0Ve79(w}CfSzUs4Plg7tA+{c@RyPYR)FiSjH4ho- zGSV8Vq9+MUE6c}Dq~Gf-4`NXpUsz?Q(2(L97cbZ_3LEbPvJD~ApRkPz<5fwxxN$#9 zE2G&N15PEgO2}^E+P%?^ZA1Xr;l3P~gax-$%1NJ`Vy+5=BQDjOA)<%9s0=TY=xuRH z5lZjub^28s$Js%x9Fot@4iGtynh50!RnhJ@VzEC`8S2c~*w3?d1Ov3f$qT*_JCQRN zE+@Y?ww)$AB{Xa|l<=;vMNGE10hzs%q!Z?^r!*+aGI}=u@gt(*>z%z?TvFxvyM&fa z^U+_ONjLDj*uirxob2ioH;8T8RXEN9%XYQBeD@6+2bmqMuGUPAc$*8SL`=cif511FFpxBaEh{!?8b6Qm_Hz+>ll^q< zzBtdZ6T=%9b-<59+twuDP0w2wJo-j909wuaeXmuKPw=Z3`f(ySS75Zac^WQ4P+e^4 z>}0xUMCowk;It&?^DpAPl4i8+n;eOV&tTJ;_QHZjaJI-uH;#jY*fb{H;_V}I8L^9W zG>T>)n8Bd1C{$TckCJ0 zS;{fNLPD#Q(CJShtwuUr9UxO4UPRiV??s)xX=n}hy%U`?{WH?o0*uYEbLuLgxLpb> zy+h%ZN$PbUKZYK!HX&&HAUek0nAtR(^{TL@vrJeV#{S`LmA7G9LZ!p;h+!9Cy``t_ z(0Kv3OC{=|p&RxiX%c`E_~m5iPmbZ7_me`JlmjXpYB!bK zJB~r@tPLr-_1hWQ?3pvqdmhH!p1Ylg9*D>IHzrq4SHtFFl>h7~ zDU(;VCQEXr6yQdt;|X|fv{x(24-Bb8%zBgZH8wg%o%qGOM8=xqII>&A5QH4RzXi*t z!Ud>Znn7KfXBf)!XAB-ytBCm(|QA>5H8bt-xH823Cr!l8~_6U2u?0 zfAqLpyI0FZiKqCiA5jZ;539i{+|1y&J|UeRX~YWbxd|D7`J)&G11Uv)@gkKkj#^cZ zo7&8L7GdyikbSJp8p?j?RTHb>?&{O#-H2rmVOhf_(=b)n*zstTq#}my3}H2cQRR;Z zW&kT;g4)ny8u5DGTos@(CkM!$A!!dJC!QLrhe`OHu5*gUT{c_HSNiA7_4lgoC1#Po zR$%~FGAqP6S-y!5+@Z*dbqkP##k#?Z@{Q7L#=0P!*{WDpg{4huV>jv7!C@DRXp}9h zpYg(#8vv%6!Bj6p{nUYw4LLG^2yYLGZ!|TB&nY2%XTw_fsD-h0%5yhpaa7ZErk# zrHW_?!B+@Rb=F~Ky|SwmiZ-dgoGWELaT30A%p0cy0Ll+3jsV8}bgU*^a?B*5+#}CR zFH&?*5~h@^Cj_Xj^YPE`4dsAxh%}SIo+M>*leT?~DnU29p!>dYOeT`*Ry~)MdMReW z^asWaQIT!YHJFo_fmzBtEvw^C%lkoM*Qv^F@pp&^p}-CfS1%5_T;!a#pkVTOH9}=B z;5#|9G)|C%6iU2h8$Jo5&~<5lNvYa!&XDKML=wCdx%UUZnJ!RiE$j?N{H)OZ-hI6M zA*A_J7!5S!m6IJmKuJQKQT#1#cI{M(W{JxMoBPgZbF{8&3}oFH+<{yVt!A=gCv;ZyRSCBQnsO=hX5t8D4|YTmhd`V`vOZpk4o?AJ0%f2^_Yj!SZ|{G zK!BsCB`whuP>$5@B9d4N`{H(39Hr;(*AR|>Gs}GAT$N?Rdl10aGW}eU{c$VxgoNqS(oZ~kw1LVH$IPj&mHAqQIHhLUFZ!4a;z%Hp4j3_Kt zjQ01ZJtdcfVaYEf=R-YnMAMG-|zSn!D17naGL(qTpC%t*ZO5XRakKd!L0Vxj6l*H zk>&V7&S+upeR0~Q$?5FbOk5Dnin7}n7Q4BGZ!-WHRICdPD=JNf{15_Si3-&O4trw6 z2OYTn=~C;`+^3~qI_XxbQ9lLr>5#YgrPDKwfF?$heMAB~31{d&umA5H=@Gv+ue_<%Z_i^}*i?8~Pn*gpsxH4(P zp_Rl7X>QdWXnQ!xs~WQ3VYX2u6GI}WAV3$0xHzIRw94nh&ah4DiOSJNwxqzWJDTCh z19M(E!u3k!BnZ0>BJparTLx0lM4FBV<$CP3?#^?c&$pS>;)nF9-IAj>uuLOzi^B>x zysHnaY9<)i`}AnffqHlmREa^wz{}o)R5(^=#>BMmY{@fj(LS+3l^Mrj^#!%+Ho>lV z(AWYR8)hdO=$$5=liIGFS?BqOl@|UaswiR?ZvtOu-L)Shf=bXnS_4) z(eVKIhTB*6v2J=^qE^5Cqc_R~7LzJj;slPC z)zzz#oNaN-wEmRIV?$vl3&wK2E9Tmqt~ylB5y6gx9#@nIkmKDDVw+Ynm{FvWPYz<$ zx^=Cc=j$WC&o>XHV5Z*6>;lT4K!AZ07_k=I25wvB7jhr(l9}Foa{zPxH-JH0Bl*}i z{)2ky`CbX_ua7ygd*!QD!#0TWW2P*sFg-Lq+*9EO-O5`JNCR7n<#uPJ_y#&)gp>5wRBR;3!5UUcx==)%DaXilOXj>d%IEl zqcjAWC9F18X^B-C|CE~J>Qo)0&WBah)1GJRbi|pT&OdRUW{y+{z=^<&a0_u?Vjq}M zaEOL1=d*cPOVVBL4xcmC-&;3oaKRY(rh8FzxkWpve~itIWfC+`h|e#B)DIj_&j{ba zR!gVS{u3m{*4XxZ4leVe2Kix3aeDP}XL73uUUx|1p_+3h)^oVPeT|6-w_WRXyaUde zgohbi9al~g2<%w9+Y%q=)8bNXgP^L9$0wiN<2RQvfZ`Kodfp#ocvUw@`kl)TLZ11k zQJf4HGA6%N6YWhRn?cy)otl2v7Q@-qva756k7Y`aW*WG1u#VWHBn^VW_M$K#Z{UM$ zW3_cL6P*GjxzS`wC`4ZHhL@bQBO1Bb3eAX-m@U}8IvMEfXFc)j7hCvA2R(B-l< zCetK0ZX^c20IL+f8dfd)he3Ddf`Zg_VQaQ_n2N}ZgC|`vZCG?L>Quod>}1RYi3bgo z424TuL!=+kNVClA?VB#T50`Mt6B>a5m;w4tkG4=nDjyz9^C!S8l<1xihG+FJBGx%W z^o3dsK%SJfp7F~XaU5Ze|JuX-8e*MFRfZgVap+MmJ2&kp&i_`YS!+=<)+>*`_SlPh zgOVsg(ppSRru{5hIffi0^#gl)%0gtH*MabzYnv#II&eX_~=@Laeis)Y29vWCDZ(Xa|77xtik@!qs zzw#eP0H-E+RhV&g;4#)1TM=*=g};^6MP8>x>rYo8|FCja$4MeC(ywb4pC9JQ4cp;y zl%61fe9Gi6THDqCGp+6j7NAm&;BH5A{kDrK6_}jBTKW~`i4rU$|T^)XE{-hU2{3R3x{K+>`%H+7U zm2f%qv^*I%_4IHj_|Kb>$%GMkzMxsU6JD^TG)zfVKsSjSy zR3!Ko00kD3h)>39_p8wxc+gzLO(9(u6qj=1!iO>y?!c%@Keijz^6mV~C_W@>NwF?` z2tL1>xt;e488;rNv;nb#hKH9pKL6qQ*163*U$vS4aEv7{yXpQdfpvmf_#>9G#sX`LSAz_wm08KEZqDu&T`F1UK`Xoc)13IoS|vVkW~9#L zT7G`Kg%{{y0oCPNamW^{O@@L!lW8QO+wuF!Kw*A6fE~g%6Qik0Sl~9W6@Zrze|meeK{$R)`h%vVnQ;?I?|b zlP@BTQq_L)zr5@7o}QbxP-tle(by6om`%OE6C0J%)3B2D+_+Nq`^F@!ZkWn5Tia*m zPVe|H%g`?La*NrT?sL*6!w)QNR3V+31fROU}otR1Lt$1%cnBG zq!eFLknRSRXJ!!~>tk%hFvT7NiC&ZA$m@SQgG?AYh8C?%x`{7`#&qYp!5?9!=!DV> z!vz^;kzHTq=`}pryY2>z*GKf3_eR0~nBYzefxAWw12jKA05+{2egECZ-%+B6&D%mmzR(A2TJKbp}k6j*zU++=m5zc z0%FZHaq=D4@$t83$v7)S8VPQbku!DRce2=vx@2jKr0Vay*xxj+wc~53lyrCo8{z$f z6({Dn+?tI8b1%Ip-!+=U{j7+4M~I-HjJ&B+e1{iCn#~=60WJy!-DB9_UfMamLAh#u zwb)aGbC*M*132zd)AXjy`K3Zi0N4>FlW5ga3u%*c@wHkXwQm-2+sdpAMO2h&G9fRy zamB!7e*PFNA$XMSU3?unP*msbz-0u2yI7wjc)be6IRU_jS6A?t7RmD(M+lgj#ue)( zP{5{M@iQlX4B78Q{Pl5Nqh~VBB>(G_yN1V@yQbGbT35bYvcB{L`4+FrGav%VK1V1u z2fxfolw%D%J0pvF+S0K>X0NHuwEsyZ)EwV_vKtXoeRjG=kFkMUJX=mE0P6ycv#)fe z6qw80ar}lX>+&`xfwkp-JBsuiz?=X*nx@oS;$Q+?^uKqQ-+_pP?Nz-bh4Kh?AwA#d*m9~W=_cXb-4L`_LPF$F`kCAm#ZTg?wZ-p2 zdr-=uLIBBCYNFv;sVUOu%#T}Hv@1O5`YJxh1H$UL@+ZXNo{l5Vj%_=UKkg}a^|a_S z^D%0Tj;03JkMjyX|DMKe3;1xOm}cK2&Ej=c5G}x~VU>lhkN*%miu4$GST|v3!HJvh zuQ%&!4`}70J&+XvYEbUWcjS?{rSSeh+%uRgs^+;n53wsmP*_Hly(5I{kDD^0Kc+d^ ztx0x(C%~r9#)+@xS}h1f_lTW-s#vq%&Q4K6zwET^QJjq$ zJpte0ik8^ym? z?6&JyZcMon+hQ(#UQtapQTobAwo3@eQA`LAwqOY+bR5_g++o$Qc3oY}Mb;XV3BpJ?D%n#}&kyok z0OZZQH{N7-ONmIY!Fv&wggO%y>?CT8v_H};-c#fz8e z>yJ#}LLz$F1L~2m2(T%D@wjT$^!z7B;@dovfPlc0_quWG`KoA)d<8@MiX)p>yno>k z%zZa^+XU3J4UkN&U}!+~i;Jp)l}Q`7`;H0kyZY`8`mFhESv`Bh`SRg77&F4t$mUA=^*&jYLW5C;6ut9jHUjzhRWXvLtPlF4&WF+2d zQ%nXh$x70gD(H0;)BY%to9OWtt2QT% zNGnq%)GfQL&)XUPoYP^PES2+5Rt2%>3^CFC4K_pG1${P^>=)OSnZ-^AB0tI$L~e}8 zw0`kem(%g2vFH5TqpOaH3-DVoLKe~&9~4DP1AcTQu2XRQOtKjiFlqyi;!By9Uk6LB z$#OPp-Ss9cBr!cw((y3$1Spu2ysca-b3(vl6u5g^^x0BmUEH5j_WJjf*oR{=twoI< zw$^)5GCs1ubmqb=9g?>ihA)1L3m&i-nw6ff_sFy%A#)R;@%_i&btnUSmatv9{Ll>d zjQ!IY4Ph!*KC?qeOiqWW>Zw&G*ITd663ApbCqRvPr*;aK#|6aTzGGc_zfpraEm!a9c3;9Afi}bK=(Q zjB6?l4}bXKtBfwC|M(jBI_|YXxVh+3#f8mG#HJL4@;vUHB{GY!J*2YAAlI Tb>s)`Kcinv4`&#h`|W=KI5xb2 delta 19642 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 K*(a~v`Tqc3a<=0D From c70c6a1e6654ffdd247642761be87dbed476b987 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 16:57:48 -0800 Subject: [PATCH 16/54] update row button chevron condition --- .../SavedPaymentMethodRowButton.swift | 2 +- ...Button_editing_canRemove_cantUpdate@3x.png | Bin 8157 -> 8435 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 34445 -> 34748 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 34196 -> 34499 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 660fe74741e..2f06197eff7 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -33,7 +33,7 @@ final class SavedPaymentMethodRowButton: UIView { } rowButton.isSelected = isSelected - chevronButton.isHidden = !canUpdate + chevronButton.isHidden = !canUpdate && !canRemove } } diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_canRemove_cantUpdate@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_editing_canRemove_cantUpdate@3x.png index 20c39508cda4dba6bebc575cfcbd6c2d9a2ebfcb..6e7936fb11416bbbd3a1294974b99268e654525f 100644 GIT binary patch literal 8435 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 XzylV{gT;Uh9Yf)cs!XA@>Er(aqLIiT diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png index 713570cb4f801e610ce2731d679aa134087dc459..4cdea560c9721b0135de2451e5ebd899e6de44de 100644 GIT binary patch delta 15327 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

    ho%y zThzHHvp!MufZq9pa{hXA-|;0G7_^3TN7XT|)j|v}ndD&PLKpU^F~+pfS|vRs(}cVQi2s~Tt|9yyN>_;v=#y(3-8w-&858fQdb{g0%{l@3^HN5Wq=0a z)KE^@#N9!MZno7n2FXXY8N%Q;L@}Y*#Q-ME?e9B5bW2R6vr0p)@RjLf?>mBIq}9FO zP9Kl55&@UAaCvXIAt=|oKCNbA)wLDyq728i-r^D@S2((SW;oRz>%VjxNSHf32$12< z2{|@d8C(|;C7P#my|?BC$b*iz2k}^bG~U@9gP4558@4L!j_p6}bysI*;6t<)kU*d9 ztsyc4a;eA$4!bRRv-b5>8>6-~MVLP+?r|#1CevhGNEiHy4s{f)7HBI&kIh$ZsgK|Z z*V-g|FftgRi`}nuXgvNp&b@;xb9NL$w&0kjT?Hf0E%|IHe1+5d=D8kQk0+szLqx9cUE?b+9sXhXi(BJUWddt6zy}C7=m4XRVRXTg8 zmO)jxr86@Pf|ihHq_YORaT)VUiPMn=MP6~7!aOH`KT{$E-bjfe*+YBuEqq3HyAgbq zsJ)z-d00W!O$|^5q0)#;YTQ6eJMVo}McQDorOpiYgO(Q5!e`WF17f({O$eHaMK)|q zlPulq;AsZ}Q-#dZE%(8blhm_QZm!hX0pE;`5w~yp!uG({8ExhVX?}R?Z-mY-**r8F z(y&juB)VBty=tJ+QkgmusIq7k4uuIG28_1Kz$FS)Bljtr*_Bl4h`$PY&@xJ4H}RYQ zZpt5a=r-7pYAjd|s{_x)7rfW^;tWN%%IZmBua#Y!sccD$-=lnDV3qkZ?XPF>qxbOO3ABM^``wW2#;!L7ZC&P=$$cBM%*o*;iiOn1Pf%^n3HRJ(m`GpugI5eSl|ip`sHq|>(4p( zW~)YIl%5te+!=U6cAlDXo65AVyN?nu8^R^D#>3T$t|rZV2NCO29KB3zoE?K3>3 zdZBbS*&5wcw8mV3Rq^JNvkjaoMKOm(IvhtocI(@LfJ6L2&;$Ek9K%L{SyO)}c+F>4 zg;%Y51-+7I&tOq8^uoK+gT)sG>LUZq8}AU^dHxbZ67oK|d+(J#|Fe3_4tJw$vuh$M zrY1Grnc^?10U%;3-s|}Fm8za9WvE*-n=otl`pla#`jUs@7aJJkcP)Mkyj~rW#!+pG zgVqMI)Mc#K#^`0x2U_JJcJUv}JO|Nk$vTM6_rC|Zd%mhgoa9%`T>q2tmi!+)^@okK?y8m>=e;52_?`72YuMPi0NBq}q{&kyw zv(0~!vj2^geCpYn;d;r^JR$K1M;XV!r~r%#+c Ko}*!P`~LvfKfBQY delta 14434 zcmeHtdpMM9_y10*U5eUrh!`C}&W!QYmeek$8p$A&oGKwX zs<|bKTnW(VaCKcTZiHH-2^9?NRD%-nvt_ZQsu!G2aU!2!Yht3?6_WapEBg9(bQMLwPFw@Qs>yCW=cM&p&M zEpVLxk86SRZhMh#R?HbIgOAN{89Y-o{P@LT;X6OA5?J%|W;x@_OAo{X%9B#Fa7;V&AoE5wAt51=??1KZr-qil6_0# z8jJMWWFX#Ark`y3Y@C~e+zhQGh*S|a%5bKFn3s!)XQjHI#bU16`QBRE1F-zU*~5ZY zHDs`@MNRwUoz>NEnw_?6@og7ZDC^CnkAKz4X6c;(lah7d}+Xh{o zbWfvE%{=CNcphK2&gd1T#D%_bQIdC4H>;(cwxoP?37RjEkzFMKe1+uZ_>e2DnS)(M ztjRn)3JDNbw`)XrT+X*~lX82%jM(3RZ4=vE;~(ZkvB{0U_2#vbyobJhtp_Y=GzME# zz3V%`R5x>`I?4tez%#5o1}elD=BBpk;>j9lwURz?`0KOWET@(#V1kLUx&Rv%L+8cE zzuB#v>80;|6Wuw{7#RGut#Za^2Lzq4$p}_QEnxvX!&MhKU%N45RsB&+43Uf!x!?^B zsV^O16CB$NCp+)!l$FyzKJ}p`HI^tuxSU(I5Lo2FmHlfLp&wiU{k}|OwG1r5(P-w+ zrzY`{CYdgGpclTeLX9JkXGN+&jP*MMAkISkx&qg=jdJek&>p*^Ste^Vsju%DEx(ijgxaD1=*7gCmz?r;AOHn zWov+q39@gWOPF6E%(I`eQ5TFxW#}B_C_)vs-ih-VD#wL6R)hxl4Pe}L6p}8Q_zgeF z)Pc-ai6lfz>yByNFhl9nCIY3BWWHE3wEhRqk#kQY(%s{<38oi+$=u4*YlPmcU~eE% z0BoOQV+(Ndc-}RGF)!J<#?6C3av*YK1RwaO-s=$}qTLPJeNEcu{6e4ALRy=5ac4r5 zVc(8j@O3i&)_y&a5;?6Ht5BlZEtVB;%BpUk!^EFrCFwlt_Aef*Brg|h2Yo!w^nPLs zee2{TjxI>b=`T>W4D4x40HnjEOfaU?IdtDaBNi(r$cy;^Y z?;gYyN*5C=#$YWMJaODcSSUj|v4~i)@GB57-7(V0A&2vN6@s*><(|$|`fElu!^nNt z^XJBMoQr*TOmz@rC4=we+|(Ynx!$)=h!6q4EMe9gNOVmIkSqbd?J=yeAUr~eaG>QF zJ`-Q7^Ti`?u7pxa$44T$*d}9K33_l3bEXkKs_5;FqX_-J7NwgVT;j&9@FPJO&bGuT zjm#u~(%{vIpau^Y-P2NdP=;fxf=+d&0fs?S0$8K2koOHE0G2|*Mprrsz>y=c`(iui z2jB~Ceyq+Q)gsOv(ju}kK|?7~Dz(S=XuddMc;s`qRJ+D^pp9vFRXxlroHWEm^W)R{ z{gpGlFTF5NJ}!$;>l82MLvMLzm!H8vO6y!W@4zZ;i4NnMLgqf;T2!WL(+EjZ z!L$xmn>!YqN##^fy<+qS;$1t*0I=QrOI#8c-CUz2e`1!sA`p&y)NO)D9`dKN{4L_Q zCZ(a&-Z&c!X|_yp!#jACz#ZKnY7spZDio=qKV-(?zNfRa*@=lC7aB<>7?l&}gHSt= z^XD(7zcqK9BfF(EZ!?t%Xlg*rw0i-$12dH4)-PvuXzB_^4!;DG(aBBj{_P%_%EG;3 zUrY-$UYSYP341uf3vJw-no`$EZQNNp#Q_u2y-F{X4Va(aghtV~5$2zpNlYSx86(e_ z&iL`F=DO8>)Pfgu>4dchFS6OojXy2pMBib+LhJc!Vx!ZS7 z87$|RD`H|Rl+dXU5gld*d>x=r6;nppZtPEAxM6A!4vLO1nEMrJZUe>@IJxy!(7b%2 z@X<6ug|q?hsiT;wIt!A1AfkKnm6b#D8UJc~CdY!qW9=K;T5}7gCx#zOMvQp?Yi<1u zN6(3P`BZ2}M)rD>LjTIY_A1Js8&~8_cD4*H59_kE4`{w!`!-sd+4xToT?W*kG>~_P zS5_2c150dF>1dEh8tvr7lVJ#IQ7k;d(Ur^f(j@^E@Qdlt4X!b~w=-h8wEY@9dLNxS zFoi|zXo#q|`NwI+{Q1*Q`yV*+=31iuh?r6~H*bqE7<-w5Ea!0<@Xj|&$IgC@=X5e= zN(?`4LA|poQCQYL&l}gQ&?tfJt8%+zvSaNI5c@}gr(Wlv`;)ODE$MZ0b+E-46|yiv z$raSB&y$_U1N_KzEQQFA_F84dVG)gpg#b#i&U)9ll1anJp(%fT5#M^9B0g84yNguI2DhURmC#hA)Gcay6WNZ zJisKu!IO7TT2Zp0=lv>ItSEH9JIj| zD6($|q7!j_iAmG$CP|J$}`jbT?M`iC*xsVzVrV$zBL=p*E3IZR?QP(ntAyWX!`R9_`2( zVm$(5-wS4&ZTu))h{P@7L{Cdx^(vcij+qR<&Rhf4M zqxqZYJt9D`qw#HUU_lZ+T@~p;4YzrBkuPjwI+{PZV44Vcwi}G5F3_nyvdnnGl+j<} zZ(kEw9eyPF?3}zU%Su(!lz$R2HdQSJ{0a{Eri2r;@(3T2bctPHFXoP*GnA8+9f2)e zi&8Z>&YPBf@jWTJlp01|&CIo6m>n<=hnJ!lc=y@}CaGU&!yqz))p?PCtg{H}YB_VM zmTU_lR*TQ}G-4P0^J`VgHfld#EM@%&GC@l0>nB42+D{p-0M`3dqApx^(jukGx5(cp zR&sY57SGocB6QEC_!s<&wqHF$p3UOUP;&W6+c`m#WSC#lch@{27fJW3Tg*xWG%H~4 z9c!Mf%C+eoDM-!1E@z(hmGP(j?FhN|WX;y(Xz~Flu${-(iz6Nvc&BV=*kVDQNQLvn z9^L|j7w#g5mTuolOoOQO`s}N~YmF6*`t3-i!12gEKLyYCg76Kn(^%;qYPIkR+nQuYmV0cgIRh0^YCKH7sbo$xxYd=4VB&a`4bWP`mpB@ZS6+x~nR} zjv5Y-x2NaU$acsZ4Wton4su!v;387r2UNJfA73rMxqoY3Uxq2&HGU1pk|$Nnv}f7X zPlq2C{&?WCNWOyk&OhY1yrIVwt;Wjf~eDO-|rgWv2+*m|;`B7vWMGvD-xMT7j2 zimTx;vAp?5jA?;oyGxha4FK=h4ckzqZ#xb`nVrpY^0FO@hc<*M-^ zA&f_r?8GEoKwSpEkn`rnWonJ(IXY4j6SC`U2UYfWMB1I6l_XDV`;Nb8;DWdxK+5H* zSa2DcV_xoX~o~6wMWyTYgZ;VeC{@l z(lt}mPbZcwS5i;6tWYNLYmN80ZXnrggp|%PA6v^K%lFtnFQ$vDjw0A~LAod;!xdRY z9N|rr4&0Sy_{_}ZFXR%!8FsW?=CH&~6+)W;$cSoVWK{PN86yDF@DAiuhTRO3>r|k4Q4ZQ&45-`t1~Kvn?^A8Uef>3`v?0Ci_TSF+tEnn zajA~=IptBG6Yj&Et5To@g)-&oKi{8%5}oeGH5Miny?H=d#cuk&C5JGZ3KjWI_^I9am7T<2;k#e!1QQy2feOTrOm0AjlM8|2`k=aHPH=tp}^+CTDa;QFqZp|bQ)yP81mbc;yI!UTvnVH4O>_{H)K z%N+{fOaCr?sYRjoaOfjrpIA*A+_WR&uKkBx0S6j4T{MyJT?tngb=AQ-o&;_@@|dbjsFL8i2*<37k(@G}Vrn?2!K-)m z5?>z#f4p%p13UX#VJA@a2m%Zr$4a#m*74gazflJTm(2_iS_GK)p8y8&jTGWKgp3$v z7yGAly*%p19Z;^*jA8eLwQ2<8%4TMQCQC*JyO_O{G4JpNE(MqOM98mCvQ$CsDVyq! zMJ7za0U(dA3=gTbzBnEQ%tqa;$i^&6M0is`VDem3X1)FH&|^tmLOx~mq5(y#keb`{ zHxgE)!j!lAR=GPqtL#%hXj|Tcknd4b?`iCVm!=sBUlX;TuTYM?ky2{{fsfk145IcH z*}v4qQfq-w$D2sLZlVc!1R^-U)=8+gH!vyf&m79=(ur|bX>Xc;PJ=YDot-9}k1!Ba zj=0urjV(@N>O*FMr(0cuwh&I$NPmf~bEwlB&OLIUV~L8d^a*%&sP)(z*)z@tnq zPpPMggmtgpWlKy7Z1<>hK+v_PlGD%Z4qnU{K>2Yiqkwk`f|~1OgU{xNBTv8ADNl!s znNy!@Ne-k@tsvZ~9^K%ppTpVZ%F8SJkCkc<=9~F)u#w!aCJ%za_Mow#0N|ZsOPzf= z>z=~GV^#l<(~MB{kx-E9(JRooDD)VWUtS<{&8R>_Eba--%l3kjp}{rA3*))o`BxIS zi!PGmM0aq02tVewCHa%h>W-PpG?&l5QI%zvDu5?$Snx&U%TJPnMs+FGn|^%RwYW1d z5w;19%P~L}>@8UsV=VZfWkJ((x_EY7?~72G&n2#L|6+?-!g#4i34GmSj%<__JMT}= z>%XdzI})iu^UCQhG3-%Qf#=ZeRpkZM6~f{6%=Rv(hfkyJIs8DM7sr9~ILNU*Y|en@ zRp`B@T~NoTqjj{5f!lTP%CQ3n!bUHl5FMvLFsbcGvU8jyyvg*=qfRFX=wjt6i#duH zKN16f1FIIZ5>`Fu`{B`xK|$`CxII@tN<(7a#gD0)H6}R{cd}$7ZYE)xB7gxZMq}jd zA@UCxlm+&+u8kMG$0~SLDJ{S-%mnkQUtg>`Q-}y=gpgo1YD_-}%dhS?3HyRk=BHW= zK%P*vpAXI(cO7R>{oc?28Dfn_ZH^NB^U$M7adFyFUi`gIv)7~NtW}?Q>AMI03N2HC zWVBmY%mv$Y@Jx9~`aAC2tc}E8|NSvLxXOC{vBwiCSY3!JxgK|5#yv3=1uktX4`B*p zThoBW&eZxLq9*CW3>DxBS{zqHgI~phYo_Yp;eJu}^yLETA@~QqwA%%Xy|gzMA7w#! zAEQp{lJsZ(9IypKYb9op4h$1Kt%!7q;zN^;BYWe!BEuS$?HhDElY#jnijd{Y7a>y! z;N-NR20N({Jjt2lssb((@Yjll$ZL#vd!2^cQA(6RU*{o`paz-e#MG2MRY5EDZR z%djic5zP9ky;>`}8K_Yrc{?#Yzwcry1PTakj6JxXC4t)LCH|1P^)q{y_(J@F6KXY_ zS{wq%wv|21Hg@xuLtprAQbAdyJqiA8YaZZ_Rw5fMLG&#(w}f5qMt^A(EPluhwzA-s zYI+u{XlRZ#bbnx-!BU2%{_*6W&l_g=gP8|qm&YDkKN=vAe~Ux||L}{nN+o`6C0+$R zrHmH9xHx?gF^lt?Hi^XnN6fdS^%1Va}}L|0`j+1^)>-w-bw* z?1uOE1U3k77e*~-jZdsCUkNgxRcWWFxhcO-a=Bz(0xKe zel!$b=EMK}Oc?mlQ21-M{~ynUfgcTp{~2}vC(H%@|Ec>wVJ`3k>b}I-DWc_fTUjR+ z7~TnS>UFWIUZej#CbeJ4$-nX-`7R9`sbNsEzy0z$g`HpCWb{=RA-<)x@!2h3!Vw8D z;++-eUmsA?xS)_+WRoG<*e&;M_%eR5ls6EtVeR;s{-%FC=`R@s5e1em5G208r{VEv z^7Z2N3q)54kDf)XUF;85b>Wk31!5WD3FGDO(b2A@1P(@GfZ0?%+F?D&@rtOstz=?tHE z7HgKNwISr<&X2qMZ`?#<r+i|7z1}f@;Au`>RPS<8^Qm3QuRa!S(CsV; ze4j#mY%Fi2qfCKDYA8N@Uj>Ej5xsx-0b)!fH0%5rHm<}s>Dw)wbz5TtNuHbBUUQ+n zz~h6pybAFMM95YCgs^u*geZTg?2nBAFy%J#otf#@StqkG*r}0R{3R3jvyxvm{Q0qx z9IM#gZ}Rjif&87fL#LWhgVqCau)n7H(?a038OsDCObmt1X~*Av^Zrk?}RF0b&n*_x&+L56gwGw;CoL$I9B)ybcG?up_n^!%nJU@>?g4Ww@n7_c!Z|>M34& z@p1QnHGgk69E!(^*w*sD`tgrzB*v?K^;bDz>Hf>}hsMKr<_3&EKAh`~yaFAjI72|3 z`Bq-B>lz{9t~>>Il~^;;tqMw(F2Zg$d(b|%j!3%kjtfJrQ+nIKg-XppV59{;G*W$h zk;@(V1Tg>7i~4P|McmIwcy~vLiYh2ux+Qn}W97O00T|$+Qqnhx`{TKj+bguE-ZzUq zHaUAS5;{!aFEz((&0Sh5q5^;&RQpuHJ$({B=;-{Zw-E4 zkgCKPesWq7{kXk*ox&bVhq;gwYUoA2ZEzZw(tL8N-iWo1Up(7Rs{m`l%=0hxW|UYf zM7w@RmNiA|)4=-5e;h&j4P%dk9?a32YzeU8GG{sT+(dcs&KY`y5&w(SxJ^(>7!kTB zKQ+tMW=C3X_fcxiR=kRVI10<*sZVsLtZlk1Wxd+dc+=xm+7Cbd)7xY`oZpfS10cNS zmXJG#gk8u;*d9$EIkfK;56aW^uI(pl({7O7+>XHbr=-M=W}hz1Q2ijC*--u#wEOcS z->gXSl$&mTg11Blp8k0YhjB>&(^MLgQE}xQoVm(Q( zH_+A5?F0&nNFYN;O7MS>csZ)-RZ1sme$kNW-o}OtfZ-%#24EEtrHDwQaL{6= z5W77wGMn6d&nch0n(U}o`LWvcD`-EVqGq6d8_{3Ixwp~922hQq9eG;NaA>2vhk+FF z)@f}~p*qmrHuga$K&3AITNC&Pb+%mUI&z|$6mgCilXDyM##sK%zT+h}@-nj~DbP@# zCso95ZMVb7B#*p{ZqI*aG8PV?SRx6c3M)P=G(6>v6T&gyxf0S zF5l>I0^2%6Io=Eemm2JamINOb`>We|;T>@Xw2kQ%zVh4Ejvhv>(wS60Rij|YQxO0Z zz`irp>U2|$%xuJ2Aorl<&nDgQOzb-*sD4T-0*~6Ohw|PwmlGlnU1`a5Q{`EP;VkFz zLRq#gD3gSpF_xF%L9c4i4!y-ZFM2QgyCgfWYNyn68AM}x{*HRf!0GRK0%$+aUVC_& z5P|CN3T;BdP+&^{>wDR*_2~vz^6Mgt(9p0Gclroxg=!hBVii;8>cii!pluzrsm~#_ ziEDyn>s^6{);+tRDO!`Zep}F__}S)kZBMThIRvK=Bt|Ok zlL?tPAg%}_TSChxqLa%9< zZ*qHUr>*()_WZFYBd9;wI@Fc#^+-uJtE$el+PsRNYPaij(}}gSR72l%%KNyD6~a3e z#mmz;_h?1Ti_ejgEMDg@8c;ImP{Vz8O`Totwm%kluTT=Z9+hkV?4cpA`%z2(xz|U2 zgz#%HLJ=~U93IEW`q`DdM#c3b#bHFmtP?mw#ItR`jjeo(l^j-k8%^8DV*BOflVRE^ zP%tfhYn5K^w21EnaQl|zlh1)zVfj_J{IzdsiT5WHI?7sn9qsp^6#^B1>nViUx}rs2JEw4t(+Y+Eh6L^XDzUBAg2RzBu;6i zBjwwzHb0-A1@Oh8pm`-IwrxJb$)PT5WiUf*dUjUYo||)3qxt?%KYf$o<%}O*x_SK_{5%narhU9zbl%hX!0)~{^i5JeE6n` z^{-!ik{$oz@GlO_chdO}|C|qM|51@v^49J3axge+{*&HM{6DkbEDz7%CxTU+yH8h)#sbo-7fg?90qh zvNOsu)|n!P5re@nV`iS4q9f<`oZsttzR!QBKYHEun)`EK*ZbPu*L8iOLfPIuV#}kQ z0hII4YN}lt@88yL3-=besiyxR_0Pd4Znp-)K3qNhh!_6hhEr^^Ah%7t7r#Pk{fDpv z7hKf1WlI|QD}}E=-?Qn!S*3@M zdW)Tr10KW#&z62Pivb`T9JlW3m;B|R>g^31**0_RUU~>L;*1hhp3o*+`Ye3xt@R&W z7)0A{bbc|f$gQi_xKYAbLv@vf4B_s0g!=#b_}WzJeBp>50WE*}Dbr>MqlaZR%H zp?+*6GF7My1+L7-9d=bZqB5NMwtxNY(oeOw+?6&^dF}qv_2S zgo^qP|5dV$Y&kr2{ywAq+K?nVy^l&%N|uy~-6C(_(DYWKTWduD;F~I~7dNIfMd{tJ zAU%zI9UnXNd(I1oBaV%c%0u@Zsozvx(OGruZ=~JWf{@NXrakxP4``NtUvNoPRAz|V zEXHTZRzk#1;jH-R<+Huhwt5R!dX<+&09Ivg^$G0Dh{2;~rb{tcf1qU(Njk{%wp)6W zMAH-h-&cRO{BU&d?gpKO>drJvg#(QtrsqGND>M37q||K?(B%>FlL(dvsiSG05R~5p z*^Q7yxn0&|weM5B*mrQ3@Lzr5KY^}Jy+pq^HJo(V9&e)T*bMJr5PU8a*78Y?v>y#u z2v^?m_O1GlFKz(w@87+oj1ul=W!hZ3aD5dh+M`s+_$3Y**vPN@u2>)Xi?|yC=QzKp zpk^l0Vz3PV3A&r0e$0WUJMl7b-o!L{am|A=en$GS@;2$82aYSPm~Tm0;e!XG5F4gl z?`3KOC|Bud?)>-{PjBVCaP)o?ldmT}i=QuR@w0z)YoRdj^$%BFa=-GwvAtR|LV73m zqPbRDV^yPHt>B4$E6%n2&8x+?_3avn#gelP^(N<=T%QG#&qO|4NJ3NYGw+#Be~(uEch9?IpytgSc3 z<+2L3jgcV}JFj0uRLbJa4HyeaEbl^`rLQ5i42L?6-=*;7F{y&mV)puQ5-7udGK@I{ z%i^i{v_;%Cl%;?9N5o3}elW`POy+0YI#BL$IXKOm0vvF`*7Bmpqs4@dUV=b}XFx&W zNy@|iVz+=djuQ)BlHqB0rTL0(B$<)TjGc1O42oF=m6p>>>;zf}mQuw56_6r28Hy^T z4G)>ooN57Q8?r2C;KG&x%I5^KpM4=2O%LB;y>-(w<+-j@pHXet<$l-3qZDVaL}L-< z;opH;-!U`7$>_o4u}sXMTlbIHusXCp9|YGV+`}z{*`zK?sWHeM7aPw+_i`F;rOLH< zmAVcJxFMmlvD%)&(jp1@*RJ+^k+Y%s6rE?>Ej=cT3{PbCfDpDBRcW6j2a_*g8u;`A z`MXWde40f9j3?@M2@45?mrmv5MZqVa)3awI6zZoe7aEKu>kUL@-ds{T`#o+=iYn7} zhr9FtXU5a@s=lwYgTx5Hq} z&H4csoU)r*Q#s~Ve;=Lsna+2g4Y6NCRA%Sill}DF_H|*~Hx1l~)lw#1=-`CSza^d3 z^SM|^#rsB>lc@lUnmvERq)B>IN<=ckt^btc-hfu+jTM$kcw+g2^{v;z1YQ(7Nqn}!E*id zTAP=9=R1qhveHWOla-sYXUA|nQ6arjwfx3~Qn7m)Bv7Y?r(4R}#YJos zq#Dm&K8rio6D{KVnqNOG)4?_ z!q2q=+`WuZT~DK-n7HY=!PokBfdixSjZ?F!RWh=P^gf~yB_YA(%b!}iQ1%$cT((o0 z*qyh*F`#RVPN{#|6XB(q^r2oPsp43e>}t#zo%$pWTeuDrZR@lWURQezh2g<+Bpt-w ztrlO0w*~-MuHE7<&tMY9A!$>tb+v zmHu!tmqn37zZYTH%+peSJ`?HGHM zrJ!u0Z2p`%;}@X;480tqID_}B7!;UwrY(p^0)lQI2lw9gpX<)R5}RbO5|C1nl@b%1 zSJ|1wPqE7nar%yp# z6P&w#i&7YlwK<)uIRB;FK1q27PbaXLoR(&GA8pS2RNQ$jA9>R#$@lw=+)8Py z+`Pr9Y;?GjU8YnIg7O_5as!g+%y{;8_*U-t^dnqDI*21}IZb@p8>AemT+rz!r4H3V zbvI;6{4AU`5QaGFS&i-6#o}#iiwGTdyd}zw>6`hI>d7vNov$0}Sitp_Ih4O1>2?IDNViBIMfr z2CnVht-KOknVS)*q~$AssIJb2d&g)Y5wcr|inVv!xS(5j{z7sDhAVNuSP zMBNyj;~jWe%%_ zh_eTfUS`adR%0KUtwvb7R&q{Nn7*CQ^&4Lj+kfUwhuPyMBL_DNL|PJMMPU5~``B%ag4}j&r7N5h^}GI2-XDxLJl710017neX;6@Z9JcL?4o|Phn7R+AKV@elW8$& z|MNzFSz(VGR+(Ou52jq>DN~v2h^3N`B*TU-{mp3>{>2AnHKuOx96NX6Fwm6ZcawA_TzZNlUL4Tb*vrbu5sa=M7;xm(uqw7%5E^D)K z^1J*t_KgshP8av}MW>csZxb+#pS_sK8uGNb*#9(O`edhAaienu>fy1BSMxIOcMa+0zC4E_(o@wb=NyGQ1!GUC{_?YvkKy^6jQHFUhPkaSg9M`N2yAxYQ=Wv^r;-~2`pfMKe2rq&I z6ll(MALNzcEBaaypj&ZbETyTZ&>>saq4N^N=R;`LJ1%I&NybcDwwW`^eJXg0;`wT3 z&N@H;P4meDI-ZL5->3%ojb9aO1oKB9dR(*aW~ZtBqrUcU0htV=eTP%mUP?txcRPH6{GRjwSpQuziwpb*YEeEG>76R&N)Lotc;3G?-x4u z79ApR?2LX>J*)5fcy|P5{yk)uwAh^9YVQmgFr#W!Hq7$}@}>oLXIeD5nNNgM@-)`rn?6bVc{?az{d8+E#UFmpKh zpngz@h2rz2W9SZNb)onJT@ud<{*+rBgfa)~RMU?a>}jgL-w2d6f+E)>JaufbztyHI zw{yz|F8>h?qObP2Ly&!NwfU(}$4ZtHc}#@orOIDYaN9)U^?mnzndkcCU`ctF;=K(k zZ`QO*Tk~ja`GQNvz?_bjRsXr2M!ib7oFYfmx4kR`Og)irw9x`)pK#M5BZ>rO&8a&{ zt%?+3Bn75Y5`fclYIh7J)9*ACCL@OG7n74n6hgHJ4pl zG0!G!!wI6sL+l-20v+$)Ic11Qlfe4oDYPPPw_l-8l~?4aR&fQ~Osd}`G+#*?2!*s{ zhxzdX^u;V=R2CWaxs(tvx0am z7-J3JN15A(A6RH&ucr!o5~B3K;ZG%>OsKx^YfDMh~kI! zd79$A2F{AhRQ}<3N;Lmmo_JyRg%H44DQ3;Y19g#J96zq(usf3K@G?bbGX&b>rM1*E zj&j;163RtyE*!~lwkR#^p&l&D zYNA;1u{TuB9v(NiL3!?VgupaA+K*9B>*o*7Ug5Cg+>!I-5qk>-Yn7#s)8>==h;TCA-W#8+qnX zU&?y3*fER&wAJul)?y^-t%Gy+9KDg5R2x7aoqC!k&@qe;zLzwQ8F>4y4Wp?lKMxc} zT=?9Sp)&jO^{ypf3TkOMQM-}WOjvAAsbMJ+7Fy(;`wP!+E~bCY$F_P5EL><@&Q7V} z-eOose1&)2OayZzBKnOOd9{N#d7)}?(5*?T))0*@IMcK(S27B5a4s_?UG_me-H@k2 z(@T0{yf4WqTX3=y2&LUYRLR&fiNxH*UVNwGMDBpY`PW?eZ}@#iQZ$;c?y?)Ok3*v7 zdR}wcfA@7Bby_H9KJ?I7gx{CLoTwb~>;?N>?@u|6MKAMmQn;@emH^V2vACr94&lF4 z-|bC2b>@CkN3s>?x8G0(Qq%kzfi%CdBLKHBpdk#n2{ZLZE)?(WDl{bA)wk;iAqpM5 zF9dq@B~flVEs2nyJ2yuq2r!Ri$RN8eGv1off)K7vtZ@Tq?!+iVqiitOH!FxW@zCOP z^P*21<@(~6Sv7Wnc3fDrzAzi&0)`|*z$3u|@XEA%*iUk*hX`dY0EdXi6$5*hwE)?I z%T>Pn0v;xWlM4~cx=g>8B)Tl#mm;Cs1Nxvu1*~a{Fe+v>^KT3^<+2@^yerMANvS?gzy(WF#@$LKn?50qCyfNl29bUH*nyHUfLBIqvA574srQcm zQ90Khp9)$BGFNcwfmV}j+SF|9)iYT6!7vxO55;&ePo7W_@BJFIfBtZ;P=2kT?~E*S zD!+Nk*{|=2V#z`;C@z!RILT}sw*_R!=THw^6?j-ST3eX6=`&C9ZUsV^MxXw-OXz@wM^N!QJHKy>2I_; zCN!x~HDg1_yQVY^5P|39OzocrXd*tlWrLpTTR$Uf1xvf65E`9IP;>iuNX_>3H~NZD zK45p(x3_4AAUP2=p5WC9)Ra;ez1jpiAQ%TCN6IDO29k>=$uE9zWrnO z?gT*>BB7=ujve2EFE^hOTdQO@QC`Y9Fk{qJaLr(LL<{OuH+P5Aj@Y9=$e-c9LYCVO zwx+8JE4lqVU{1f1yRV1c9%zvGy`TZfb&tDk-qS)fQX^(T(0SCNgnHY?)3T(PpFr_} zhWhu(A<3NA=6nW&JBTfWK5oJVkeyO^;*1c4Vf#x5RWciK)zi4g_^EKuCST1Z-f|C3 z`_;br6$}%Ar@jx3T>bhy#QCy%@2@= zP+$)v=v~tU_VniC#e@J2vT4()JK&(|MJ>I_UPa~$cU4mryO6nK-+ucyJ0Vlq)>E9? zL08T%`ZtJW?7&pXtQH*YeOGM`a_?W~)!O$GKk+4q$*6t3prPxwA2689k&F^UMwCHk zUL-YHR8WI!S(%Vq-Z#iTQgUMS^u<~1tqSDwsvD^>1 zi1tc@2M)ixEu!>!TSpvWahPcQXr{%JmE%? z%%~fkQJJ(Z&jEX&@aSgJmZBTo7X@xsZal0JctK4qVB!#$cby5$jF%rwB`2itnaJPZ z<-vkb3Ih9TARqUGY)P{@?y^-ET}w;A0Y7}k*i#(rrz{9tiW45h z8Ipg*E~LR|X{1F87WT%{yxrr;(ja0!>!SIhSIQ)Oa(4dZbTMk&kqvRgI9l$<=&eVv zu6hqA{2tLiEAi#exgz89K_FwfD5@hk^rC&~ctf-7d7q1TCOf9=$`=oR|7*N|+&VFL zNQLwK$+0Tw+Q+&-5cR^Hw=0J+pku+{~b4w%~kG zp?{!`!f@AVZ&)d-kV|4QRDP#k(&r4FgDNF@P{s@%0P@0fEoZZgn=O*(S~a+G@L*$P zl*IUIPi)CD9kobY>bD^kxfRn5*PEZoc3inHV1xoYiQL55SN4Vw-|oh&!{PGJsnB0k zEFHUcS7rTZi_*5Br=KF{f~EGf6dZlLO(v!3oN>!`XXKhuEdXvJEI;>~e;ht1`k8s> z&nwMO^id%z1$L=O9o;QI+YXrtmUi4>YyE8fqAq1~{L*y4ALFTJ7T7eRDttp?HFm&< zk*rEXV@Aozxh@QX({2E*3o~tS`y;BJ*I>Q`lmz%`C!+BPImZD9CuM6lBC0W4PB`|M z=UDijC1=manKeG9&wMP8u~eZ_OUYPoRSUagoK`JS*Sw-tT!$a2Bk;&$kG7}3tyv9~ z<(c02zNJmm;$Npt!1CU#?PeF)|Jh8im8GhONJ4pd_U__aMP~E{g2VQ0^-mwo%`Ke36-W7iQeZpe34cq}8N!Fb{x^6-GdqkDVU+n_ML}i}p1n|>f zt7`I08#PP@p6-19>zMXCNgiK~*RR4}mHXIHPXl61aR{=n$% z9Po5M>vek{G3bqQtyK|#<)_P#zwxJ=Em4SI(>D=6sg?#pESA)@t|B*Z^-kdPf`MbZ_WLKO12+q1Lni5l31DzTXntk z>PAQ#NbU5v^Vhnxnd6qh((MY0WsJ|xbekixKNevBpw8$5d;Yg;5SP7ybRC^bh!W{P z;nr9cI=dlaGWN`x3=EpEHB5D8C`~IOVEL*61m(ZYcED0p=5uM5HfpQLZ+aJ(-ggm- z^qnZ>`TA_qt7UBw*vxVK@NR$aZSd!?2(&VFDypQm}kxQAtpv&m^S-#JKX37yRo-M4j25l zc(E!Soe6l1MXAGEWcdWmaJbO>r}B_|{vd7omj+Etq6WhC&8a?O5;?4QF|mTb!Q6LzNd^Y3F~d>iE7w{fMwTEs61C8cJt1*2>cHN*YPbA1 z1%E_^+)m#tYgz68Ss@Nhs3jX>q>W-6^BjOE z`%h5VWp0q)C2_meN+sDsgzQzP}2s|n>+RV@29m82pRZ*{#YL6#h3bqNE1-Qh!AiRrdtlE zBhC!xmQUOpa_C`Oi!nHSRGlFV?Ld?eN?Z(J2f6)yCx~uINpx0Om=(S%)h~EI%6WZiz)qzTgdC6Lu#L9rL=UGc))hMhi%! z&-T?4nE`oJWFv>&w)|Q9hU(4H+nOWIpOo}EmFJLY(k`S+e#J*S3)c#?k*$&Y0rMnG z0}!T7l!SxFrO9C#KBJ$Pg_3TJyAQ{dOKu4zvWtl5St43Xu-q2H(Ct?y!w@CgZ!Ibr zFFKX2GTraR+$3IgrtO0<5oY>ORhUK&2K|EI27`7{urXW`PLMbY-}IKKZCNMhtF|>n z@(hzK(bA3#QHkL{XC{32?a z1b&9w%!dzpTCfD?51vHudsD8{niIY3zO<@Dj3i%d;lfp2(fq!A`19QZA|(UHh-oaG zI51Vh65{3(yso-4bE9nX*7n=Hn);i*{p;BIotjDhgOB(;88hw*XP<*3AsEtFjrJ}5aC6E7FkMAiQqyK_(+1`9o<#D8w`##`R;7E2VCR|1F{M|YR zRX$K>W*Q_aq0dO?4S3@-=M|HtqYR3@;yDlUoc{G(DR>Dbnq&{{)wl2&-Rnm1RiyTD zX60iARkk!j<%P=rBH@aFtsT4%R1|1KC6+of*biD-Pz#?imraO~4mTla78VIKZcdjd z+wb6M2U1h{tg>wnK-)>^*(tSD>Fk1U#m0)+H-BM!XzPqN^MkZJ3glfmcNvD|e-xB% z9Ucp9JRnsX(;}i)Jy>O_L>&!MUbKpU!UT^QZI_0N7pg=ZP%^VCt zH@}P}0D}4B$R2}DX~u#TuzJukzTnNi7w0It)mBf6`mF5QO=U`3{T>$(gR0G+X@9fA zj~Cl3y<{KL2dZj=t~9w~A72A!7*h>8iDKM}Dlk!QZ@5(|i zbYzOD<~HyGShD6{&biGSo5(AwJZ?R~!&kGzQbQQsFP)VH6W#P6-fCYAVkex<7k&1C zY)BA6mv8ZpwoI#Z$#}8gqS%3gi3v{8e5;i8=P`IiQB#@pDu>!?!U9byl??&jP0HV2 z6XoyZC<@3-bW5k+0sl*;bc26h6O%nu;rRV^b_`_l*7=kDB5JqU82#}$1P?^VAa=po z0?_$zqrbP=Y47SDscXOEgmTY zJRLY-XcB~7czlg|KWsr3v;NbclL`dCJ{lx{)aJrRkltxo1pJ<8Hu8Izmw#srf(vfV zR)feaJ1c0oJLr_mJT>zUrEe~U@XY?L=6XRAc=vxzU}p(-0JvGw;LJk4AW&D$ECz4K zY&u~7mL%+Z=}HuFYv|Q>f{JY!<&aHobKzR!fGSzp?+hbFuqTP5W;5w!g8uPL71!G* zBoem6t*ys|l@o;we;+EXdOJg0cV5#2H|N>Q<|)U5H2mx4j7(Mxl}frVvTMt zUJqBv*3+|%oXW+q$Ami_$3FJx+kuQj>|yXj`#v1Q1`uG@Hrx$a|60*?t3E-ml-YAw zR4l#dp43puWr2pMAoHfXM0cJ)M3IF2Pww9Pr7nKYgFn*2t@5p|NvPP`vUw@g(nKFi&HM1GB_EW%;ML+Xqj=kie_{9aq`rSy_25(SJX>-6|y$21Ftd@3;`e9gd$%5(ZO-2Wc9N(=u-7Wx;%RgYbI_!q-f zIR4wf{?~0*ar)P7*0kOKy3ML*ESJE4BV`qje0PWdW`=Qx3T(< e^(miNn_Q23?7pX9zjFil=j^HTnz`y$cm4|%I>@sC delta 14404 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 Date: Thu, 5 Dec 2024 21:15:04 -0800 Subject: [PATCH 17/54] remove removeonly mode, update tests --- .../PaymentSheetUITest/EmbeddedUITest.swift | 16 ++-- .../PaymentSheetUITest.swift | 6 +- .../PaymentSheetVerticalUITest.swift | 10 +-- ...ymentMethodsCollectionViewController.swift | 33 -------- .../SavedPaymentMethodCollectionView.swift | 12 +-- .../SavedPaymentOptionsViewController.swift | 7 +- .../SavedPaymentMethodRowButton.swift | 5 -- ...calSavedPaymentMethodsViewController.swift | 45 +++------- .../Views/PaymentSheetUIKitAdditions.swift | 14 ---- ...vedPaymentMethodsViewControllerTests.swift | 77 ++---------------- ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 34748 -> 30017 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 34499 -> 29825 bytes 12 files changed, 43 insertions(+), 182 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift index 81c9ea1e53c..5b80f58a536 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift @@ -211,7 +211,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove last card while selected state is NOT on the card app.buttons["Edit"].waitForExistenceAndTap() XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 3.0)) - app.buttons["CircularButton.Edit"].waitForExistenceAndTap() + app.buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 1001", alertTitle: "Remove card?", buttonToTap: "Remove") @@ -279,7 +279,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove last card while selected state is on the card app.buttons["Edit"].waitForExistenceAndTap() XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 3.0)) - app.buttons["CircularButton.Edit"].waitForExistenceAndTap() + app.buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Cartes Bancaires •••• 1001", alertTitle: "Remove card?", buttonToTap: "Remove") @@ -311,7 +311,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Switch from 1001 to 4242 app.buttons["View more"].waitForExistenceAndTap() app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].waitForExistenceAndTap() + app.buttons["chevron"].waitForExistenceAndTap() app.otherElements["Card Brand Dropdown"].waitForExistenceAndTap() app.pickerWheels.firstMatch.swipeUp() app.buttons["Done"].waitForExistenceAndTap() @@ -357,7 +357,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove selected 4242 card app.buttons["View more"].waitForExistenceAndTap() app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") app.buttons["Done"].waitForExistenceAndTap() @@ -370,7 +370,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove 6789 & verify app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Bank account •••• 6789", alertTitle: "Remove bank account?", buttonToTap: "Remove") @@ -429,7 +429,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove bank acct. while it isn't selected app.buttons["View more"].waitForExistenceAndTap() app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Bank account •••• 6789", alertTitle: "Remove bank account?", buttonToTap: "Remove") app.buttons["Done"].waitForExistenceAndTap() @@ -443,7 +443,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove 4242 app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") @@ -488,7 +488,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Delete one payment method so we only have one left, we should not auto select the last remaining saved PM XCTAssertTrue(app.buttons["View more"].waitForExistenceAndTap()) XCTAssertTrue(app.buttons["Edit"].waitForExistenceAndTap()) - XCTAssertTrue(app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap()) + XCTAssertTrue(app.buttons["chevron"].firstMatch.waitForExistenceAndTap()) XCTAssertTrue(app.buttons["Remove"].waitForExistenceAndTap()) dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") XCTAssertTrue(app.buttons["Done"].waitForExistenceAndTap()) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift index 71fa1d51ebe..61d455462ff 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift @@ -330,8 +330,7 @@ class PaymentSheetStandardUITests: PaymentSheetUITestCase { XCTAssertTrue(editButton.waitForExistence(timeout: 60.0)) editButton.tap() - let circularEditButton = app.buttons["CircularButton.Edit"] - circularEditButton.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].waitForExistenceAndTap() let removeButton = app.buttons["Remove"] XCTAssertTrue(removeButton.waitForExistence(timeout: 60.0)) @@ -1172,8 +1171,7 @@ class PaymentSheetDeferredServerSideUITests: PaymentSheetUITestCase { XCTAssertTrue(editButton.waitForExistence(timeout: 60.0)) editButton.tap() - let circularEditButton = app.buttons["CircularButton.Edit"] - circularEditButton.waitForExistenceAndTap() + app.buttons["CircularButton.Edit"].waitForExistenceAndTap() let removeButton = app.buttons["Remove"] XCTAssertTrue(removeButton.waitForExistence(timeout: 60.0)) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift index 74d6103da4c..6ba5d8fecab 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift @@ -225,7 +225,7 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { app.buttons["View more"].waitForExistenceAndTap() XCTAssertTrue(firstPaymentMethod.isSelected) app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() app.alerts.buttons["Remove"].waitForExistenceAndTap() XCTAssertFalse(firstPaymentMethod.exists) @@ -244,18 +244,18 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { XCTAssertTrue(app.buttons["Edit"].waitForExistenceAndTap()) // Remove the 4242 card - app.otherElements["•••• 4242"].buttons["CircularButton.Edit"].waitForExistenceAndTap() + app.otherElements["•••• 4242"].buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) // Exit edit mode, remove button should be hidden XCTAssertTrue(app.buttons["Done"].waitForExistenceAndTap()) - XCTAssertFalse(app.buttons["CircularButton.Edit"].waitForExistence(timeout: 2.0)) + XCTAssertFalse(app.buttons["chevron"].waitForExistence(timeout: 2.0)) // Update the card brand on the last card XCTAssertTrue(app.buttons["Cartes Bancaires ending in 1 0 0 1"].waitForExistence(timeout: 1.0)) // Cartes Bancaires card should be selected now that 4242 card is removed XCTAssertTrue(app.buttons["Edit"].waitForExistenceAndTap()) - app.buttons["CircularButton.Edit"].firstMatch.waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() // Should present the update card view controller XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 2.0)) @@ -278,7 +278,7 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { // Reselect edit icon and delete the card from the update view controller app.buttons["Edit"].firstMatch.waitForExistenceAndTap() - app.buttons["CircularButton.Edit"].waitForExistenceAndTap() + app.buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index 810aa01d43a..c9961149407 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -444,39 +444,6 @@ extension CustomerSavedPaymentMethodsCollectionViewController: PaymentOptionCell self.bottomSheetController?.pushContentViewController(editVc) } - func paymentOptionCellDidSelectRemove( - _ paymentOptionCell: SavedPaymentMethodCollectionView.PaymentOptionCell - ) { - guard let indexPath = collectionView.indexPath(for: paymentOptionCell), - case .saved(let paymentMethod) = viewModels[indexPath.row] - else { - let errorAnalytic = ErrorAnalytic(event: .unexpectedCustomerSheetError, - error: Error.didSelectRemoveOnInvalidItem) - STPAnalyticsClient.sharedClient.log(analytic: errorAnalytic) - stpAssertionFailure() - return - } - let alert = UIAlertAction( - title: String.Localized.remove, style: .destructive - ) { (_) in - self.removePaymentMethod(indexPath: indexPath, paymentMethod: paymentMethod) - } - let cancel = UIAlertAction( - title: String.Localized.cancel, - style: .cancel, handler: nil - ) - - let alertController = UIAlertController( - title: paymentMethod.removalMessage.title, - message: self.savedPaymentMethodsConfiguration.removeSavedPaymentMethodMessage ?? paymentMethod.removalMessage.message, - preferredStyle: .alert - ) - - alertController.addAction(cancel) - alertController.addAction(alert) - present(alertController, animated: true, completion: nil) - } - private func removePaymentMethod(indexPath: IndexPath, paymentMethod: STPPaymentMethod) { Task { guard let delegate = self.delegate else { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index af6082dd479..33a293f8c20 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -114,13 +114,13 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true - /// Indicates whether the cell should display the edit icon. - /// True if supported saved pm (card, US bank account, or SEPA debit) - var shouldAllowEditing: Bool { + /// Indicates whether the cell for a saved payment method should display the edit icon. + /// True if payment methods can be removed or edited (will update this to include allowing set as default) + var showEditIcon: Bool { guard UpdatePaymentMethodViewModel.supportedPaymentMethods.contains(where: { viewModel?.savedPaymentMethod?.type == $0 }) else { fatalError("Payment method does not match supported saved payment methods.") } - return true + return allowsPaymentMethodRemoval || (viewModel?.savedPaymentMethod?.isCoBrandedCard ?? false && cbcEligible) } // MARK: - UICollectionViewCell @@ -241,7 +241,7 @@ extension SavedPaymentMethodCollectionView { // MARK: - Private Methods @objc private func didSelectAccessory() { - if shouldAllowEditing { + if showEditIcon { delegate?.paymentOptionCellDidSelectEdit(self) } } @@ -328,7 +328,7 @@ extension SavedPaymentMethodCollectionView { } if isRemovingPaymentMethods { - if case .saved = viewModel, shouldAllowEditing { + if case .saved = viewModel, showEditIcon { accessoryButton.isHidden = false contentView.bringSubviewToFront(accessoryButton) applyDefaultStyle() diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 4b2e406271c..490a16ea32a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -34,7 +34,6 @@ class SavedPaymentOptionsViewController: UIViewController { case collectionViewDidSelectItemAtAdd case unableToDequeueReusableCell case paymentOptionCellDidSelectEditOnNonSavedItem - case paymentOptionCellDidSelectRemoveOnNonSavedItem case removePaymentMethodOnNonSavedItem } // MARK: - Types @@ -572,7 +571,11 @@ extension SavedPaymentOptionsViewController: PaymentOptionCellDelegate { guard let row = viewModels.firstIndex(where: { $0.savedPaymentMethod?.stripeId == paymentMethod.stripeId }) else { let errorAnalytic = ErrorAnalytic(event: .unexpectedPaymentSheetError, - error: Error.removePaymentMethodOnNonSavedItem) + error: Error.removePaymentMethodOnNonSavedItem, + additionalNonPIIParams: [ + "viewModels": viewModels.map { $0.analyticsValue }, + ] + ) STPAnalyticsClient.sharedClient.log(analytic: errorAnalytic) stpAssertionFailure() return diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 2f06197eff7..c8dc6068aa8 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -13,7 +13,6 @@ import UIKit protocol SavedPaymentMethodRowButtonDelegate: AnyObject { func didSelectButton(_ button: SavedPaymentMethodRowButton, with paymentMethod: STPPaymentMethod) - func didSelectRemoveButton(_ button: SavedPaymentMethodRowButton, with paymentMethod: STPPaymentMethod) func didSelectUpdateButton(_ button: SavedPaymentMethodRowButton, with paymentMethod: STPPaymentMethod) } @@ -114,10 +113,6 @@ final class SavedPaymentMethodRowButton: UIView { delegate?.didSelectUpdateButton(self, with: paymentMethod) } - @objc private func handleRemoveButtonTapped() { - delegate?.didSelectRemoveButton(self, with: paymentMethod) - } - @objc private func handleRowButtonTapped(_: RowButton) { if isEditing { delegate?.didSelectUpdateButton(self, with: paymentMethod) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index e4831aa59b2..f16823b3e5c 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -70,10 +70,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { } private var headerText: String { - if isRemoveOnlyMode { - return .Localized.remove_payment_method - } - if isEditingPaymentMethods { return paymentMethods.count == 1 ? .Localized.manage_payment_method : .Localized.manage_payment_methods } @@ -87,10 +83,14 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { return (paymentMethodRows.count > 1 ? true : configuration.allowsRemovalOfLastSavedPaymentMethod) && paymentMethodRemove } - var canEdit: Bool { - // We can edit if there are removable or editable payment methods and we are not in remove only mode - // Or, under the new navigation flow, if any of the payment methods are cards, US bank accounts, or SEPA debit - return !isRemoveOnlyMode && paymentMethods.contains { UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) } + /// Indicates whether the chevron should be shown + /// True if any saved payment methods can be removed or edited (will update this to include allowing set as default) + var canRemoveOrEdit: Bool { + let hasSupportedSavedPaymentMethods = paymentMethods.allSatisfy{ UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) } + guard hasSupportedSavedPaymentMethods else { + fatalError("Saved payment methods contain unsupported payment methods.") + } + return canRemovePaymentMethods || (hasCoBrandedCards && isCBCEligible) } private var selectedPaymentMethod: STPPaymentMethod? { @@ -109,12 +109,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { SavedPaymentMethodManager(configuration: configuration, elementsSession: elementsSession) }() - /// Determines if the we should operate in "Remove Only Mode". This mode is enabled under the following conditions: - /// - There is exactly one payment method available at init time. - /// - The single available payment method is not a co-branded card. - /// In this mode, the user can only delete the payment method; updating or selecting other payment methods is disabled. - let isRemoveOnlyMode: Bool - // MARK: Internal properties weak var delegate: VerticalSavedPaymentMethodsViewControllerDelegate? @@ -171,10 +165,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { self.paymentMethodRemove = elementsSession.allowsRemovalOfPaymentMethodsForPaymentSheet() self.isCBCEligible = elementsSession.isCardBrandChoiceEligible self.analyticsHelper = analyticsHelper - // Put in remove only mode and don't show the option to update PMs if: - // 1. We only have 1 payment method - // 2. The customer can't update the card brand - self.isRemoveOnlyMode = paymentMethods.count == 1 && (!paymentMethods[0].isCoBrandedCard || !isCBCEligible) super.init(nibName: nil, bundle: nil) self.paymentMethodRows = buildPaymentMethodRows(paymentMethods: paymentMethods) setInitialState(selectedPaymentMethod: selectedPaymentMethod) @@ -191,9 +181,6 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { private func setInitialState(selectedPaymentMethod: STPPaymentMethod?) { paymentMethodRows.first { $0.paymentMethod.stripeId == selectedPaymentMethod?.stripeId }?.state = .selected - if isRemoveOnlyMode { - paymentMethodRows.first?.state = .editing(allowsRemoval: canRemovePaymentMethods, allowsUpdating: false) - } } required init?(coder: NSCoder) { @@ -216,9 +203,9 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { private func navigationBarStyle() -> SheetNavigationBar.Style { if let bottomSheet = self.bottomSheetController, bottomSheet.contentStack.count > 1 { - return .back(showAdditionalButton: canEdit) + return .back(showAdditionalButton: canRemoveOrEdit) } else { - return .close(showAdditionalButton: canEdit) + return .close(showAdditionalButton: canRemoveOrEdit) } } @@ -244,7 +231,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { } // Update the editing state if needed - isEditingPaymentMethods = canEdit + isEditingPaymentMethods = canRemoveOrEdit // If we deleted the last payment method kick back out to the main screen if paymentMethodRows.isEmpty { @@ -327,16 +314,6 @@ extension VerticalSavedPaymentMethodsViewController: SavedPaymentMethodRowButton self.complete() } - func didSelectRemoveButton(_ button: SavedPaymentMethodRowButton, with paymentMethod: STPPaymentMethod) { - let alertController = UIAlertController.makeRemoveAlertController(paymentMethod: paymentMethod, - removeSavedPaymentMethodMessage: configuration.removeSavedPaymentMethodMessage) { [weak self] in - guard let self else { return } - self.remove(paymentMethod: paymentMethod) - } - - present(alertController, animated: true, completion: nil) - } - func didSelectUpdateButton(_ button: SavedPaymentMethodRowButton, with paymentMethod: STPPaymentMethod) { let updateViewModel = UpdatePaymentMethodViewModel(paymentMethod: paymentMethod, appearance: configuration.appearance, diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PaymentSheetUIKitAdditions.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PaymentSheetUIKitAdditions.swift index 270d7230563..a5da0ebdb81 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PaymentSheetUIKitAdditions.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Views/PaymentSheetUIKitAdditions.swift @@ -158,17 +158,3 @@ extension UIFont { return UIFont(descriptor: descriptor, size: pointSize) } } - -extension UIStackView { - /// Convenience DRY method that creates a stackview for use in horizontal "row button" content - static func makeRowButtonContentStackView(arrangedSubviews: [UIView]) -> UIStackView { - let margin = 12.0 - let stackView = UIStackView(arrangedSubviews: arrangedSubviews) - stackView.axis = .horizontal - stackView.alignment = .center - stackView.directionalLayoutMargins = .init(top: margin, leading: margin, bottom: margin, trailing: margin) - stackView.spacing = margin - stackView.isLayoutMarginsRelativeArrangement = true - return stackView - } -} diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift index 8e832a296fa..5a4a4f8ea1b 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift @@ -103,7 +103,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { paymentMethods: paymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), analyticsHelper: ._testValue()) - XCTAssertTrue(viewController.canEdit) + XCTAssertTrue(viewController.canRemoveOrEdit) } func testCanEdit_singlePaymentMethod_returnsFalse() { @@ -113,9 +113,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { paymentMethods: singlePaymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), analyticsHelper: ._testValue()) - XCTAssertFalse(viewController.canEdit) - // Should be in remove only mode - XCTAssertTrue(viewController.isRemoveOnlyMode) + XCTAssertFalse(viewController.canRemoveOrEdit) } func testCanEdit_singleRemovableCoBrandedCard_returnsFalse() { @@ -125,8 +123,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { paymentMethods: singlePaymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), analyticsHelper: ._testValue()) - XCTAssertFalse(viewController.canEdit) // Can't edit, merchant is not eligible for CBC - XCTAssertTrue(viewController.isRemoveOnlyMode) // Only operation we can make with a single payment method in this case is remove + XCTAssertFalse(viewController.canRemoveOrEdit) // Can't edit, merchant is not eligible for CBC } func testCanEdit_singlePaymentMethod_disallowsLastRemoval_returnsFalse() { @@ -137,7 +134,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { paymentMethods: singlePaymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), analyticsHelper: ._testValue()) - XCTAssertFalse(viewController.canEdit) + XCTAssertFalse(viewController.canRemoveOrEdit) } func testCanEdit_oneEditablePaymentMethod_disallowsLastRemoval_notCBCEligible_returnsFalse() { @@ -148,7 +145,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { paymentMethods: singlePaymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), analyticsHelper: ._testValue()) - XCTAssertFalse(viewController.canEdit) + XCTAssertFalse(viewController.canRemoveOrEdit) } func testCanEdit_oneEditablePaymentMethod_disallowsLastRemoval_isCBCEligible_returnsFalse() { @@ -163,69 +160,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { "eligible": true]), analyticsHelper: ._testValue() ) - XCTAssertTrue(viewController.canEdit) - } - - // MARK: Remove only mode - - func testIsRemoveOnlyMode_singlePaymentMethod_isNotCBCEligible_returnsTrue() { - configuration.allowsRemovalOfLastSavedPaymentMethod = true - let singlePaymentMethods = [STPPaymentMethod._testCard()] - let viewController = VerticalSavedPaymentMethodsViewController( - configuration: configuration, - selectedPaymentMethod: singlePaymentMethods.first, - paymentMethods: singlePaymentMethods, - elementsSession: ._testValue(paymentMethodTypes: ["card"]), - analyticsHelper: ._testValue() - ) - // The card is NOT co-branded and, we can't edit, enter remove only mode - XCTAssertTrue(viewController.isRemoveOnlyMode) - } - - func testIsRemoveOnlyMode_singlePaymentMethod_isCBCEligible_returnsTrue() { - configuration.allowsRemovalOfLastSavedPaymentMethod = true - let singlePaymentMethods = [STPPaymentMethod._testCard()] - let viewController = VerticalSavedPaymentMethodsViewController( - configuration: configuration, - selectedPaymentMethod: singlePaymentMethods.first, - paymentMethods: singlePaymentMethods, - elementsSession: ._testValue(paymentMethodTypes: ["card"], - cardBrandChoiceData: ["eligible": true]), - analyticsHelper: ._testValue() - ) - // The card is NOT co-branded and, we can't edit, enter remove only mode - XCTAssertTrue(viewController.isRemoveOnlyMode) - } - - func testIsRemoveOnlyMode_singleCobrandedPaymentMethod_isCBCEligible_returnsFalse() { - configuration.allowsRemovalOfLastSavedPaymentMethod = true - let singlePaymentMethods = [STPPaymentMethod._testCardCoBranded()] - let viewController = VerticalSavedPaymentMethodsViewController( - configuration: configuration, - selectedPaymentMethod: singlePaymentMethods.first, - paymentMethods: singlePaymentMethods, - elementsSession: ._testValue(paymentMethodTypes: ["card"], - cardBrandChoiceData: ["eligible": true]), - analyticsHelper: ._testValue() - ) - - // The card is co-branded and the merchant is CBC eligible, we can edit, don't enter remove only mode - XCTAssertFalse(viewController.isRemoveOnlyMode) - } - - func testIsRemoveOnlyMode_singleCobrandedPaymentMethod_isNotCBCEligible_returnsFalse() { - configuration.allowsRemovalOfLastSavedPaymentMethod = true - let singlePaymentMethods = [STPPaymentMethod._testCardCoBranded()] - let viewController = VerticalSavedPaymentMethodsViewController( - configuration: configuration, - selectedPaymentMethod: singlePaymentMethods.first, - paymentMethods: singlePaymentMethods, - elementsSession: ._testValue(paymentMethodTypes: ["card"]), - analyticsHelper: ._testValue() - ) - - // The card is co-branded but the merchant is NOT CBC eligible, we can't edit, enter remove only mode - XCTAssertTrue(viewController.isRemoveOnlyMode) + XCTAssertTrue(viewController.canRemoveOrEdit) } } diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png index 4cdea560c9721b0135de2451e5ebd899e6de44de..c29dbb1e17e42cbfd644b63fa12f157b93d4a405 100644 GIT binary patch literal 30017 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 literal 34748 zcmeFZcTm&I7dMO@MMOkFK|tk-AV`&71qG2Ry$8X7lz@>YHDZ^l5`j=fFm#X>B$S{u zNhm_-p(q%7?-0tf(OZOj|9j`1d1js;Gmyf5x14kKoX;t{FLbn2=?}3UqM@OoSG#^y zmxg99l!j)vG3|cv4WZAB1-$HX)m2rZ$!u?|0MCJhP|S`)3<1@JjvZ1i#d0e!cE~yZf&ed!cXl{PljfF}0~> zqWBPaIe7QFi7O4wSxM^eu4@s(R^ZFi_E)v_!7CVq`m>84{NefaN`0>;UL7W!L_?!U zqjvR*{{3AOy$3rlxmz5#ds#S$hL@xI_?4siceym~@)r1tDD!we*4IBI+;DjhW3|QM z6DO_;>l;dBA4`2=Mf;fcI_V-bg)U7r!!wJWiH@7IRcJH`Zk+}yKsz<`6av{3E`&JjERu`4l{b?0cb z8j6ZMqPyJk|Jb=8T4?Le(G;zA?^Z$`d>eCq`_j*VK9ctTMvGsgFdaRL*P!X;Ke%)8 zN~gqjj&?Na!2=!J-6OVYI~RWxpSp9j2NiqwJ{Dn8lu+Ns0Wj(V9TobWqwW14skamG zf27{NGydO|>IL4rQ^mv3XB^&FJ!U>VyPXm{7ve<5m-xi^)sG|fv@D`L`75P{eN&3O zv?;-lMTmV$5n_-(`<|V?w^ES5nCGj6vW#kYynPT2l`~o<>4%^-r|K{7 z6A|t==2nh42-V-Uqg$JR5oNRh@|3C&k@-uNY*N^%NB`0X0maPELp_Yv=k(vpKSUuF zZL0$Xm%5v0E=y!{LD9wT{A}AhJsF^AYMfUfZ`(4&7*LOA%xw16P~s8goV;^syTVgU zQZ&6IVlEUe4hzsI4tOjAWkfJ-Q?~(9C$7_JWA};L6OVtCN6A&Of2T9l9l zR@^Yt-6*W?F??&?$As;)s83TgjcPevpRB2ThN!QkgyLooWBm6x2I-Gb1s#WOci&Lu zA#(qKZ`YJUDZA~z;|Hv`C&hN7kgpl>$vj?1wl6$NFQDKh+31r-x9dKUwD;$bYH#Lb z|J}QTGgAmtC6VrJ*XvENP z+YXve?QKy;RYwxyWu6P?ywtI+ui)0+F}m6rv6po+8zFom)sBaI_dOQrZ76-XgYNGY zI}}xf@(Vdw))}PeT+_~C^6+&kTLOG~?L2CR-I=08g zhIWj`&Hn*;7s{IxH{+n)Ht|G6ukAGR)9tGXhFBd>#PgtqH^t(nq-de&5^*$iDlu{~OUKqk0{7;^ z?*bO!#Ui=#P1!*ib@PBoG1N?miE#UF^1slM>!rIRiK_ZfMFtPuzE_X78hWXGq$vTD z>B7#NpBdAS-?rT=O6g)<8$Au_pf&7YexTi{Q~mVnU*N93O!4s2L3GC^+)H~Hz^*-XHvj6U4}4#CGlp@y0G&~^ z0s!@t@ky@VX-#djz;X8p;`7O!{k)afm8jv;YP&-!Xpf!*P$ZNxBLu+WjE3L;27i9nn ze{QS)DWbn|*Z(z&=q>-ue8QG&$;J}NajSapY4gEM^WwaAX_sd{Q^j^}qL|w%>>*$n1=@!n zGhRxpZ;s9k{eQ~H+k*j!45=f^)M+muId zS}s)evB;o~m?r4tupls5!pOQx6k;s}!CGGZCkWL*Rp=$GwbtkbaISwlpxt%MEcVvE zn&x&T)Gafcj~xf0PhICPg6D(Pf#nI%;r@);b41e09Oi)iX+_@}1;8g#m$AETBlv|v zG0gZs=EHuxP(r;Dilzk=PyvP#rNiTzKN<1I zK3C<>S}cwJDFhk;6_OsUDOQF2N>6?*f0tZM$zu_lDlvQN^3R?@s?kCR@M^r3_&0nk z0s-u2wQle*HNgus0yBrHy0PLiU9gR+Uv!73lpu*pK%&dFgTM1Ybqvoy+VstPTcIR5MMgM&K@@>HT;XD_=akDOM#2RrRQ$^f=W3fZ96w*H%>UkT! z55w-+BkVIInoz7m%<*5$$S=ZeOm7@rA`)%qv@3G^Q5hA`8{}|;{(DjtrHDWDbf=^~h> zlr8u9T+qx|N#@)bQOzQTy!`+h$*<{-ct16J%R$tm^N7sE2Y!JDGbh~KO1EQ9T-kSe z7h~PGC_&G?FI{{{q`XU*&T}OlWm9dE{R8)$%2$WFID95@k8+TS=_P>G{oT^NBl8YX zXT|4&2nJ%C5k;lY=HzGgF(#WmBl8;~!IP)#VqeKE7dJHwxE7^v%u%NNrhNn-Q;Pci zDesmt*SO@T=Q=_L#65Uag%1xVEk%Q88HZ(6a+HkgfxqP{-Fg)&RNSlBLVULBQ=H2GQG7q zopnp2*z%n=*b6eSn=uhvBaW(Nvi%rb$y#dJ(quq+H&&g8NmZ=+l@YlcMxivg_`5QH zU;m&CA<=3QSQ2F5$v@WDaLr8v%BGrQOt4E*ZyOhq>C~NW! zok+Ri&OR{HKP)%xrQDQX8k)<+o+8&qpL=uh!2#K~aR1p1k4R#vwI$ra$jbze=wN>% zmd2VP>QI7Hht<5=Z6RS5}k12>-Z4F6T!k+Sfmn>C->FJ zEaj<4|4NNSo@8`xwg+h{jF?bz#LtDR^%5lZB6|uuCd;OG5VsnGE55teQv<@Imoni` zrHcwMjzc;_PXv8$jkAo@Ds0Ynw}(MKm6$iAO%Xo&ZmC<&y>92C(UrKXt+27s?#|zY zTk%}Tdd1MZtTCH=tA;^#ro#7LRuK!tclI;6{uxS}7mq3JHdut@-`)v>BojAML&n?iEmdNr}=?2M`x3bBYhD?8Fjk%524s3o^1##J} zhL0EpR4a_d77CLr#ir2|UBA{o)}TI;CTWjfp*yge37?WWIRcYz=si<|aUmlGwPL*2 zhzaGXz1@A424S_!dJC0YNM1Th3>9ykIEoLJLfVtQJ{N2l3{xo2JM`{RS!=mXdbuxY zD(J|=n5Rhk9?!CIi>~m5^&jV5czow$`s+8xahr~H#24=6{Tow}7M{KCni-fGW2bM` zy!tRLb+2`RTJ*{Hs&f2b#1Jhyy=NmMIWX^LmYZHtZXs_XFDy<2V?=zW8_MC}O5n^n zbOujgd-i;|iL(~gD`M_Neq(aF_v_`R5lX5+D{qeKI(r<0gr*=z(1Ulf$pt?NvbOQs zn$7Pdtgy{63)az&nZ56J2J#P0d|Uel6uEOAVSnx@m>I9u``{x>^JEMBBz8PIrq!-P!Ab)(M(?oD}4rkN- z8qvH?-k#gxny)Qc{A@3~YsKURuo17D)L@3IM2g~Ch~gmwgS;ts%BI|N*y{3FhRry_ zv{nR)f4pw%mS}YBzmpWgI=uDunY>$JM_VuBuB%>s)wm>;fk0*Qtrjsu%lK9tC9|PN zxR0P|H20h@k=z6;30c-Ga9JN?dxk8MQ$Y9v1Dzumk~S$)C>%nop!W>JOZ>O2QwB|65(cvzy#JWZF8E(1n z^2}}LE)LN#4;^8cDDodKdX2l#-7d$W-PLz7-qg~ZV~`3Zg}kZ2SQ&+^+_F(l8oPKE zE>(%7e`!=c2Uulk#&OQ+g=-3_JeG4YRkbZX;#FRNS?s2%V^-na(Q(?VeOsH$c1>Q5 zu6gw0op0Sw1rm8eU9h9*E`{|-PrN62BAz@$C$t99D8xxUrpEVeK$pNvqQ=LDyYGHx8s;aRFfS-14& zdNEA5()qsTLUGq7T2_zFThE?kAT~DoxBQr$EwtvJbGeK?MJ8oi_ciBw=H}O(4D$#j zd_?oB_l|}(+i8@?yBEQaU&9~uV`$Ul!XXm;meOMNJ20p>O(FL8ac+en81K(a@gMGb zeM^nGlaHg6;Kto;g6a3Fq;ymdv(yf@d`>!v1?s(8wLu@o zu+Y{HOVlVvbIiSb#&5pqwY9Mf`FIZM#OF3j$PmzP9KXwoVVr}ibwv>TtV@K~M1u7` z4IUq3DI2+_%n84QtTU^)1i*U@a2ZbN@i6(B6j*pmlwTceO-N6K?Kv;~O?KcpSGpy3 zq#VP=V|{8&K(!kveDNV?;0RrtZ`|qxsEJjgeLm#Hy7-Yx^7Hkg^O1ts5G^wsWod+S zFU%=Q|B1zFRkyDVR+GR;e8D$RW$y+QXED&RPSb5H?`jvx)xVK=*MBe)Q4CkaJl2R+x zOKF=QSCL=&#DHnPYSAy$yy`@{N#nk82xte7Zy95`_aVKZZjl(&`(H%Q4dMC_Dl_%* z9#LSOJq23THrDMR-Yv7HcjHudXlvkfC7i+H*QQ6fbif#nlblb(dY3lwk%G>H7jL*5 zB?ob8=wcYHr416utKMk-rjJF8)+Pfyr~#}*hzsyUyQp^G_XKmV|0)48)zgpCv1LqD zpo+fXFQ0JbjZ~q_i=K7&aW@~KV{_wG{9?-;W>R>vmA+@B00VpOZvc?nqNm%BNRg`Z4>K$wrPBaFWyIwa@-IsNLUO6+5O~Y>V_HXodt5xUp807Hw8M(I_!XM6}j;BN) zhv;#H5t+uHw*C@OFI;kW4f%uKQ(8XKnp}`h(U?!V>;~|?BZr%pJk!Iv&GMHvEQ;iG z3OH5GQXY#iI(M+2)iWC*vDbN{Z-{Zv9`+R0^LvgVq|lCX?1p0DX|g825L zos$kh)A#nOg80NN2uUAPLUksFvL|8@Ft)-~7Q0o<7|ZgVAxzSRz6G>|d-hX|I=K_}Arn97t%9+a;suhG*q88=*(V3cI^nQU7k^m=iX`)NZ9j)7Lx zJqzU4=9-{mf&HCvLgLuvBKx#l^rC|||9kODVe#ye!&?;G7RmdD>Rveur3iufuwfM( zCz+LJ%R-{TID5n#yS_fq&$xD(p3#;$0m2cMBxGG#?tC3M7L=Z-h-LLaSb@>r$7#w7 zuKLb{bN!krUO(nf)rNY@PqvbPmls)RXy^R{#U;GJ=#&d^LHgP?%Q;7W?Z#%Mb> zln-t|Ps|HBYUHEdRjzUHRM2=aaFmL=tL#8RA=Ne(z?ne+Xa0CBLZ)xM2{41VAwAqZ z5;NMdSfndfwqA}Yzj#ichk=*vBRtx0Y{m$&XcRKeoO1a6)I^P-IZVqSQ3Jo))huk= zaaO>w425&V<+V}!|0%DjkF_YR9UJShqO-s5vupC!Te&1rz-o9eYqJkr zq|qcCRrO6i!h80*0S}W55qu1DH%amJ;?i&!zg?IOc_n!w*&cQ7k5smSL)@A2|Z=o@+Rj+Xtd4X^7?!eq;qv6UxAWeBObEk%=)hB zJv#b%?Yl4}_N??CXKz2VVInV#NR|^H1s1>?m)vRS7tvAZ-jmRh=4vjS2|Eb{ha^h~ zOIb-R_ zoK6B@_#;+t>?_7~Q5CVEnih`NlKlSIFeP0Fou%CVL1yj?S9oO7N)<-$^q7BhAbkQl z<876VJ9`@jW^S~|DWWN6xG*jfuN%`m`(3Cqx0ZusYUb|8sNXPM(!b&C@%739D7;Fq z!07ag6B|m^qc3?QE3&;6j2bTB1lP=s5gUtaKsLF|#I9bb&?Fp>d>#fd0SNt<5~9+m zChefb)1)wYY_8$E%^_aoO`pZM^`QhY1Ja)A=;*6F`HSslEG%d3W#x0`+|#jHhoESC zw(lP*k2sod8mFWOT}%F!9DDB)Qtj2kX=+>%xK2dkE0Hk&g(Mc~-Oi4f5j(WQ;H{oz z1NOQ2ygfqdY#(oNs-7w|F?=Egn`90va_2u8*_6rF9U7W?C~)8go#w_um0%ED%iAjo z&B`ZeHrCHuSPb;+doAbYdEL<9JLA_E2Z96}2k_!CPI+pMWrb}vZG%C~9|yvW%Ek;r z=0h5}GM-}CU&An6=rL%}lseERYduluWkM<}>HFrO!e$b6t&c_8uGD-)T#rI`^Oe_K z05u1`OUEOHYn~mXt}tQv%cptshvR)PYc<6qm4`{NB8%~Y@wNKZ&RY5QmF~#W zALlbJ>5`=8-TgW>^g^;Qx-UGFTWuF&gzAq5+#pf1(ghzzb!da2-~_$PedX~qCm7Mi zrxaH9j^QQR{;FMtfze`MQc$!dOQao)O}E=NLJ0+=J-A!ETbD-<(j30o7!8(mvB8x` zRFgytcY_j#;j+vrWk*Dl%^l2mM1wOsKz!6n667$Ic=A_=V(j3lc5S#g&%WYCbJv7wX(VFvB1%m9iX0Q5PAK`gTPv?03$D;8muC*m-LU^aLzS+<)9CU3$vq{N-KJ zAQnTidPF~9AM~^{H_OMrXDeZAH6bWIVM|z3EJ9GPgM{qv0iX%1}r;b|o2?k4{?(6q!Gb*C2{3-B3K9QhP-7^!;xEA^i-qet#fOskA#%!C34A9qzNp zE}*yA+y@GRWmyEda4&d@RB%1D_?I!g&|c!~CQ( zi-)337S4-=BFIoSAbiOZcWpLwr6)7TaPOV;7ClKfkHIz=3f#wvrpqbW(XiMfEQLBn zpW0jNCNH;jrk@y-e61Tp4I)ZwEgETScd1?STwqJ#Z!5euyZKCE{d<=>WUXbQY}(Id zX;d2_9YiA}uOLu5^LYYfO6sOQ4u(3VMOHN$t${3wqdEFxw;KF;BO-`k$|0EJI$Kyh zyNz|~X`X&~4YW4OKD}(f$2VRXW#6sxoX;sj;TZvem~u_v6W5%(Z-%oG=1kNONx1-u zQLO5IExP#-OjW9irHASvei&?Pb>Q8ljc1h5oWJhp)G9+mJc>_t8^D69pOj-+-hIGf zX+Qb;Dy5duK(jKds4u#A+J8BtmzIwsZH6p}C|>ds&iR;b+$#jMYf&(4Ii+<7L|EI! zQTSTD-4O%lbE&>2|Jt2{%UA?FxhL=hAM@u{Jc@bhG%#o3!Gwn$m-Nir#@EJkAY#K{ zFw9ahBTbDr`Ym$N(cZeWL-RFy3G!<;W5A*25fg1I}J>Uh=BxJ{Ki=8Lf(1(k+d&jJj> z3#9d@I@Nq4viL@BbUG7o^j(YWGZ8AV04a=Cf9~Ogw#xODyW}@U7%d63Ad=Uxj9T>- zYy@I!?{v7M?E!vv*?1QOi4`ncXsIy_5$sy0D;mS}uv{IiikSJ9>Pf?077(LX#ruar z_NrfVqJ2lmD{A;4gcxkk={=ITdakt(!=4=v$)>yt^SwQ}uIn!q6TzDC)4(X$=2}fwPBLIKXH62&W+)oYMFms=8oYsz`W(C?Mv)0os8Cl81Y^-Kl zuP^GCQZ>%8_oAxR_N*M8p#TP7t9s|m%2Yq}cNs@hhn&v4u*7;H7<-DIq2JPvu~$GJ=fbk z7xElS0vVHB%$0$FqEhmu5aRt2Wlrp!ln-!goc|1nf7T6r=vjxXwB-a#tkPZ||qzdfWIeZ0c_!gQ!x=;Hr&55iBL^1j{)ARQcxG zxP+GAP&4%Y08@goOqpc*#iwYkfFw*wtOyDOVwv$81PZhj)4b&OM1<-P^9fdR5QNfi zwaSA%si8i3f|Pm*c?zAC!i%&Q4Qu*Vj$w@7S|9H4_aE+;2=kk;$uF5MFX_BmI0&>2 z1DkeuW6G%_C6uWO1Jy|V*xienQkAFFX$!6O@%SG!2r07gOZ&*InUe5>82W9f$F=EF zxl{A~iK|0RStTLLm;Np8tk-I&*3X#2kN@CONF`1r!$LEim-t;Q{%4P|-Xi_b4Na>qEmu6}xl zcy#*J$O8$4CJ|=N_+D}%k020|6U2Ax{bBg2acZ(IgouyigL<#Jc4vP(X0+(geKwGb zri7{z924scN`I;Z>2#f;oUOGSGe?Q@LQ}eqZRm?+>h#*Qyw)y!|!!VU0Wlqp-0}Cnpd=IURFPS#FC>CCUeumj3W%Ku=)FhE3J#&Ah5-Kkl z2a@nY@*o`ZTp4vIo!z7J>}XKV==ETbR@u^$K5;R$B^BGEwSI06WE16sxGn@j@(c#4 z`PPekPL{xwLUBulIpgL#$*XjawpZ^f|mItzG$Kdrv*%VeuQPcL;9TzmN z-v9jD8S?Rnbc~bq?hMJWlL=1&e$}JmR}=C)@PjEPd*3yGU!sGoe0BnU-*tydUsGz* z+0d+twr8$(+&L-Ka%0RW$3ybI+tt&znyK;gcKhQgW!*{zJh#@{feg2?Tdv$c+wIo083D=c zcnrW&7{+dYV?KY|+WWDM$NLRtnyT(<}+QmKPr?x7k!r8 zk-DzFu(^!e`pg2?5Ea11^!IzPLu`#_S&3 z(0phkqU4Ch;hLK^7LgJN{~ItB1aENzk2BZX=bOHG<%K;+)_2z=nLd4`I!^1+=}=5nQj`oBA)VJ&O*t(#wS|{CC zL($9Ltsn1cexrC?Xq0svTe>OX(t zKstcC$GbpUj)EI_BijyGW11#gZ zHG^~YoFMJUHhhX9)cb%{w@3E92Q!n{%I+UHV8v}~IeeVtR})DS~($k2->2A`Vg-_`GzF5$pJOfcI06im%2ovowd zv0DrbO_65>_)y+gs{xEc!-v!FY$h`J@dOcAh7Buwp1PbqFBW(<`w$X)7-qDrW)iQ~ zYK*^UAeZ6@vjn*`I(7=$yJmjCEuq)5zijq8W-jmA0aA0Wb>wQ5&)UW`0>Qi~9L$G& z!6$nSrj5&3Cf`n2cAx1Ge-sJPb;Q!~Twx~P;uRlRA~ zRYDnK(8NOKOLs@ZZjsQJQ3ePt%CJfTRb}m;OI1ddet+jLzmyvW)%F|H%h#0XEx>3e zfqEMGF5%kK;W#I?qNJspKK2d5ftdIwI^37hP`0z>66a#==@cYLPWcnmS{MiV(S`SI z*L$vj;O>h<{1hGAcWdggUgigfRtCeG-idaN{BV!7@Tjxq5;@}H2Xe2m?7%7Rk{XUB zjz(^t7icjrTTjo(HvQ=4VV<`bH|;yDRKfhraf_OuWyVEShkEX{fFB(9Vn-L&L}2Gn z$S}_KNrEU<{z%30gFQ#S00f?Mo5lR@6=s>PBvxyw!It!9BMm1-1la5i=S~K?F3xk= zsEFktM@vCMQ~eNhAiwIXg_UW)U~k85*_@A~=on`IERZ%QvN%`rt>K0EEv&j7T%-yX zFFSEnr4{yr)L;I{AJUlBB>>kazA7_Vbc(+qW*`2URb&HOy6esbb+reISFF+!HE!t= zY%fb6@293$l~67S3W-ot9r({FhNxs9JFnM^p?DbRovQMYRr~3R= zUDDv$JavKMWN)S4XZe-|G!m@0 zReDgtv(Fird?!#<=C}@u>uN*pMTiP#RUVPa%uDJA*hGc|if!`aJi2*hR=z#TCkT`{ zaktkh{l+m*K%dg04~txiRwf5Q5A0ow9gqYIc=d@c@O(@!h~y9)HnRBtuF4NEId&9Z zuj^=H_}fyc%(8L@v~VRN4R@U1IvRBzjKN(-++8>be&uG_rb-}-=6XODv-ed;c;KR?Wy@8RkRv0Ms2hIiu$@bcF) zk$|vnYw_!YP$28bhnTX7gp0^D-hi9O-`TGy>TU1pSHrv74e>=KPeh)u&Zx}ZO8bu? z9jr>lbUNuFOG%(0eAbq2IwnLA^4ENR8#*;3fE;^=7YZ2HyXetInQ`j*1VIAB3|}sBsdM0W_?uYTczSYOWXOvz4-xHcQ1_N9u zn)LDP3QH)mvdvaPwLW#?dv5&-l#WkQO+muOw*!&3!*QNhJlai$sqoLkV{LS6oO92A zk^`3+(5W4|LGE-3-5Bl+3*8tU*mNhA-yf6TkliQh%7jlAx71_&QGLvQ$i1WYWgKGj zTA#VRRolM=6fo?t$(~$@-^QYZKc|ow}k&AE5-Y*6=ar*f++p&lo8%f!8*2qdv#eevvcPkejLv($x|0B z^DPt_3Knf_1X1?^YSf+JT(+2EA}ff7{)1h9>16-&M=5o=xYLw|+^y4;=3E7fBX-s} znfS=*ppMCml!@V{M;rB=yx}c6?jf-(pQusCyM1Q4#^sAyu6cafAIBoA^X_qUcS-++ zbN;k_miw#`(n}dOTiA~{_Kn6W|NG_ImPJkRdAR=ZLm{_pT{-dkV$OXtaJDBp@)o?( z=L3HbzPS%6Rg`-|<%%^WGW2|iL)x}qhn%sDZ?UDxcriX986FQg3 z$6O=UVXm-hn7j8M%=OcrH}17YlziM`rwmr>p(21J6(wqzonZ>Gm{K09VRMPke_bTK z;}P$@*0`Uedd+@&aqA&!)TCreT_iuTUN`J@@hIAi`NTu6+gO&c-=QFwd_eYYGMBAx zHoi4tmz%{?d#_FNry?-bI&gaB-c1D&xN{6ONB;X*BdTvZYc&=GnJA;xT(;>;<1r6W z{t?~_uBbX4blTZ;*6hv?!v4MP5}DFBxV;0~)22u02*-cJaDbhPaf%bqSaR@gRLMF7 zjUd=-0OBI|psx2fDr~(2Qgq@^a;5$kg^x6{1O|Xk2sF0BIYsi-j)SyQ7oWfW@*)gn29Or4GU;jW&OO3!!k?L0<2H z`X?gpD{w?{ZhGkJ;O)lSP7r)Hpb0I<#>I1!clt z?PlHzj5~Pk5!?3GGy!$ARsLQa_^M6s@@Y%iFYkP5REVEg!%c#|4@*mca<^B3^d|?s zD&sx-_GPfHx0@lPOJj}xfr-C_U;WpZFE$o^`^!qTA$`L+bhZ%%LQMB(HNeD2U?~FR z5Y{5QIQOaa{hn>_59-J6xZ)%LLig7^;9F%U>yw{~yke+t5n=&TfCthW$pQjW>O~L4 z(N>TDbU}WjT*Yl5T(S&MYlPeqY2FH5>H_Io&XKumBjPC1V?Hd8tYZ^(4mxOl8M{+h zqB0f1(qW)%bYsO@hzp5wl7YJO8W-OR4Bne}>fHxo1Xb|&8CZ@LfB+)|ODV*}d z*DI-+s%%pb##+0{I_UKL{(&ne$$Ku3i99k9iY4f9E8O6Ap67x-7RlEMjd-=K?}!*h zP@YX$_5va@TC6mtn{!Y32mK%5eL#KawwAPqd4b1vEITI>oN;DgsyXyo##2xzkRVC!wD*M+-Rbe<=@8hq{Q zHW1u=MU^_GLlCiebmsieB*;8Qo@SD3^;5>8ieJG^7ub4pD%kX!NgRd)B| zMiF1yzg~(-eQ^0}ucBwZ*jLZ7)$Srn8rdJ>XV#nUgIJE0Hh{EcQTix82?D;GeOUJ# zhy4-kG9LO#&dWWn+6K;^{eGU{Z?C(NfitPdC1=0`;D^RuaJmDLgNN-u(krlC#RM4A zAvxrx)Tb@IS6fK6exs{{<+pdi6)p-sAGW{ZOrTJDmWRPc28@xk!`FZ2?^4~);;*{E-$iOWS&Y32 z&y9^D|B;pKcpgRwmm@!eEpO+v;`o0|c2^@xBwt8(HaJC{Pd*V)li zTDBIFBsi&0D+(Do&V0*yn=%SmqWd9VwlMWRvT4I_isH(l6M3rsVXP>WHU7OM-_qAB-p18CMIh>gA1)GD#Mc>X)!%z<*i!f! zL#~T|S~)dv&2N~_dd~5d&Guz^{MWLge=h5^(tTN980u+C?ac4M>dXf`P*4W@EvJUY zb#r2a$yNLp?9W^9*_*{rkf%Cslp+itM)~#MyR|sOC74z=>9x|RNM`A~cXLvjyuq-R zQCL!*=bj+Z=Cb_B1$Y1ab6AqiZcq!^i*;|aPl+=GFc{uuCqIuGJD{*~r4UMpFbI!Y zhzjR$Y5V3xJz@N7E{fX!A!&Exc!@Lo4L5l5huAunlRaAdEPX#4xLzUfDQpnC-SL#1 z;?>5nJ_QE&W^J8ONA^~sx>3%HDS8KcR0V*zdK;?=TVBAE@iAD&c9f~~9g+I+atxHx znB{UMfGM1uhHR1{=`5w+_VL{d+R`!oXRGr6aRzB}J@tFXzew_w!O?legci#2wFCna z`~7XCe)cv`|AIp4`M};HSN}ZN)areKP+$|;Fir_((`H7_S>+q^W~Iw(S)}21L}S0D zaFKthAciunP*%7$L^fMptDD<%P{youhOPxvH;6$Zq z?>)k$d6)a~Mi=CU{;2fRWr@c7#rFo;U2_x`qtrd0h+K%vx4+YSe>y`Ue_kV+sj=I5BgHc(V}P@% zp{&9#K>{LKu&L)w%0Fs+{o7&=V&k>a@+@e~TRNbuQD&9z-PLD@4 zPha-0yK0Ov6==A&u$?4PB(jQfEkejSMwG!*&Vsd!) zHiftn`%gNyIGnjzFT6v}^-6sS&aJnHviY6D_G~xmq%w~v{R!z_%2B&7!H4z?I7O+- zjooac=7Ptl`Qt)Rn-XR|y$lYdW~?|F*Ncn_Uy$nqN9WgH879TDcmo9-l*T{)mvMT! zFB>~n+m>6qsp-DZ>^L+fSibW5`y104jVa}+LHW7f+Ga(j-^4O=x(1wz950@hf$$$6eFI$Ooe-{ z5!=dl!A44$pk}Jpaicrpg3mb_T*aA3SE>p&*gGD-`1VKnXXNta%P>gS@^bE$%kYy2 zh*JAuBh(Nb^u|{v(#EK!ry)5qW^QRPSI0JBV048ryO{JzR4g8(S`6po;;2U*kCfR_ zZxe9F@;?0hBoc_l=&aH=#<2TW6PoKTB$NsTi~YUX46l9TgRDA0fRk#){V#K4zzuyO zF{Xh!vEO21X#b<<_G>;{HiOXuGC8Zq>?)CdKI=CXG6$5(mnS!3-Myw1aCR2%%RPcw z6YEdVpLB-aGFV_7d++xTnR!}DuB7HTcP_3YBnRG&b;y74@90-TRU7Jgwr_z1W)I8h ztCI8J99RK%3cGT{eB&7B0QD%5%tD_hNC_;utgZ5ebGWt)o_OH5)RodSTrb+hFIfEd z%|cNhD%!J1>0yZV@T{L$TOhOgh|x~lE$E?OXtQz5L1S=3VT*$9J3E~^z#mnLKrBzP z4aFl?)f7g3HeH8npQNZf6Pb-K4H?9F4)$QRNA}5*SGP8s6w(H)KapJ$HNw7#=zjb5 zh+&HE$T=jqA=WUF=v@ z)g?H~rv}{`2u5A&vY)LPQIX-~g<+lVx2aB!@} zfRgkahJ6QS`P737Ev@>G!hqG2>fhFS8woaSsQbJ6E<-Dsa| z>l4F$TfhiTthaF|){nKBnqf|NAWp3ZHc(l6jlGY0=syv*zT~pyF)992A@CjWA4^MF zDz0h@H2ZsNp;g~zQKMeo4o*MfTX&))t^+YM;e&hG!!3u!E3)p+r#f`2%X?%((THQ!lo#+qFrK zg2@MZ)@as5)B!~`@j0jGsVBAN!#}+p1Gi(P$oLLV+JuJU^4j0~eEJC=LqE))uf!OGvJbXk8 z%?2@*Yn+rMaJoNn(y8w>O9qGKFPf^ZgOap zGY`fp|lo))^jZ~W(^+j)x!E~RCGLMfS)ilVHn(5=223q)~5toBltzI88tlb`=`_&+HA=-fI3^hCf|w&Ka?dby z3rR62vBZ{6^K~@HK^{hZqR_g|37=lm-cX3NP(t1BcT_+$WV;Wtin3uQO8qrU#m5ut zy9*sN#2nl81-+Yt(!u=;rP3f&Z`T#y$veCR z>ZK^NiJCy?S z>?;G7M0@Wgav40KA3<62@hCGC;4#OXnl2d{lF3Nuy=Uh>x)`KDxwQ{{yDnx0oJcU7 z1V>7g=_hs_IITl1p$Y1ny5S<|VP%Lhc~%G`Vb1o`(nsV~E$ZBRc{B_M4!9hFIsDYx zz7_Des4L-f%K-;CjM?2=Z~g?+7WcnDX`>cHjwy4l=`4P%m2>{#djo5<1DRzB`h7GEek01mKI)T>kL;dQnP2-R^zoDVMFnn{goR3cQI@ly>R{u9b{jjz>pM%N?oJxe4(oToDEHlnDQDRu< zwkaoK_O&FzMs@Ku6Gd=Drhl{M+QWpeGV|Oy^AP!u{vFydhW+x4v}E_`-V&7t2twGO z+ebWtS}(>G({c=7wINYH89hROA~ z!W+52roRjhm)}jO+rzn1F-AQBlM(EDnzEj5RF*zn_PrR~v|*rL+}HHw%HNpwj8IO6 z@27flBt&@H=l`^K?cq$fale+5RO(SFgq|Kl2Mb9#Y($R^lO(4cCX5P6k~2vvQF^j4 zi6n>QR3nTLmBWlFiJVqb#;{?I8}r^%>0!@xy??&f^bY3?qLBr4UbG6GhaWYo=g`H$;US} zzird43-Y&xU75_Hu(Of|GA#=(d~^JHAxvKrD|vi7H=~`0Sbq?+sU&h{#y~2(Olw$ddld@@U)Ke}z7bGMy$^Pas(+$L_t zjFA-5;*}lPH`GeboReTF{z{dD4+#UwC~~aDUfX4E7gLeTdVH!S1Cf1QMnIj0Ag|bB z=~XK>M)-zr%MdJ^rk2`vZ=9KmqE|S(Js;!LaucfpIlV&Akd&%SN=x$&lZ3JrF<66TYt)S!-|JoG)KG`5qXpk;6$OFnX>@h0X*phETxqia2DU2p9 zb5k1F@+nX}WhYW_*<)kll&xIZG?ko|)6*4}>=5iF(#(J{BAd}Wt&8u<_R9#FVcfR< zS~um}$T~muZB$2a>&NDZ=o3%~)~JlGLg~x_PCwJ)bGN_ZP%8~FGr5gsRzlr4`wk#D za6c;nWUb68>XVVPZ!-Ksk>);iQ;AOa7}$=W9UxoOLkTf+-hOGYg@^-n5PlsK_~Ez``|m<`a?EPY|oa)0YKx3Dt8E1 zH{|BuE~|LPy}FKFoK0!@EF+JngQt&VM&5!9{W}K z&s`b3Pe9qdkS{h5f9&F7;zZp0cbUhR@~d{@Gd9lv)!|OB*^0nB&m@^Q$t6jGFO%_s zePeVbCaP>_>^X1WXw4}TGwb{(h~*{Vz%6_D!1Zq2bvdoxBf51nP6*Ctqvvb2#LCOR zkk2!L>QNKG&F#&*5NJ0$Um!seSUm!0tQVo?gG2fV_InTv1I(etV1VgdgVel4+Y*A^ ze<_JXr3F1<@|DKqeAlUlJUC$&$J7US^dw5{g+jvECNX-QQ;kdeD}pab;o3L8S}ny) zAPhY6{#02sKIPrGwFy?{OoQ!f%Jso_L6YNuECZ$Nb`VE+H$Y1D-MAKln2bVL^td+t zICa@L7NGh#GK!0YsUxN>dFPBr0fWc4dhD98BdzsBmt>mfudujLrXf`us_C(?Xqa4paEtm~U5T z6Rn=oE=n;1fhbGtp(&Qq?Q}{8o?hGhcDVUoClKu-`RVb(lpCe&4Ni5LsItJ$@ps{~ zndG~mkAGgTNf?>{#OfR>B9OJ)J^HLieb6XkF)_KH~q0&B*qS>xMQ4+M5PGm=qy(XE6D5@J)=VwJd( ztxf+pSv8B1+Gz%2rcRl~Xh!~{r3R1UX~l|zHHLwgm^oXO2$=5Ear^mzAr`-7&{D zowb({-OOju$8IEik$9w_qSJ4rYv8fjcq~g1qmUDcM~pm8Bw3e?hgQv`!!G-{FnyKO z#!87Bf{{~i!Z^+G{+<-|Az_1|V+N?=%eC^#`BkXtA;9#~ zuZtc}zpFW1P5(>|9IGCc;tt+4bH9Ui|51~mQXH(}eNVl935tYukJgAHnzy2|Ry89g zLJ;Y|qxbRn30q^DeCJ-ner2BOy)a!dVuaBWgY1(F(|a`^B)Z=yxH3VJ%aFA?1Fr?NY8Mb)rw}qrLKDIZecNs)w@x9 zsyAgYr+Fme$|5?ZY(19kG)sD0T{+M;U)C}2z!id(HH%jJT~lk7s(!m(7=42lkdg3gVfj4mt4!MLEqD;S z(lFYO(`jP)e8Tr+Cs(ixf9BhjfPi!2J1*}V+XfdtuHO5U4k&5gN^~kUs`aS&Oce3*E8jXvu1bS2sCJEY8Tz`9560!O-- zwW%z3L%}jXvEe(GRt;(w3@vf2v5_vt=TZ}|@&kgA2fADS_CXcR#sInJFGr*AC>>gz4p(Uy89;xVZUxv-nF!Q-Tu*!uo1wWTF5{Tzj z>pRN4bS#5OJ=##0U2~@f{LzyEnAOvT>SHZsSYbzMsR7D@=&=J+BW^rVxNsr~H+1jh zjIBh264?CyhIY*IeXgxmS=N3>n9nC3TGrmcUGlVRL&ie*;f7lz!xJYr}!#KjTc)$j%Uw+;FAxADI&zgHm;SJ3zBA+ zBG2+ax)dKlKWsVfa$Q~9a+O{e>`I4r&v9SCgG6ELQmtr8^^6v+qhW&>rU987oLoHrLE_ksNUPC{zh3^U`inK8nfFnNrM>`Gzx{Quz zqWic1dwd|$`;51=a{OJ9#if<=TU^?N{{LgEwQ{bJcTV({s(Oblx77@ zu!FIO=eb?rL>eNrN4}@%M+VL!1z>~#AqT3Byvo<2jAMiqa(^104ponY?e8I%dnp>bD-amw7udVOLWHR6LWA za8-IHF0er(ygS8Lr<;sYzPqr^sYi! zIr4xpl+kr6J>R*R88`Agr}WA}ecR0oUuUHr!UlrvX=ItjJPCqn1u$5GDp&EDk0X=@ z#*`~%gHOfh!{5}m?eV^W9O-%=qaT#O8EvnkaRYP5b81&Q3gJebh;Id= zh3cZL?iT{RyeuYL*`0pMzhL*L{Q2`)3aJ&n#Z^b?LfMSMyWnXlYUF9(-mgEVRQvEI zx~y1nc{oi_PR`H<+fYarwT2>Aof(Y47OuKHrD-;G0Y4Yh{=B@+MvK3#e{L>ZB}&Ta=usr6Jx1QYH`GTxa(nMZ1H%nn8rEa9 z3Hq_i6Ur1NV)G}@8pz|?ap))OsB(o=Gwd)KO`{GK&Pa=jNXl#9@qafp@&HjM(2Bjurtx zNi^LF(RRYxw|Aol#ZP0rT{r_rmVz&@MeLWx|Hq6Qn#6Cx53s)%+8{^B@AdT&*1mo2 z%dkC79@2;ma!##4>Ms0dXD>$(mhR8M3*7=cxy#T|v%Va;7QKQTtKd}k4RYJTt<=&V zR)6Qecp7;{E4ur_YquyB#nj8`yzMHt(H!p$(VDW2M4+Vhn66Sr@63l|wrE;97L_9v zGDB}S^sxlZ{U?5tTYk;D)p%KonN$g?2JDj`z~((Y$})Isd;e9tt>Z@vm7)g!dwH~w zw^nh-_^1r8y;bjVsO425XGoXG_s)Tu#SjshpdhLNN6Cxk?A{lvw6sGxBM~LP>{h((rWouRG{mp;$QISG z5Q>4s)Q-k<+f>DPh0s^A)I0`5SRQAa#Q(f$ae2Z}I;Y&Z>MdoGt&|MG0+11Ib0sF= zf~&j=Ps5{d7|q{LGO*;aq%<$^+^a z6Y~)AoLJp}+jHh2?wT~rH;+!h<_~-FRd~^RJ!5OKhpyp9}*T^Ie)D^e|0O+!8i&F(1 z>UZi4hPER7>_-aR0ngfIpIw*F#|g4^S`$H!6inPn7)|Hkr2^u)@Jm8=g+ zm}|pJ8wW%-v)s7+1eapx$0I~m2kc{bWLska_@%I}vq1Mqa4+MpN?+lPZ~fn$8jlOY z6wesF{0}oYYqsX&Xa!5F>;#h#3x~70`*vpmQ1zuvDoMf{^?d?LA*|L8R^Vv3h%}#V zYZshZpwosl3fVay*_S>$zk{@{AiM0XitUikq2RuF`fOG@$;TC>Q0(=+)FTOr zZF#pL)YB`o8vD28fed~s(d%?z{JzZ$4GAJ9Ov+?+0&5%p5d};;+flH&-PQ!AzkHNj zC!(-vMzAXO1>cMxw*fCRn2p#({CMiBNZ19SlNZFw;j=RHBJuQd1dSOWDZgI!i}W|* zbcjREN&XX2FK({)uw&9BRC%X41b(7*GT6?h?m6G6wq9#8Z6!J;4TR9@D9Doe!O)Um zD4_Eiq)SB2ON>F~rUandS+Yy!C(IyWJqWZ2uj7^GpbtN@?t0LVTYUWD;w)OuZ2Y@; ztU%EjQ&@}?ewBC^BL&_{EJh0dk0XUI cGs|xEn_L-N^7m1|<6d&)&~d%&gSOZH2c}7uZvX%Q diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png index 2b53b4e9d6157e96e1db81caf49dd8819af74eee..d6cd8ef1bab2a9389dc655a45796ac733be7eef1 100644 GIT binary patch literal 29825 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 K&2)9Efd2sn!8A(% From ac5189af4fd3e67fbac99e73230d96b9524a015d Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 22:22:05 -0800 Subject: [PATCH 18/54] fixing tests --- .../PaymentSheetUITest/EmbeddedUITest.swift | 10 ++++------ .../Source/Categories/String+Localized.swift | 7 ------- ...erSavedPaymentMethodsCollectionViewController.swift | 1 - .../SavedPaymentMethodCollectionView.swift | 5 +---- 4 files changed, 5 insertions(+), 18 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift index 5b80f58a536..870f59e8368 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift @@ -311,7 +311,7 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Switch from 1001 to 4242 app.buttons["View more"].waitForExistenceAndTap() app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["chevron"].waitForExistenceAndTap() + app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.otherElements["Card Brand Dropdown"].waitForExistenceAndTap() app.pickerWheels.firstMatch.swipeUp() app.buttons["Done"].waitForExistenceAndTap() @@ -370,7 +370,6 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove 6789 & verify app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Bank account •••• 6789", alertTitle: "Remove bank account?", buttonToTap: "Remove") @@ -379,13 +378,13 @@ class EmbeddedUITests: PaymentSheetUITestCase { XCTAssertFalse(app.textViews["By continuing, you agree to authorize payments pursuant to these terms."].waitForExistence(timeout: 3.0)) let events = analyticsLog.compactMap({ $0[string: "event"] }) .filter({ !$0.starts(with: "luxe") }) - .suffix(5) + .suffix(7) XCTAssertEqual( events, ["mc_embedded_paymentoption_savedpm_select", - "mc_carousel_payment_method_tapped", "mc_embedded_paymentoption_removed", - "mc_carousel_payment_method_tapped", "mc_embedded_paymentoption_removed", + "mc_carousel_payment_method_tapped", "mc_open_edit_screen", "mc_embedded_paymentoption_removed", + "mc_carousel_payment_method_tapped", "mc_open_edit_screen", "mc_embedded_paymentoption_removed", ] ) } @@ -443,7 +442,6 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove 4242 app.buttons["Edit"].waitForExistenceAndTap() - app.buttons["chevron"].firstMatch.waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 4242", alertTitle: "Remove card?", buttonToTap: "Remove") diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift b/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift index 97ed0d3b54f..e3bab126f25 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift @@ -349,13 +349,6 @@ extension String.Localized { ) } - static var remove_payment_method: String { - STPLocalizedString( - "Remove payment method", - "Title shown above a view containing a customer's payment method that they can delete" - ) - } - static var view_more: String { STPLocalizedString( "View more", diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index c9961149407..005e56937d4 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -40,7 +40,6 @@ protocol CustomerSavedPaymentMethodsCollectionViewControllerDelegate: AnyObject @objc(STP_Internal_SavedPaymentMethodsCollectionViewController) class CustomerSavedPaymentMethodsCollectionViewController: UIViewController { enum Error: Swift.Error { - case didSelectRemoveOnInvalidItem case didSelectEditOnInvalidItem case removedInvalidItemWithUpdateCardFlow case unableToDequeueReusableCell diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 33a293f8c20..2d37e3e7672 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -83,15 +83,12 @@ extension SavedPaymentMethodCollectionView { return ShadowedRoundedRectangle(appearance: appearance) }() lazy var accessoryButton: CircularButton = { - let button = CircularButton(style: .edit, - dangerColor: appearance.colors.danger) - button.set(style: .edit, with: appearance.colors.danger) + let button = CircularButton(style: .edit) button.backgroundColor = UIColor.dynamic( light: .systemGray5, dark: appearance.colors.componentBackground.lighten(by: 0.075)) button.iconColor = appearance.colors.icon button.isAccessibilityElement = true button.accessibilityLabel = String.Localized.edit - button.accessibilityIdentifier = "Edit" return button }() From ffcf6e416c0002c83ad5ee37fb721e02179c518a Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 22:25:59 -0800 Subject: [PATCH 19/54] remove wait for chevron existence in tests for last card --- .../PaymentSheetUITest/EmbeddedUITest.swift | 2 -- .../PaymentSheetUITest/PaymentSheetVerticalUITest.swift | 2 -- 2 files changed, 4 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift index 870f59e8368..d7e1d0335a0 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/EmbeddedUITest.swift @@ -211,7 +211,6 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove last card while selected state is NOT on the card app.buttons["Edit"].waitForExistenceAndTap() XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 3.0)) - app.buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Visa •••• 1001", alertTitle: "Remove card?", buttonToTap: "Remove") @@ -279,7 +278,6 @@ class EmbeddedUITests: PaymentSheetUITestCase { // Remove last card while selected state is on the card app.buttons["Edit"].waitForExistenceAndTap() XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 3.0)) - app.buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() dismissAlertView(alertBody: "Cartes Bancaires •••• 1001", alertTitle: "Remove card?", buttonToTap: "Remove") diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift index 6ba5d8fecab..d576bc0c30e 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift @@ -255,7 +255,6 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { // Update the card brand on the last card XCTAssertTrue(app.buttons["Cartes Bancaires ending in 1 0 0 1"].waitForExistence(timeout: 1.0)) // Cartes Bancaires card should be selected now that 4242 card is removed XCTAssertTrue(app.buttons["Edit"].waitForExistenceAndTap()) - app.buttons["chevron"].firstMatch.waitForExistenceAndTap() // Should present the update card view controller XCTAssertTrue(app.staticTexts["Manage card"].waitForExistence(timeout: 2.0)) @@ -278,7 +277,6 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { // Reselect edit icon and delete the card from the update view controller app.buttons["Edit"].firstMatch.waitForExistenceAndTap() - app.buttons["chevron"].waitForExistenceAndTap() app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) From 403fdcb99d4d443dcacb0b4d824da66d8e7bb744 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 5 Dec 2024 22:36:54 -0800 Subject: [PATCH 20/54] localizable string --- .../Resources/Localizations/en.lproj/Localizable.strings | 3 --- .../VerticalSavedPaymentMethodsViewController.swift | 6 +++++- .../VerticalSavedPaymentMethodsViewControllerTests.swift | 6 ++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Resources/Localizations/en.lproj/Localizable.strings b/StripePaymentSheet/StripePaymentSheet/Resources/Localizations/en.lproj/Localizable.strings index 50c3a96d1f0..2553cfc5365 100644 --- a/StripePaymentSheet/StripePaymentSheet/Resources/Localizations/en.lproj/Localizable.strings +++ b/StripePaymentSheet/StripePaymentSheet/Resources/Localizations/en.lproj/Localizable.strings @@ -277,9 +277,6 @@ e.g, 'Pay faster at Example, Inc. and thousands of businesses.' */ /* Title for a button that when tapped removes a linked bank account. */ "Remove linked account" = "Remove linked account"; -/* Title shown above a view containing a customer's payment method that they can delete */ -"Remove payment method" = "Remove payment method"; - /* Label for a button that re-sends the a login code when tapped */ "Resend code" = "Resend code"; diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index f16823b3e5c..ae991262c8d 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -83,6 +83,10 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { return (paymentMethodRows.count > 1 ? true : configuration.allowsRemovalOfLastSavedPaymentMethod) && paymentMethodRemove } + var canEditPaymentMethods: Bool { + return hasCoBrandedCards && isCBCEligible + } + /// Indicates whether the chevron should be shown /// True if any saved payment methods can be removed or edited (will update this to include allowing set as default) var canRemoveOrEdit: Bool { @@ -90,7 +94,7 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { guard hasSupportedSavedPaymentMethods else { fatalError("Saved payment methods contain unsupported payment methods.") } - return canRemovePaymentMethods || (hasCoBrandedCards && isCBCEligible) + return canRemovePaymentMethods || canEditPaymentMethods } private var selectedPaymentMethod: STPPaymentMethod? { diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift index 5a4a4f8ea1b..fbc44ebc5f6 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerTests.swift @@ -108,7 +108,9 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { func testCanEdit_singlePaymentMethod_returnsFalse() { let singlePaymentMethods = [STPPaymentMethod._testCard()] - let viewController = VerticalSavedPaymentMethodsViewController(configuration: configuration, + var noRemovalConfiguration = PaymentSheet.Configuration() + noRemovalConfiguration.allowsRemovalOfLastSavedPaymentMethod = false + let viewController = VerticalSavedPaymentMethodsViewController(configuration: noRemovalConfiguration, selectedPaymentMethod: singlePaymentMethods.first, paymentMethods: singlePaymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), @@ -123,7 +125,7 @@ class VerticalSavedPaymentMethodsViewControllerTests: XCTestCase { paymentMethods: singlePaymentMethods, elementsSession: ._testValue(paymentMethodTypes: ["card"]), analyticsHelper: ._testValue()) - XCTAssertFalse(viewController.canRemoveOrEdit) // Can't edit, merchant is not eligible for CBC + XCTAssertFalse(viewController.canEditPaymentMethods) // Can't edit, merchant is not eligible for CBC } func testCanEdit_singlePaymentMethod_disallowsLastRemoval_returnsFalse() { From c8fbfef9497763b0f8a402c5025937fb46806d28 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 00:26:21 -0800 Subject: [PATCH 21/54] edit a test --- .../PaymentSheetUITest/PaymentSheetUITest.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift index 61d455462ff..1ef45cdfffc 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift @@ -1181,8 +1181,8 @@ class PaymentSheetDeferredServerSideUITests: PaymentSheetUITestCase { XCTAssertTrue(confirmRemoval.waitForExistence(timeout: 60.0)) confirmRemoval.tap() - // Should still show "+ Add" and Link - XCTAssertEqual(app.cells.count, 2) + // Should still show "+ Add". Should show Link for a split second, but then it fades out because there is no wallet or other saved pm + XCTAssertTrue(app.staticTexts["+ Add"].waitForExistence(timeout: 3)) } } From 0a92c87f2f8affb609e4478d0e7c67ff75250f0e Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 00:54:11 -0800 Subject: [PATCH 22/54] remove removeOnly snapshots --- ...ntMethodsViewControllerSnapshotTests.swift | 12 ++---------- ...wButton_newPaymentMethod_unselected@3x.png | Bin 7824 -> 7836 bytes ...wPaymentMethod_withPromo_unselected@3x.png | Bin 11404 -> 11416 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 30017 -> 0 bytes ...ntrollerSnapshotTestsRemoveOnlyMode@3x.png | Bin 29825 -> 0 bytes 5 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png delete mode 100644 Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift index fdea400f34d..4e80480fdb0 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift @@ -24,10 +24,6 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, appearance: ._testMSPaintTheme) } - func test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode() { - _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, isRemoveOnlyMode: true) - } - func test_Embedded_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDarkMode() { _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: true, isEmbedded: true) } @@ -40,14 +36,10 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, appearance: ._testMSPaintTheme, isEmbedded: true) } - func test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode() { - _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, isEmbedded: true, isRemoveOnlyMode: true) - } - - func _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, isEmbedded: Bool = false, isRemoveOnlyMode: Bool = false) { + func _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, isEmbedded: Bool = false) { var configuration = PaymentSheet.Configuration() configuration.appearance = appearance - let paymentMethods = isRemoveOnlyMode ? [STPPaymentMethod._testCardAmex()] : generatePaymentMethods() + let paymentMethods = generatePaymentMethods() let sut = VerticalSavedPaymentMethodsViewController(configuration: configuration, selectedPaymentMethod: paymentMethods.first, diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_unselected@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_unselected@3x.png index d0ea7bb2be25da99c6fce1222e8734cc9afa8e69..838eafa6586a6adade5c9358b714a8b741b6cf4b 100644 GIT binary patch delta 94 zcmbPWJI8i{p?5`UglC$sFM}2X0|N&GE29ttGmymygba*Q46I-_1A`Z%G@Kp8r~y^O a#K6#=$-n|t6E(5Gh-H;dM8(EsuVev8W(^ns delta 82 zcmbPZJHd8>p?ywjglC$sFM}2X0|N&G3!@YRE0Dzq#CD9*aJCzx1_Lu#oQZ*W|(jS)-g+f1{Kn_kHR0Qcw(CIA2c diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_withPromo_unselected@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.PaymentMethodRowButtonSnapshotTests/testPaymentMethodRowButton_newPaymentMethod_withPromo_unselected@3x.png index 9170b468bdc1c10329fb3cc8e5123a51b42bde13..6142a4d44cfd3d1eb2e10f5f6a1f05d5fdc75b60 100644 GIT binary patch delta 94 zcmeB)oDn&}(7Pfv!ZXd+mqCkxfq{d8l~IU+8OUM;LIy@D239befx(MW8qN-4)PSmC aVqj>`WMF}+iJDko#Ii~!qGIE+XW9T+qzzI4 delta 82 zcmbOc*%LXz&^{+M!ZXd+mqCkxfq{d8g;9!u706-)Vmn4@INOa;gMk?=&cwjbp2@%h TRpU3Y#)u{LZKm1AP0zFe2K5bK diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_Embedded_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png deleted file mode 100644 index c29dbb1e17e42cbfd644b63fa12f157b93d4a405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30017 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 diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentMethodsViewControllerSnapshotTestsRemoveOnlyMode@3x.png deleted file mode 100644 index d6cd8ef1bab2a9389dc655a45796ac733be7eef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29825 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 wt7f!0Iog~Aj;M~d<3~GC0z Date: Fri, 6 Dec 2024 12:58:35 -0800 Subject: [PATCH 23/54] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f07da83835..3069471fa38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +### PaymentSheet, CustomerSheet +* [Changed] Changed the edit and remove saved payment method flow so that tapping 'Edit' displays an icon that leads to a new update payment method screen ## 24.1.2 2024-12-05 ### PaymentSheet * [Fixed] Fixed an issue where FlowController returned incorrect `PaymentOptionDisplayData` for Link card brand transactions. From f239d203298874453af3b572b98ef3deffcd691c Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 14:04:28 -0800 Subject: [PATCH 24/54] update changelog and tests --- CHANGELOG.md | 3 ++- .../PaymentSheetUITest/CustomerSheetUITest.swift | 5 ++++- .../PaymentSheetUITest/PaymentSheetUITest.swift | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3069471fa38..bcd8f35467e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ### PaymentSheet, CustomerSheet -* [Changed] Changed the edit and remove saved payment method flow so that tapping 'Edit' displays an icon that leads to a new update payment method screen +* [Changed] Changed the edit and remove saved payment method flow so that tapping 'Edit' displays an icon that leads to a new update payment method screen that displays payment method details for card (last 4 digits of card number, cvc and expiry date fields), US Bank account (name, email, last 4 digits of bank acocunt), and SEPA debit (name, email, last 4 digits of IBAN). + ## 24.1.2 2024-12-05 ### PaymentSheet * [Fixed] Fixed an issue where FlowController returned incorrect `PaymentOptionDisplayData` for Link card brand transactions. diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift index f8c1a893520..24e0091b26a 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/CustomerSheetUITest.swift @@ -573,7 +573,10 @@ class CustomerSheetUITest: XCTestCase { XCTAssertTrue(app.staticTexts["Done"].waitForExistence(timeout: 1)) // Sanity check "Done" button is there // Remove the 4242 saved PM - XCTAssertNotNil(scroll(collectionView: app.collectionViews.firstMatch, toFindButtonWithId: "CircularButton.Edit")?.tap()) + // circularEditButton shows up in the view hierarchy, but it's not actually on the screen or tappable so we scroll a little + let startCoordinate = app.collectionViews.firstMatch.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.99)) + startCoordinate.press(forDuration: 0.1, thenDragTo: app.collectionViews.firstMatch.coordinate(withNormalizedOffset: CGVector(dx: 0.1, dy: 0.99))) + XCTAssertTrue(app.buttons.matching(identifier: "CircularButton.Edit").element(boundBy: 1).waitForExistenceAndTap()) app.buttons["Remove"].waitForExistenceAndTap() XCTAssertTrue(app.alerts.buttons["Remove"].waitForExistenceAndTap()) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift index 1ef45cdfffc..edbfe015790 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetUITest.swift @@ -330,7 +330,10 @@ class PaymentSheetStandardUITests: PaymentSheetUITestCase { XCTAssertTrue(editButton.waitForExistence(timeout: 60.0)) editButton.tap() - app.buttons["CircularButton.Edit"].waitForExistenceAndTap() + // circularEditButton shows up in the view hierarchy, but it's not actually on the screen or tappable so we scroll a little + let startCoordinate = app.collectionViews.firstMatch.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.99)) + startCoordinate.press(forDuration: 0.1, thenDragTo: app.collectionViews.firstMatch.coordinate(withNormalizedOffset: CGVector(dx: 0.1, dy: 0.99))) + XCTAssertTrue(app.buttons.matching(identifier: "CircularButton.Edit").firstMatch.waitForExistenceAndTap()) let removeButton = app.buttons["Remove"] XCTAssertTrue(removeButton.waitForExistence(timeout: 60.0)) @@ -340,6 +343,7 @@ class PaymentSheetStandardUITests: PaymentSheetUITestCase { XCTAssertTrue(confirmRemoval.waitForExistence(timeout: 60.0)) confirmRemoval.tap() + XCTAssertTrue(app.staticTexts["Select your payment method"].waitForExistence(timeout: 3.0)) XCTAssertEqual(app.cells.count, 3) // Should be "Add", "Apple Pay", "Link" // Give time for analyticsLog to receive mc_custom_paymentoption_removed From fe79f5515a291c10da127ec274c5ec8a8c619de5 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 14:24:53 -0800 Subject: [PATCH 25/54] readd default badge snapshot test --- ...rticalSavedPaymentMethodsViewControllerSnapshotTests.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift index 549c890fc6e..ced3df402a9 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift @@ -36,6 +36,10 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, appearance: ._testMSPaintTheme, isEmbedded: true) } + func test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge() { + _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: false, showDefaultPMBadge: true) + } + func _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, isEmbedded: Bool = false, showDefaultPMBadge: Bool = false) { var configuration = PaymentSheet.Configuration() configuration.appearance = appearance From ea5228f2df9de994306f49716d21b8c3c3f8d0f5 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 14:28:50 -0800 Subject: [PATCH 26/54] remove dead code --- .../PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift | 5 +---- .../VerticalPaymentMethodListViewController.swift | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift index 9faedca04b4..eaca0b07690 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentMethodsView.swift @@ -67,7 +67,6 @@ class EmbeddedPaymentMethodsView: UIView { private var savedPaymentMethodButton: RowButton? weak var delegate: EmbeddedPaymentMethodsViewDelegate? - var isDefaultPM: Bool = false init( initialSelection: Selection?, @@ -82,8 +81,7 @@ class EmbeddedPaymentMethodsView: UIView { savedPaymentMethods: [STPPaymentMethod] = [], customer: PaymentSheet.CustomerConfiguration? = nil, incentive: PaymentMethodIncentive? = nil, - delegate: EmbeddedPaymentMethodsViewDelegate? = nil, - isDefaultPM: Bool = false + delegate: EmbeddedPaymentMethodsViewDelegate? = nil ) { self.appearance = appearance self.mandateProvider = mandateProvider @@ -91,7 +89,6 @@ class EmbeddedPaymentMethodsView: UIView { self.rowButtonAppearance = appearance.embeddedPaymentElement.row.style.appearanceForStyle(appearance: appearance) self.customer = customer self.delegate = delegate - self.isDefaultPM = isDefaultPM super.init(frame: .zero) if let savedPaymentMethod { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift index 8ad7050cd58..794d06a4dc5 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/VerticalPaymentMethodListViewController.swift @@ -24,7 +24,6 @@ class VerticalPaymentMethodListViewController: UIViewController { let stackView = UIStackView() let appearance: PaymentSheet.Appearance weak var delegate: VerticalPaymentMethodListViewControllerDelegate? - var isDefaultPM: Bool = false required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") @@ -42,13 +41,11 @@ class VerticalPaymentMethodListViewController: UIViewController { currency: String?, amount: Int?, incentive: PaymentMethodIncentive?, - delegate: VerticalPaymentMethodListViewControllerDelegate, - isDefaultPM: Bool = false + delegate: VerticalPaymentMethodListViewControllerDelegate ) { self.delegate = delegate self.appearance = appearance self.delegate = delegate - self.isDefaultPM = isDefaultPM super.init(nibName: nil, bundle: nil) // Add the header - either the passed in `header` or "Select payment method" From 7022a1189126343247ce8250499da9618da579b3 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 14:42:31 -0800 Subject: [PATCH 27/54] sleep for 1 second to allow label animation to finish testRemovalOfSavedPaymentMethods_verticalMode --- .../PaymentSheetUITest/PaymentSheetVerticalUITest.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift index d576bc0c30e..a1c734b59a7 100644 --- a/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift +++ b/Example/PaymentSheet Example/PaymentSheetUITest/PaymentSheetVerticalUITest.swift @@ -232,7 +232,8 @@ class PaymentSheetVerticalUITests: PaymentSheetUITestCase { app.buttons["Done"].waitForExistenceAndTap() // Tap out of FlowController app.tapCoordinate(at: .init(x: 200, y: 100)) - + // Sleep to allow animation to finish + sleep(1) // The next card should be selected now XCTAssertEqual(app.buttons["Payment method"].label, "•••• 1001, card") From 05a0a049cde6f28d8ee8db4001fe9f2a0cd568c2 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 14:47:34 -0800 Subject: [PATCH 28/54] fix build --- .../Embedded/EmbeddedPaymentElement+Internal.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index 89d73da453d..0cf7f56fe46 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -89,8 +89,7 @@ extension EmbeddedPaymentElement { savedPaymentMethods: loadResult.savedPaymentMethods, customer: configuration.customer, incentive: loadResult.elementsSession.incentive, - delegate: delegate, - isDefaultPM: loadResult.savedPaymentMethods.first?.stripeId == loadResult.elementsSession.customer?.defaultPaymentMethod + delegate: delegate ) } } From 17941060a23866e93afe38fcd316843d05e3c9b0 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Fri, 6 Dec 2024 14:48:06 -0800 Subject: [PATCH 29/54] remove extra argument --- .../ViewControllers/PaymentSheetVerticalViewController.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index 2d686aa6947..a92f127b31f 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -365,8 +365,7 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo currency: loadResult.intent.currency, amount: loadResult.intent.amount, incentive: loadResult.elementsSession.incentive, - delegate: self, - isDefaultPM: savedPaymentMethods.first?.stripeId == elementsSession.customer?.defaultPaymentMethod + delegate: self ) } From b592b55f0373258f2dcdc427950fe62f186af550 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 9 Dec 2024 10:50:17 -0800 Subject: [PATCH 30/54] fallback when opted in to set as default not local default but first in saved pm list --- .../ElementsCustomer.swift | 13 +++++++----- .../CustomerSessionAdapter.swift | 11 +++++----- .../CustomerSheet/CustomerSheet.swift | 7 ++++--- .../EmbeddedPaymentElement+Internal.swift | 20 ++++++++++++------- .../PaymentSheet/PaymentSheetLoader.swift | 7 ++++--- .../SavedPaymentOptionsViewController.swift | 13 ++++++++---- .../PaymentSheetVerticalViewController.swift | 20 +++++++++++++------ 7 files changed, 58 insertions(+), 33 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index dc74d4c1c9e..76ab7b66b6b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -36,14 +36,17 @@ struct ElementsCustomer: Equatable, Hashable { } // Optional - // to test default payment methods reading from back end, hard-code a valid default payment method - // later, when API calls to get and update default payment method are available, that will no longer be needed let defaultPaymentMethod = response["default_payment_method"] as? String return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } - static func getDefaultPaymentMethod(from customer: ElementsCustomer?) -> STPPaymentMethod? { - guard let customer = customer else { return nil } - return customer.paymentMethods.first { $0.stripeId == customer.defaultPaymentMethod } + func getDefaultOrFirstPaymentMethod() -> STPPaymentMethod? { + // if customer has a default payment method from the elements session, return the default payment method + let defaultSavedPaymentMethod = paymentMethods.first { $0.stripeId == defaultPaymentMethod } + if let defaultSavedPaymentMethod = defaultSavedPaymentMethod { + return defaultSavedPaymentMethod + } + // otherwise, return the first payment method from the customer's list of saved payment methods + return paymentMethods.first } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift index 129adf47d06..fd29c12eb5e 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSessionAdapter/CustomerSessionAdapter.swift @@ -108,13 +108,14 @@ extension CustomerSessionAdapter { } func fetchSelectedPaymentOption(for customerId: String, customer: ElementsCustomer? = nil) -> CustomerPaymentOption? { - guard configuration.allowsSetAsDefaultPM, - let customer = customer, - let defaultPaymentMethod = customer.defaultPaymentMethod else { - return CustomerPaymentOption.defaultPaymentMethod(for: customerId) + // if opted in to the "set as default" feature, try to get default payment method from elements session + if configuration.allowsSetAsDefaultPM { + guard let customer = customer, + let defaultPaymentMethod = customer.getDefaultOrFirstPaymentMethod() else { return nil } + return CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) } - return CustomerPaymentOption.stripeId(defaultPaymentMethod) + return CustomerPaymentOption.defaultPaymentMethod(for: customerId) } func detachPaymentMethod(paymentMethodId: String) async throws { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift index 501edeac3a8..79e088e701c 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSheet.swift @@ -329,9 +329,10 @@ extension CustomerSheet { var selectedPaymentOption: CustomerPaymentOption? - // get default payment method from elements session - if configuration.allowsSetAsDefaultPM, - let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: elementsSession.customer) { + // if opted in to the "set as default" feature, try to get default payment method from elements session + if configuration.allowsSetAsDefaultPM { + guard let customer = elementsSession.customer, + let defaultPaymentMethod = customer.getDefaultOrFirstPaymentMethod() else { return nil } selectedPaymentOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) } else { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift index 0cf7f56fe46..86f2fcd2c59 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Embedded/EmbeddedPaymentElement+Internal.swift @@ -37,12 +37,6 @@ extension EmbeddedPaymentElement { isFlatCheckmarkStyle: configuration.appearance.embeddedPaymentElement.row.style == .flatWithCheckmark ) let initialSelection: EmbeddedPaymentMethodsView.Selection? = { - // get default payment method from elements session - if configuration.allowsSetAsDefaultPM, - let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: loadResult.elementsSession.customer) { - return .saved(paymentMethod: defaultPaymentMethod) - } - // Select the previous payment option switch previousPaymentOption { case .applePay: @@ -60,7 +54,19 @@ extension EmbeddedPaymentElement { } // If there's no previous customer input, default to the customer's default or the first saved payment method, if any - let customerDefault = CustomerPaymentOption.defaultPaymentMethod(for: configuration.customer?.id) + var customerDefault: CustomerPaymentOption? + // if opted in to the "set as default" feature, try to get default payment method from elements session + if configuration.allowsSetAsDefaultPM { + if let defaultPaymentMethod = loadResult.elementsSession.customer?.getDefaultOrFirstPaymentMethod() { + customerDefault = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + customerDefault = nil + } + } + else { + customerDefault = CustomerPaymentOption.defaultPaymentMethod(for: configuration.customer?.id) + } switch customerDefault { case .applePay: return .applePay diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift index fee9ddf93b2..c10a9cbaaff 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/PaymentSheetLoader.swift @@ -319,9 +319,10 @@ final class PaymentSheetLoader { // Move default PM to front if let customerID = configuration.customer?.id { var defaultPaymentMethodOption: CustomerPaymentOption? - // get default payment method from elements session - if configuration.allowsSetAsDefaultPM, - let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: elementsSession.customer) { + // if opted in to the "set as default" feature, try to get default payment method from elements session + if configuration.allowsSetAsDefaultPM { + guard let customer = elementsSession.customer, + let defaultPaymentMethod = customer.getDefaultOrFirstPaymentMethod() else { return [] } defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) } else { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index e13d2df524f..16c83a88799 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -446,10 +446,15 @@ class SavedPaymentOptionsViewController: UIViewController { static func makeViewModels(savedPaymentMethods: [STPPaymentMethod], customerID: String?, showApplePay: Bool, showLink: Bool, allowsSetAsDefaultPM: Bool, customer: ElementsCustomer?) -> (defaultSelectedIndex: Int, viewModels: [Selection]) { // Get the default var defaultPaymentMethodOption: CustomerPaymentOption? - // get default payment method from elements session - if allowsSetAsDefaultPM, - let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: customer) { - defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + // if opted in to the "set as default" feature, try to get default payment method from elements session + if allowsSetAsDefaultPM { + if let customer = customer, + let defaultPaymentMethod = customer.getDefaultOrFirstPaymentMethod() { + defaultPaymentMethodOption = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + defaultPaymentMethodOption = nil + } } else { defaultPaymentMethodOption = CustomerPaymentOption.defaultPaymentMethod(for: customerID) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift index a92f127b31f..250eafc26ea 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/ViewControllers/PaymentSheetVerticalViewController.swift @@ -288,11 +288,6 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo if let selection { return selection } - // get default payment method from elements session - if configuration.allowsSetAsDefaultPM, - let defaultPaymentMethod = ElementsCustomer.getDefaultPaymentMethod(from: elementsSession.customer) { - return .saved(paymentMethod: defaultPaymentMethod) - } switch previousPaymentOption { case .applePay: @@ -323,7 +318,20 @@ class PaymentSheetVerticalViewController: UIViewController, FlowControllerViewCo } } // Default to the customer's default or the first saved payment method, if any - let customerDefault = CustomerPaymentOption.defaultPaymentMethod(for: configuration.customer?.id) + var customerDefault: CustomerPaymentOption? + // if opted in to the "set as default" feature, try to get default payment method from elements session + if configuration.allowsSetAsDefaultPM { + if let customer = elementsSession.customer, + let defaultPaymentMethod = customer.getDefaultOrFirstPaymentMethod() { + customerDefault = CustomerPaymentOption.stripeId(defaultPaymentMethod.stripeId) + } + else { + customerDefault = nil + } + } + else { + customerDefault = CustomerPaymentOption.defaultPaymentMethod(for: configuration.customer?.id) + } switch customerDefault { case .applePay: return isFlowController ? .applePay : nil // Only default to Apple Pay in flow controller mode From 74c9db8239c2ff596b5782e1ec3fc11539350bd4 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 9 Dec 2024 12:05:10 -0800 Subject: [PATCH 31/54] added tests --- .../CustomerSheet/CustomerSheetTests.swift | 26 +++++++++- .../PaymentSheet/STPElementsSessionTest.swift | 50 +++++++++++++++++++ .../STPFixtures+PaymentSheet.swift | 26 +++++++++- 3 files changed, 99 insertions(+), 3 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSheetTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSheetTests.swift index a533b7309e4..5613298520f 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSheetTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/CustomerSheet/CustomerSheetTests.swift @@ -7,7 +7,7 @@ import Foundation @_spi(STP) @testable import StripeCore @_spi(STP) @testable import StripePayments -@_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @testable import StripePaymentSheet +@_spi(CustomerSessionBetaAccess) @_spi(CardBrandFilteringBeta) @_spi(AllowsSetAsDefaultPM) @testable import StripePaymentSheet import OHHTTPStubs import OHHTTPStubsSwift @@ -327,4 +327,28 @@ class CustomerSheetTests: APIStubbedTestCase { } wait(for: [loadPaymentMethodInfo], timeout: 5.0) } + + func testLoadPaymentMethodInfo_CustomerSession_NoDefaultPMHasSavedPaymentMethod() throws { + let stubbedAPIClient = stubbedAPIClient() + StubbedBackend.stubSessions(fileMock: .elementsSessions_customerSessionsCustomerSheetWithSavedPM_200) + var configuration = CustomerSheet.Configuration() + configuration.apiClient = stubbedAPIClient + configuration.allowsSetAsDefaultPM = true + + let loadPaymentMethodInfo = expectation(description: "loadPaymentMethodInfo completed") + let customerSheet = CustomerSheet(configuration: configuration, + intentConfiguration: .init(setupIntentClientSecretProvider: { return "si_123" }), + customerSessionClientSecretProvider: { return .init(customerId: "cus_123", clientSecret: "cuss_123") }) + let csDataSource = customerSheet.createCustomerSheetDataSource()! + csDataSource.loadPaymentMethodInfo { result in + guard case .success((let paymentMethods, let selectedPaymentMethod, _)) = result else { + XCTFail() + return + } + XCTAssertFalse(paymentMethods.isEmpty) + XCTAssertNotNil(selectedPaymentMethod) + loadPaymentMethodInfo.fulfill() + } + wait(for: [loadPaymentMethodInfo], timeout: 5.0) + } } diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPElementsSessionTest.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPElementsSessionTest.swift index e269af7081c..d5fb658ab57 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPElementsSessionTest.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPElementsSessionTest.swift @@ -342,4 +342,54 @@ class STPElementsSessionTest: XCTestCase { XCTAssertTrue(allowsRemoval) XCTAssertFalse(elementsSession.paymentMethodRemoveLastForCustomerSheet) } + private let testCardJSON = [ + "id": "pm_123card", + "type": "card", + "card": [ + "last4": "4242", + "brand": "visa", + "fingerprint": "B8XXs2y2JsVBtB9f", + "networks": ["available": ["visa"]], + "exp_month": "01", + "exp_year": Calendar.current.component(.year, from: Date()) + 1 + ] + ] as [AnyHashable : Any] + private let testCardAmexJSON = [ + "id": "pm_123amexcard", + "type": "card", + "card": [ + "last4": "0005", + "brand": "amex", + ], + ] as [AnyHashable : Any] + func testElementsCustomerDefaultPaymentMethod() { + let elementsSession = STPElementsSession._testDefaultCardValue(defaultPaymentMethod: "pm_123card", paymentMethods: [testCardAmexJSON, testCardJSON]) + let customer = elementsSession.customer + XCTAssertNotNil(customer) + let defaultPaymentMethodId = customer?.defaultPaymentMethod + XCTAssertNotNil(defaultPaymentMethodId) + let defaultPaymentMethod = customer?.getDefaultOrFirstPaymentMethod() + XCTAssertNotNil(defaultPaymentMethod) + XCTAssertEqual(defaultPaymentMethod?.stripeId, defaultPaymentMethodId) + XCTAssertEqual(defaultPaymentMethod?.stripeId, "pm_123card") + } + func testElementsCustomerNoDefaultPaymentMethodHasSavedPaymentMethods() { + let elementsSession = STPElementsSession._testDefaultCardValue(defaultPaymentMethod: nil, paymentMethods: [testCardAmexJSON, testCardJSON]) + let customer = elementsSession.customer + XCTAssertNotNil(customer) + let defaultPaymentMethodId = customer?.defaultPaymentMethod + XCTAssertNil(defaultPaymentMethodId) + let defaultPaymentMethod = customer?.getDefaultOrFirstPaymentMethod() + XCTAssertNotNil(defaultPaymentMethod) + XCTAssertEqual(defaultPaymentMethod?.stripeId, "pm_123amexcard") + } + func testElementsCustomerNoDefaultPaymentMethodNoSavedPaymentMethods() { + let elementsSession = STPElementsSession._testDefaultCardValue(defaultPaymentMethod: nil, paymentMethods: []) + let customer = elementsSession.customer + XCTAssertNotNil(customer) + let defaultPaymentMethodId = customer?.defaultPaymentMethod + XCTAssertNil(defaultPaymentMethodId) + let defaultPaymentMethod = customer?.getDefaultOrFirstPaymentMethod() + XCTAssertNil(defaultPaymentMethod) + } } diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift index 43ed581fbc5..4bf0f2067e0 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/STPFixtures+PaymentSheet.swift @@ -45,6 +45,19 @@ extension STPElementsSession { return _testValue(paymentMethodTypes: ["card"]) } + static func _testDefaultCardValue(defaultPaymentMethod: String?, paymentMethods: [[AnyHashable: Any]]? = nil) -> STPElementsSession { + return _testValue(paymentMethodTypes: ["card"], customerSessionData: [ + "mobile_payment_element": [ + "enabled": true, + "features": ["payment_method_save": "enabled", + "payment_method_remove": "enabled", + ], + ], + "customer_sheet": [ + "enabled": false, + ]], allowsSetAsDefaultPM: true, defaultPaymentMethod: defaultPaymentMethod, paymentMethods: paymentMethods) + } + static func _testValue( paymentMethodTypes: [String], externalPaymentMethodTypes: [String] = [], @@ -53,7 +66,10 @@ extension STPElementsSession { isLinkPassthroughModeEnabled: Bool? = nil, linkMode: LinkMode? = nil, linkFundingSources: Set = [], - disableLinkSignup: Bool? = nil + disableLinkSignup: Bool? = nil, + allowsSetAsDefaultPM: Bool = false, + defaultPaymentMethod: String? = nil, + paymentMethods: [[AnyHashable: Any]]? = nil ) -> STPElementsSession { var json = STPTestUtils.jsonNamed("ElementsSession")! json[jsonDict: "payment_method_preference"]?["ordered_payment_method_types"] = paymentMethodTypes @@ -74,8 +90,14 @@ extension STPElementsSession { "api_key_expiry": 12345, "customer": "cus_123", "components": customerSessionData, - ], + ] ] + if allowsSetAsDefaultPM, let defaultPaymentMethod { + json[jsonDict: "customer"]?["default_payment_method"] = defaultPaymentMethod + } + if let paymentMethods { + json[jsonDict: "customer"]?["payment_methods"] = paymentMethods + } } if let cardBrandChoiceData { From f9d09969dab751445727d9fa4221b975ee708785 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Mon, 16 Dec 2024 08:45:08 -0800 Subject: [PATCH 32/54] fix non compiling test --- ...VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift index ced3df402a9..f36f14bfaaa 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift @@ -51,7 +51,7 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT let sut = VerticalSavedPaymentMethodsViewController(configuration: configuration, selectedPaymentMethod: paymentMethods.first, paymentMethods: paymentMethods, - elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first ?? STPPaymentMethod._testCard()) : ._testCardValue(), + elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first?.stripeId ?? STPPaymentMethod._testCard().stripeId) : ._testCardValue(), analyticsHelper: ._testValue() ) let bottomSheet: BottomSheetViewController From 0c52f28aa4fd2ab93141a9b8eb9245ea1d6bc3b7 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Tue, 17 Dec 2024 08:57:02 -0800 Subject: [PATCH 33/54] dynamically increase height of collectionview cells when default badge present --- .../ElementsCustomer.swift | 4 +- .../SavedPaymentMethodCollectionView.swift | 94 ++++++++++++++----- .../SavedPaymentOptionsViewController.swift | 8 +- ...calSavedPaymentMethodsViewController.swift | 4 +- 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index 76ab7b66b6b..a63c80c9699 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -36,7 +36,9 @@ struct ElementsCustomer: Equatable, Hashable { } // Optional - let defaultPaymentMethod = response["default_payment_method"] as? String +// let defaultPaymentMethod = response["default_payment_method"] as? String + let defaultPaymentMethod = "pm_1QWjS4Lu5o3P18ZpkmaUzx3O" +// print(defaultPaymentMethod ?? "No default payment method") return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index f5db8a1f91e..076e5b9ffd4 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -15,7 +15,8 @@ import UIKit // MARK: - Constants /// Entire cell size -private let cellSize: CGSize = CGSize(width: 106, height: 106) +private let cellSize: CGSize = CGSize(width: 106, height: 94) +private let cellSizeWithDefaultBadge: CGSize = CGSize(width: 106, height: 112) /// Size of the rounded rectangle that contains the PM logo let roundedRectangleSize = CGSize(width: 100, height: 64) private let paymentMethodLogoSize: CGSize = CGSize(width: 54, height: 40) @@ -24,12 +25,13 @@ private let paymentMethodLogoSize: CGSize = CGSize(width: 54, height: 40) /// For internal SDK use only @objc(STP_Internal_SavedPaymentMethodCollectionView) class SavedPaymentMethodCollectionView: UICollectionView { - init(appearance: PaymentSheet.Appearance) { + init(appearance: PaymentSheet.Appearance, showDefaultPMBadge: Bool = false) { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .horizontal layout.sectionInset = UIEdgeInsets( top: -6, left: PaymentSheetUI.defaultPadding, bottom: 0, right: PaymentSheetUI.defaultPadding) + self.showDefaultPMBadge = showDefaultPMBadge layout.itemSize = cellSize layout.minimumInteritemSpacing = 12 layout.minimumLineSpacing = 4 @@ -43,13 +45,22 @@ class SavedPaymentMethodCollectionView: UICollectionView { } var isRemovingPaymentMethods: Bool = false + var showDefaultPMBadge: Bool = false required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override var intrinsicContentSize: CGSize { - return CGSize(width: UIView.noIntrinsicMetric, height: 112) + return showDefaultPMBadge && isRemovingPaymentMethods ? CGSize(width: UIView.noIntrinsicMetric, height: 118) : CGSize(width: UIView.noIntrinsicMetric, height: 100) + } + + func updateLayout() { + guard let layout = collectionViewLayout as? UICollectionViewFlowLayout else { return } + layout.itemSize = isRemovingPaymentMethods ? cellSizeWithDefaultBadge : cellSize + collectionViewLayout.invalidateLayout() + invalidateIntrinsicContentSize() + setNeedsLayout() } } @@ -72,6 +83,7 @@ extension SavedPaymentMethodCollectionView { label.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) label.textColor = appearance.colors.text label.adjustsFontForContentSizeCategory = true + label.numberOfLines = 0 return label }() let paymentMethodLogo: UIImageView = UIImageView() @@ -101,14 +113,19 @@ extension SavedPaymentMethodCollectionView { }() fileprivate var viewModel: SavedPaymentOptionsViewController.Selection? - var isDefaultPM: Bool = false { - didSet { - update() - } - } + var isDefaultPM: Bool = false var isRemovingPaymentMethods: Bool = false { didSet { + if allowsSetAsDefaultPM { + if isRemovingPaymentMethods { + addDefaultBadge() + defaultBadge.isHidden = !isDefaultPM + } + else { + removeDefaultBadge() + } + } update() } } @@ -126,12 +143,12 @@ extension SavedPaymentMethodCollectionView { var allowsSetAsDefaultPM: Bool = false /// Indicates whether the cell for a saved payment method should display the edit icon. - /// True if payment methods can be removed or edited (will update this to include allowing set as default) + /// True if payment methods can be removed or edited var showEditIcon: Bool { guard UpdatePaymentMethodViewModel.supportedPaymentMethods.contains(where: { viewModel?.savedPaymentMethod?.type == $0 }) else { fatalError("Payment method does not match supported saved payment methods.") } - return allowsPaymentMethodRemoval || (viewModel?.savedPaymentMethod?.isCoBrandedCard ?? false && cbcEligible) + return allowsSetAsDefaultPM || allowsPaymentMethodRemoval || (viewModel?.savedPaymentMethod?.isCoBrandedCard ?? false && cbcEligible) } // MARK: - UICollectionViewCell @@ -156,12 +173,14 @@ extension SavedPaymentMethodCollectionView { paymentMethodLogo.contentMode = .scaleAspectFit accessoryButton.addTarget(self, action: #selector(didSelectAccessory), for: .touchUpInside) let views = [ - label, shadowRoundedRectangle, paymentMethodLogo, plus, selectedIcon, accessoryButton, defaultBadge, + label, shadowRoundedRectangle, paymentMethodLogo, plus, selectedIcon, accessoryButton, ] views.forEach { $0.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview($0) } + labelBottomConstraint = label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) + guard let labelBottomConstraint else { return } NSLayoutConstraint.activate([ shadowRoundedRectangle.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 6), shadowRoundedRectangle.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), @@ -173,15 +192,10 @@ extension SavedPaymentMethodCollectionView { label.topAnchor.constraint( equalTo: shadowRoundedRectangle.bottomAnchor, constant: 4), + labelBottomConstraint, label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), - defaultBadge.topAnchor.constraint( - equalTo: label.bottomAnchor, constant: 4), - defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), - defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), - defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), - paymentMethodLogo.centerXAnchor.constraint( equalTo: shadowRoundedRectangle.centerXAnchor), paymentMethodLogo.centerYAnchor.constraint( @@ -228,6 +242,9 @@ extension SavedPaymentMethodCollectionView { } } + private var labelBottomConstraint: NSLayoutConstraint? + private var labelHeightConstraint: NSLayoutConstraint? + // MARK: - Internal Methods func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool) { paymentMethodLogo.isHidden = false @@ -343,15 +360,9 @@ extension SavedPaymentMethodCollectionView { selectedIcon.isHidden = true layer.shadowOpacity = 0 } - - defaultBadge.isHidden = true - if isRemovingPaymentMethods { if case .saved = viewModel, showEditIcon { accessoryButton.isHidden = false - if allowsSetAsDefaultPM && isDefaultPM { - defaultBadge.isHidden = false - } contentView.bringSubviewToFront(accessoryButton) applyDefaultStyle() @@ -364,7 +375,6 @@ extension SavedPaymentMethodCollectionView { plus.alpha = 0.6 label.textColor = appearance.colors.text.disabledColor } - } else if isSelected { accessoryButton.isHidden = true shadowRoundedRectangle.isEnabled = true @@ -396,6 +406,42 @@ extension SavedPaymentMethodCollectionView { }() } } + + private func addDefaultBadge() { + defaultBadge.isHidden = true + if defaultBadge.superview == nil { + defaultBadge.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(defaultBadge) + labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) + guard let labelBottomConstraint, let labelHeightConstraint else { return } + NSLayoutConstraint.deactivate([ + labelBottomConstraint + ]) + NSLayoutConstraint.activate([ + labelHeightConstraint, + defaultBadge.topAnchor.constraint( + equalTo: label.bottomAnchor, constant: 4), + defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), + defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) + ]) + contentView.layoutIfNeeded() + } + } + + private func removeDefaultBadge() { + if defaultBadge.superview != nil { + guard let labelHeightConstraint, let labelBottomConstraint else { return } + NSLayoutConstraint.deactivate([ + labelHeightConstraint + ]) + defaultBadge.removeFromSuperview() + NSLayoutConstraint.activate([ + labelBottomConstraint + ]) + contentView.layoutIfNeeded() + } + } } // A circle with an image in the middle diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index e19b474a86d..3c40e6e5c97 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -131,6 +131,10 @@ class SavedPaymentOptionsViewController: UIViewController { } set { collectionView.isRemovingPaymentMethods = newValue + collectionView.performBatchUpdates({ + animateHeightChange{self.collectionView.updateLayout()} + collectionView.reloadSections(IndexSet(integer: 0)) + }) UIView.transition(with: collectionView, duration: 0.3, options: .transitionCrossDissolve, @@ -268,7 +272,7 @@ class SavedPaymentOptionsViewController: UIViewController { // MARK: - Views private lazy var collectionView: SavedPaymentMethodCollectionView = { - let collectionView = SavedPaymentMethodCollectionView(appearance: appearance) + let collectionView = SavedPaymentMethodCollectionView(appearance: appearance, showDefaultPMBadge: configuration.allowsSetAsDefaultPM) collectionView.delegate = self collectionView.dataSource = self return collectionView @@ -511,10 +515,10 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle } cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: self.configuration.allowsSetAsDefaultPM) cell.delegate = self - cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods if self.configuration.allowsSetAsDefaultPM { cell.isDefaultPM = viewModel.savedPaymentMethod?.stripeId == elementsSession.customer?.defaultPaymentMethod } + cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance return cell diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index b3bd7b7c2ed..ba092ffd6d2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -88,13 +88,13 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { } /// Indicates whether the chevron should be shown - /// True if any saved payment methods can be removed or edited (will update this to include allowing set as default) + /// True if any saved payment methods can be removed or edited var canRemoveOrEdit: Bool { let hasSupportedSavedPaymentMethods = paymentMethods.allSatisfy{ UpdatePaymentMethodViewModel.supportedPaymentMethods.contains($0.type) } guard hasSupportedSavedPaymentMethods else { fatalError("Saved payment methods contain unsupported payment methods.") } - return canRemovePaymentMethods || canEditPaymentMethods + return configuration.allowsSetAsDefaultPM || canRemovePaymentMethods || canEditPaymentMethods } private var selectedPaymentMethod: STPPaymentMethod? { From 8f30c22ae7853eb3428dc022099b80dd6a00a9af Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Tue, 17 Dec 2024 08:59:44 -0800 Subject: [PATCH 34/54] snapshot tests --- ...nd_apple_pay_and_link_default_badge@3x.png | Bin 94657 -> 88282 bytes ...ControllerSnapshotTestsDefaultBadge@3x.png | Bin 104140 -> 101707 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png index 41ddec79f83a9e4cbfe7a25b46d9850b708a4522..725f96797dc17306b2fef53eb34d5acd0c3319c1 100644 GIT binary patch literal 88282 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%0AXAmiz;4fK8%ee%) z1kQmD(d)-BU`PL|ur&nG2sSvL{>HjCzzUYES!U=|dtoYd5E~g){~1zA`#09B_ImMA?*zv`o$)5AXN7$2;*Q6)PcJ0J-qGbw##jx*BX8cl9whm@{|5NUWK zd65fMkX~ARyzST^XjHt82y|!Z*tq&;NY`jTt`IVt&Hzse{;WO z*6=cS2C64mS7>Y4t%R*oTnC93Eb2?kUQ#r_FzN3YxG!~=ol}qsKyWsq@%mhp5QZgQ zh)cdp{@j(HVTk%84C6nI2ZFIrB%d0TMcCAGF9aY3#l#6xP*wSuvsB+}&KiESXz3NS zU=1CJ3RuI$3=G?JVRP&?H%g&lJ#;B!!O*~ddEKfi|DT8f*-ywXNERb}+cQ4k+k!z< zDFKAaP<+40(%rPuQLbkbA7I5fWz7Aj;3Z{f{pA$QFGt#yRpuK!;(1cGt=sI_V9=6d zRPf2F5f*d96-WVkgL4*}ajGqHiXQ>2Xd${tNi_e{WaeK!QwNf1`awabSKFbz09%Kv zX|jJT4<4o19s!8abSVSXTbYYgUtGGHZ{sUgd!Qoaclh7~j(Hd$(Ub4yW^xdDj7oX8 zN1FapsqTERCqKMc)gey~2%8dl?O>OW@?;6Tyr|Pya^PdU(ZxS+6mVjRj)(=1wv~34 z4^%{d6GzA6_{q`M8fU^@V<4V)rr;#%ywQUXFL^H18xPGh10$#?>Mgt)Frz2TpjZj* z0y!&mDEWy)Pmy-vKO}!b?Ky}8Ao*vBj%)(5(7$-`Tsfj&^c|{P&Kqx?@$|bs&?Kw4 z4dH++s;Xs}S&b#+a7Us^*$5fDShSE2^#-6D&&b~l$h(&}>!t;#v!2(vaKs&ro|7T; z;y%UF!BSN$I=lbAM*iqZ7xvPU<%;X|0T1xaeR(d1$A-5Vdz1rGXfG^&e=V=tz&TSn zWzN|{FvL=5r#7wRd5k~&d#LvR@aXIc1Le;r90yk1NOO@lDu)~?h$ISX=DgD#1k#c! zCwO*AqJRCJi~MdKSaqM%%9|GT;s|tpAV)-JtKJ*=o|@GaPDz#!=&Pc!mil^9zz%I@ zuu+L|%LzHobAulHF-saSQs|LM{~nH1Rc{0j1rHUn{CqUQoPU_W!oQioTJTe7DNEL2 z0E-&yo-qnr1AH^7m^@Dz*sajo4qpi*f=fKCtd|pBtXaT~0v5HBbpP{UW?1;qN2Qu2 zpzMJMBVrc8!7M)%S2V^tw#AlT^%6Z`6$hkOO8nWaq0?~pkKBM=>u@--7$uA>3dS*0 zWm9Fj5kF@@bI(Ci%|C}4-m4u1ea7;eKFb5WhH{qCESF$=zUb%o$*_r0y?s6)&w{a% z;3R0Hx^m%KcQd*8tDHLJia@cj{^x&RcI%bdts~feI-nZ~|9g`#jJ3QhDMSCN+@XVb=&eG`#=lj6tJY9IoX_rT028cV3cHbDhjrou ze-lst1p;>bV;`vrX`XeJm`accM7mol!NYtor<=bC?DU88wQT^b=Mt0GQ#eCnz97?r zQB`w?<59x{ZNMD>kV7ddZ9unYNK931)-ejR6}N@S?*SfyNy@K>z;M(S z>lR-AaSI&(+bvZ4F$3g{uuZ1P3lNU0_y;&mehOUb84KrRx=51D}>4BkWsYj z7kcTRtmAQoZnAuny0nTQsVC~}EN|ck5)q{|*c_M{-)3)apQaQ?3d0P0-D$zVe$Eas z8_4nY;A|iD9g_uy#t_GK-#TEb8x}-F6@?ZNziR_;vhispF*A#-5;FyquG4;IyC!29 zPb|z?!n+Fu7Z#Z#SH|rZs0zpHI~6Ln2H1n(@L&blQdDg@?={wnv}vD6${F6^tu~qp zc-uWlX~*Tc@<-S!tMZ*y+RTgupf%pYzb(48u0cuxuFGE6yI-z*<3DxZLpI5J zRNc!S*1ZPHrmUP?m4lm;fhI*eMFwN@bZosqvY$Dx?B3R$Bj}q#qLF2s6b=L9rN){i zxMX0S^(i?F={dC_aAUl<2~TN*)5b}i;dT0Cb!T=JC@h_atnMP+7B-|~GY-wxU0}NW zE9HojH9jQov|{&G+~Fd}bzm-=<2}5shJG)F2Dpp}Na17O1uxJ!A_*9+|1w~02btQr z7g^EKTT?UhEpvBfK%}V{j(@#ur6@PM)zc$(_u%0Aw3+n}8fIl|F!kEC{M6#5tN!q+`CrM8$l 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�aPMphqR~QM8T)S!ml{? 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

    pntI(Os2!r=AnE`oG57A5^K^fqlW) zm(Vspv5-r?V^Pu}i;D=Q9*+aKkj~yVh~e}bKp=4}m)b{0mgcLD4Xly|+A7HiGA51w z(FKVQM9&JieEWDhgn#(HmA2dOs@EbnD|4RBRGMo%#Mlp?Q~55~S)!92*iH0Je-nOO zje%r1V#?ZK+euf`hQ(f&#J%$4FHhSx$7P23T2l&}p**}RWdLgMPuYB6{WJFN2 zu?u=44QE<57UR%Hv|6K>&V?Md{ckM?{SY}=Pse;ydKL>x95JD-)Kvwn!|acNCF~kq zsl~IMeff#3*UWX=L4KNPjKHSNDf_>@mAF7cS#?VE^a2y

    6Cb9e?J5&7=k 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𝔧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 Date: Tue, 17 Dec 2024 09:03:07 -0800 Subject: [PATCH 35/54] removed hard coded default value --- .../API Bindings/v1-elements-sessions/ElementsCustomer.swift | 4 +--- .../SavedPaymentOptionsViewController.swift | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index a63c80c9699..76ab7b66b6b 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -36,9 +36,7 @@ struct ElementsCustomer: Equatable, Hashable { } // Optional -// let defaultPaymentMethod = response["default_payment_method"] as? String - let defaultPaymentMethod = "pm_1QWjS4Lu5o3P18ZpkmaUzx3O" -// print(defaultPaymentMethod ?? "No default payment method") + let defaultPaymentMethod = response["default_payment_method"] as? String return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 3c40e6e5c97..786a1682054 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -132,8 +132,8 @@ class SavedPaymentOptionsViewController: UIViewController { set { collectionView.isRemovingPaymentMethods = newValue collectionView.performBatchUpdates({ - animateHeightChange{self.collectionView.updateLayout()} collectionView.reloadSections(IndexSet(integer: 0)) + animateHeightChange{self.collectionView.updateLayout()} }) UIView.transition(with: collectionView, duration: 0.3, @@ -151,7 +151,6 @@ class SavedPaymentOptionsViewController: UIViewController { } } } - var bottomNoticeAttributedString: NSAttributedString? { if case .saved(let paymentMethod, _) = selectedPaymentOption { if paymentMethod.usBankAccount != nil { From 04b187dc3240927a146786ca34659f47a8966cd8 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Tue, 17 Dec 2024 09:13:14 -0800 Subject: [PATCH 36/54] snapshots --- ...nd_apple_pay_and_link_default_badge@3x.png | Bin 88282 -> 91061 bytes ...ControllerSnapshotTestsDefaultBadge@3x.png | Bin 101707 -> 104140 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png index 725f96797dc17306b2fef53eb34d5acd0c3319c1..ed6110b92523d160b832a10dd55a26782f06329d 100644 GIT binary patch delta 28587 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 diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge@3x.png index 90516fce43868e8b622f20cb55d85da65f062eda..1c0a3a4001b87f3e6d8b29e2429656bbcfc9c48f 100644 GIT binary patch delta 51574 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𝔧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

    pntI(Os2!r=AnE`oG57A5^K^fqlW) zm(Vspv5-r?V^Pu}i;D=Q9*+aKkj~yVh~e}bKp=4}m)b{0mgcLD4Xly|+A7HiGA51w z(FKVQM9&JieEWDhgn#(HmA2dOs@EbnD|4RBRGMo%#Mlp?Q~55~S)!92*iH0Je-nOO zje%r1V#?ZK+euf`hQ(f&#J%$4FHhSx$7P23T2l&}p**}RWdLgMPuYB6{WJFN2 zu?u=44QE<57UR%Hv|6K>&V?Md{ckM?{SY}=Pse;ydKL>x95JD-)Kvwn!|acNCF~kq zsl~IMeff#3*UWX=L4KNPjKHSNDf_>@mAF7cS#?VE^a2y

    6Cb9e?J5&7=k zw&JKh(!)2*E6@r@U!tsw<%CFH;G;|#3eFhwRC#qKJl(UBXkkZR=+bk6sJ(bC6-sMSpGR*hKYd(lqM%WXXlLNr z2RBaDsz^&b(v$N+Rz*yOJW=$K%Qo&*hgK(tnd1|ve?Cn%mBsJtmI>;>8j>>1zZUI` zSsCle<|nc~n&H})?)b>1f?s(dQ!kb5M^Ko!w_7YjDc{mcZmQ+}#PTY5{+#dhTS9wg z7PoWRb)UJ|fw+<$`|SC`M7l^kk}@GY5Y|`XyHAC)-O@WaJgbsQ$Ao3;tP}vt^An(60ypwTijT>CM5+FIF z@oG{CWsIeCC_NQ}ygOPYThHHqAX^FTDgAOso6^68iAtCWvAvw<>u4q-;L*HSh4u|Y zc|EbDW!WJU>Z5?`JpTS6Q}LwFBfG8M{M66&m!=f2FwdZ~4iQIJmRscl2NTz5wxd3X zg={M)lgm?0(}gX{!jvnMCCw~8pYFHWD$k+pcHHZJFQBtL8-fX{AB7%$_&LWRv=97Xl`l0k3|%F z;x;qqx3Ec$lG^P&5N)QopM_2A>@BIl>ye2&=*z1l7f9O$K{Pw5;DPO`oR&TiVT{Pr zYa`t2$wux7$*S}PV!-DP7ebUI7R0Ttmaq&WlYN-{WX5D@u9xQ4DC%^%OO{*Yokf$k zxD(kr2ttDQ80vrv`#%4~%^VwGPEbB3K)ZTppz?-SQ)blst z#nI?wh)mJsQDGVi(7;y1yDVfEj3<{*>UU#5b7e}2n3vt26fanUfO((n`h$7|kK|Sn z84@3>+*7&wAv%-w<93Ogc1xtrlejji(KN-wyo9*VE?8GMuE2(U`%Z~6 z$9#Avr~KmFn*V?rZF(JgYYa3riKa5sCM`almkA?{9LxC%t+rPxj{EGy+~9J(+)P`U z>$No|&gl5@%}-LR`Bz^{hS-%NCk+#0bmaygT)KaL#a!Qa0b{7u(O>CjRsZCo>t!2X z(iNq!l(Paa$+m$lgA>RE?6-&Fap+I#Dvd2^K`rreZL=6?snSKSckQup#nE_Zb*0-e z4P%^Dadi3AdPw4bg2Bp~q(URBjG3-cd0yHTH9f+L+@-HZ`94OY=qpaziu^~;m~XC_ z{?r&=k>%Yy;xW=iN)8sg@W$G-KD*gr=))70wUw3?O_6eyEdJp}j;nLJ;tFZ5k*fJB zmUGUo(4=<00?9R|Z7yM{!oS!crv;*SL2#wYk+&@f=h4|4J1V1&=#FL;1Pl1gYKS|r zr?Zdd68pn%%VG;z-wi!Wq>W(44m5_O%=qxyOwPUJ9FW)g<2kCnb(?FJVXMT>#NGBT z4>OmvWWmGXJCN9Eoy^$L@lFvk@uaZYW#cjihxH(*xeQ^JAAP z$+_^Y8h!lUMhB%TdAljR-Xl*Yj<9%ts8X^{a2+wCN&r5P8gqTjJ?rN?ArND@KIm{K zic%1nz2a4)QC0~FAWGBoMQIXgb+Q=O$xDlx$^)y5r6;4f(qGR@(iTgxxpB5UP7(Z* zB_F|I*M;-uVZkLzUnNvjo{ zUB0%TO6>$$9c4LRxn5R6?`)dX7re#?T)i<;t=>w}^NVYJ!dlM&Gp5Mm z#&OD}%tMnjU{LjPj#@d^?mo2F0ZKUqmA>#MOMb1U5hz?a5EeFB?qF;AylI#y*$SmAC+5gWNh(#sIuRwXT10DUPQja8A5g67-x&7>J$FSqK|tO zrXnoolR1r=%k8_5CwSeU0OMC7t<>DPV(C5V4h|@SZ0fgF9f+@eCR913)6$pZUv}pB z6iMS5#5fpi4?nAH!L1t)9Fw0iJne``cjJZvGtd#LTUGBXo+!SBfM%a17GWzd@OMop zM~b~kz97C)!L z)0wE)@klw3TgFz11yj6cBEJzY0qR(JVhlUAx0j7j6`)t%_maPqzf%clh>_E$Rlj&% zd`7q$rAAoF$aqHX>)kE(;!>UDAU(gKb}Phi#4MUf`4*s3F@HKOtFgUK^5};Qh0DA% zb8!U4bn7cAj z-xPat7MZx5t4|pJie9kbxNXaC?|PsbJvX@oZ#_@0<+O?uEtr>~Y$+e0Ps@H<$TY-~ zpbTLPH9dx>sLJ7B#AD}=$G3MyxzBH5gSLfhC)Ke`BNZ?wvoU4+t>gLiVx3A%9#`M* z4PY`mdN_lUG`F@o0Id;yOwV@!-w_s34^tRwe|#d?OL?`2U*%ho^R?O#5`3o%#sYbl<(d@M@+bAD$C*y8QE2q>9d@i5ScNn;$%u@Luqw>wRYg$K^=v^edFElzGlxiIof8QMIqlPmpPZ7Q0oWN#w$%;>>7HaRXR zLDWE1c{gZVULppoP~VH8Lor*1o)$q?%kMecPSx`~8)BtT>@iZwOP>40^dRd|na{;m z%2++Tyy;Gd&*g`bM)>d>3LK)Qmx(9XUE4KFKM5e`Ypu4=d1x-lez{$p_wf?^^x3%W z(o;!Yym+|_B4UvFeq~Fq!H310tC}X;w8cfgRB*dgyqVRaiIq=Xl5;|icw*+_A)L$! zBDbJ?Vy?WpP@cMxEs(8aY@>7VWNuVR5O3A(lZTXPgDl2kDp*TbdG!ZRG&S58c@(~` zbaD2D$D^F1zVHRK+_&@_X3D8%QK<;LdE#~GNxhDpEh&1bSxI&bc1uMx^t1P23=8E! z`ea;*Em#QdEqi>a`@qCe)=X#)8NL#UNa!+&a!&kXa6ggL_(5a7XE&YUSh<|)op_EJ z%2-gBWh(}mMWL$=EmNZc8}oX`k4fwLql5dR$`&6 zIJD9jEO?TKQ_J%v{y<;d^B1^BUMl-9J_`*NaGf;ADTiHcNE1dQR_79}%67qf1y^x> zq#aQEwRvCtqA6(6b;cV`o2lo_)02^;BxJhnTq$UL6y8Wsvlw79L#{Mh*~D7;m=X4e zGD&AY5=4k)R8AZ3n_P^K>3Ap6Q$9(R_Z@I4Xb|kSkL*8t5LJokb#k}qSFSM#?n?_I z3>Cg=&U`te^*pPkE!xW5Ak*KHy{?N?P~m!0 zwHt=bMvlOD!|GrPlRT$b=#oX&EQQE>eEMsR6mH6S^8inMApc zj9VGKGOi}QSx4^GITIt4IOCyCuE`?u&f{_Va@npciWx-isOmhaGuOE2$6zlsOJ}?d z;69qql)+iEHjrs@5kLdk;GmHa_yUP3s0*5vPL=4|4*8ObjTdKOrLOyRTd9Xt#3*yw z3TIxk4QQ@R^pfihoLq~mk_X}Wz7}0})|Re4S4vgVMhM)-OgX(Oq56X21Z4n+Fhv61 z-H~kdJclJPm#(P_`S4f``A)sjat^BX%sq#DNQ`_NWQd zH?s9(Bnm#tF%!l42&XQ7?>=2o?z-@q zPV-cQdA_FbM$29#H<2S=Ys{(_siL0ftg)4ygdgFrH#j&`jk%S9moX?bf?7Y0RZeDQ zdsswW&Cg1?S>WCA7K*vtJ)u1O&6~B?pk7wz=;0iNGb&mui=t?&131}HMyQhe7>PA3 zi~(4KF~UmA0)RT0?h}{$r?G3R&*2vHJ3_NC*M@FY%c;MO8WiAPIX8-~u`?!V#9gpF z5c5bo{^cnZvQtTS+8x9Vj5?|!hROg<^aT$`+C2+0426a=UdUSwX{uBZLxMG88!2%? z+4##JQ*s6ZN-o-YU+ri)OZzH(C<{6A{GsG<0WVw^6?iwb>qwZY+)$vvg|!0<2cC*r z1DK`IyQ?y{+}adg{3>}gx46^vxwJXq^+K|D7cXa2TCNX2Jl42F*q)KMmtRcC601Z{ zqlqtcA**z!q4p2xY6r`?m^=>GLu!2yBC97XM@{$RLVyuQcg!H(vnS|Bc}~LFB8}f( zCe2H)b44_i!Ik%aawRmuv)`M+l?1=phUaizW5Y%kIK?F>tk9P?OmX%D4j$A(S{#ft z)Xj{WR#_cZ={cV5$D?)F7^)-;dnf4}OXXZY#`l3b(0Q&JmL-tc=FJKP%Uj_z^S#Nw z17>9-*wuyn=T`Hr-F7@dt&P~S$&0N%H-~Y}^?8&h#z2i4J!;r~>y~-Zhh)UXj=|SM zd4T#@b`>{=*}0E&x9HpMScuTrJ7L?Iia!&5NCi23tMoIpl8g8DoM?KX$VN|(?9i4` z-i$3cBEO~C(%7BbSYDWWvgo2Y+pB3-#Bb8a4I?A;>OrCy!Km795z*8@u05q$g znAOpJDpZ$+$~AQ2qS1nJJBwN=EFQ7gZPx-RE$M*FonSb%r`F0e#U*u|JFWTH>)_7x z-r3}qhXE?IL5orWF#)sFXO36(bqb4Z;)Ys&F)oz_2qQ=CJ!#m>L_zEt6tIL&)oW8pDF6rx+q-l$!w%{b;)~+Vvsw_y z7XgwZErX!QY{CR?3aN!3yRlTykB7{3I*48(_obVzTn#B8Rd(F5vp5x+{Q|;5|a>N9PWQ>>zQ^DK3A#U*374 zJzYOds_CHSVL9Dm&f=%cfbQ`ns=Qfxa<8QZYT4=Xf;Wg#zHo?^Bg~EJt6dM&E*_D; zoNt;~rf#jG!E@0<+9gRxrGSz6RZW3oe$UH~!~235`79oQRjZfN4L{PNylBxaEN=wj zAmrtx6!xLyqyc_!;3!;gYCgX%PWa5pwIJ^d{DZGWfV@IltF5|<#sguaF%q41BudJ2 z8u~JiYVk{()nCYhT~jQ(*iJ{pX5Wza(i`Iqv9`Olt zN-s%A$bIkd?Z{5K4ok~h2M4y$kyeDRY&tSOsp*QDQ^&%bxH5N2ehl(a7ckuCbIxS` z>}Hp{a-`zKq~_F;hm!OUF^_)R1Z^(VWAyyVU;(s!$$aIQZuWSI^$Vra!AIOBIco8% zas_rfyt$*Ei5#NPpU8^!8W7szTpF~7&nBU% zF@K#E5x1wHq;brsh(;?bQ=EL3F#jr#cn2hjqsLL`0jC(bT;Y;8y^wyoQw+m-5Y)<8 zdSu6hBX>S*zRm-zD66vKlLTf5g^p>?H>T2oz~qlyRpC4txRB*$M_ddRYTp?|p)G*1T>oCd^ngGu}`g~JJu&yd`tCXvpGcv<%+@)K0%)JiuS^)I}fBJOT zZChF7f@*~Kg zx{cHP)53x)S6^0=ZtrQ)bx-t~zsRM@P>6k3e6`#I$>Gbs-bvT}SVA;}3<(Od@&hE> z!0b*qRnZdm+(_Pr8!{i4xu|HoKhG0t%D7e&1yEa@H)vP-8gi6@G3*6~wWHzd*~<%} zY%1G_@+Vi4>|@4n$;tEc)nREqH0PJ70*Iq-!i&BK?x7zn zPYE@Ak%d&OpVLE38m3d+D3mU2!XikyGEW}UWOZL%A*4G%`IRz#ZY@f7=%||J5-J&5 z^X-B^UeZDaHbdo38m%6L^l&P?C(SNNr-OPsGST7wVyH~E;hfQ+iy0XT#d+Z z+gBK|7yzDWded{Fqw}n^q)J&^D1s>iu-;*;6)v zKD0 zL}EMuL_#i!hP8A6UVu1f)|>SM5VZF$n0k`i!2o@mID2vN(;;MkBsPDJ*nz}$>5t7e zii^|tG%2ejE>#eU#nWb8&EE*eVx|_A$liMOe$8^jA-D<3%9a{{-5C8ba20qgt!D?< z!IEv83uPjA2G=VuzJV;TmjTqgR(>~UHDfv3t2;cv(XSN-AKsz9=-2AxtHQC+m9b>3 z3(8q#j#{N*#?_vns+b25Hp~3U6RfTu+(9a3O*07hx!nC~3%8YR{b@%Z`tBQX$p)7T zS6p3F^UI3-ke_X0ozS|R=^_h~6#$?k$z!i3qBV?Ob2dVckEo~6JW2)_*np|SlkckT zxLoGPx2H$8#A$z0Q<)#gd2Y>2uz=$ux*2FW$HF08jo;85nm#AKCMT~*md^R?Sojg$ zEH!2|&s7fUu=}HM&EnYcRghO3p4FGbIPYkybhaIQAHpbmf}Y(BtgWQ~eiuJb|0zcr z)Q3OGLjHz+<5=3~VL{+m+4I=L2RolC4v(J(P|uBeU8mB8K!Wqz(HHvz4%n^@oqITC z6*t7r8_B_pUt##5Aq-N(hsR@=_k>R1R%`iLu zyHIz+CM&uGzU9wpZ1#RQO@2^$J8W!B~{y{$6w*1j1r98 z_d~4!yw$hc7r*4eJ(Q(wgt$7=mC{?$lNh`N=ed)Zh>4<_V5LZNqCV#9d;?9gd)GNf zI`k*wWGl(-8Bqrxwf5ub7)!KG?wT?E>$qZ;n@(mNzNvqzn?$w->YLX9wcnV!TSk7y z58!8#@Xw@DES)qDfKV~s(pUUJpyVlv05~g3o@eD93-UH;g#<#PZ5IpN+gr8xcy_?N48$fvcO)mdWrxcW^yc=RV&>)s6W z#&6?;w;Kpk_66~lE&FrCD|f9BubT5FPi8z-TKZDhiB<&Ap`Mvb1eeWQ_u@}srb#O z@RP=a59=J2@M#UUy!=Nvts+XaVk|xj8$uw&WBHQ^q|yOPH{tu_z>*Ug_GHJ3-p6&+ zqgW@+r4)_kg6llWER*d>@pl@I#KY>SG(WNV8!3yp{++@A=18X^EQ(6#k0hbxYJPkA zqo9@rIov2Hsw2?LL%~r9h=2syrS=T()p;(wvU4B2D_8M->SVYfX)Xkh8ls-S5QnmS zX0(bHyV|`)B89U~46oPtEUtBeqUu8v!s!%wD@l(=f*98@qy+}@ z;>+A`%U~vD(ugG~DuEy@f6Z&K%y#s$x6aZE3-a5268Q}jR?k3Fsg~i(+I@!~0rzN- zf?xQc$4@RC=YDys4AdbV7Phd@1@q6a?ac*QUU7OuzLp2}mJ&KN+wEb7WB*ETDP|$J z&!%_AJif$kGR)O+3KSX`hld?&lFoXN|1$HN6jQ=@h~vF>DxY37kE>d8a`+wL`T>a1z~|G-qL)_O$^-*SYz> zErG(d(Yr4=EoS-C2h&py+{m`2%w7A0d2{hT6D(%_Eo-m2t-kN*h3Z>mH9xD;eAf<_ zlmdLz4doe2D{C+vG5gkXv2qsF>dO$%wfUhn>Hz;|bj8X?7hTA;#=YAIHvCXB_2b}r zz5D|M{CoI@jG^jgw**e@E}N8*kEAzRtv+?QH|;qr^uktgnCrO}&8X1{QVx?@24(Ah z#GrNpZ+mzJsz1z8BV|k9cwlLtH98#B+t7x6M|4Grwy2c7u%Q$BM$-DW3PX>zXSP)K zvTB9pzJ8C|;%$hP%XiErqn>^C+j!WW*_aj&@fOHB7hpDVCf7wUu z3&nn_|Dy~3!hj&{I`M%Y6q1WMlt1u$OTFb?2@PHK@F793VjYTzDBA>-)tOu>ohHWv z7h>n$2P&(Bzx5>^gyz2W@lb% z+;{zQYVQLSMe$&fi=%ctdb~5qu1SCar$pqsl$sTHU9_EWyYEO=Lt5E7D8~!H3cPE4 zE4x$`*8b>0s$jzRD$Rd#TvY0-J3vWJj9&EaMDWn-;=P7~3>)|3=FgC88K?IrP0*M8 zh&?^gZ_1iqd#2WGNgEAK!e_c>^ARKm;V}7e&p`ftuHBPJJ>Q1TQ>&Le-faUZMyT4_ zhuBQgt%0vhJBJE}Tt_b1;E7J=ZElUCr8$b5Um?1?he6+kb(R?4LWWj{WdMo^b_0=* zp3F+1jsz*+R0i?TMGIw_-ZA-7wiwO&$CX7|72?2VT~aghp@WY=deEUdG+&J-awrfh z_uk*jTnDe0Gq)L9*KpqZd%kOUzY~zQ`wL~+4~u;BOYodQ;Ole-!6D#m3hyv-fRG%B z<~o99Ww~72aHYj)w2yJSnMpmKZ8Ptk z4@ZB)(?Wib{V6@@MBa!PWWp;gP(mzTvVX{hD?z}sn) zECQ~l9nIgpL4YQ{V6XLTo(@1b`wyC`g~Yt_G*8f4I02duI@)1(hi3y_59#x4D+K*M z7cF)QdK?A`((pX!j*zfGEObbZDON_+Ja=T^pZj_H5TKNy3tFWb+V@`NiJ^ktCQw@M zgTUbB*%qx6Ixe|Bi9Y5f0%G-CQFDC``IRrc>ykzjDedWLVV52w17@LPM1(d`k1c** zeL*ryTp4qU96wUO+TByfddE?F2P}Otb{C&#H!LbsyCxB!v4;M=FFU2i*olXtj6*Ru zhIY&|+7XZPJbo>uAZZiPm>tt~TxA7n03$LL{LGcR84w8BL767}i2hcBCVG&3EX0g- z(Z{!*{A$^807QCtMkn1+LB~uy6~y~8wFc5`P4)cGI7F^Ww7(A$uqA*h(*hmKXmSL2 zw;*GzG~U!B&Ik5=bf%gyyJ_~BwlgHD%3T9>>dUJqIc>=hXp;m1q2uo&3hGINwIwrui zuVO%M_d))?*udtNpZ51@KiIpWDb8o#!IyXS(|FwElbVbHo-oVh`)I@bsS_~F2Oa6O zzb+$?VP)Cbv>p7|`{WWg&JpBaqf!fd{v>*xoLyiFVw=!ewrF?8Q@fWyUMQ^1u>6%h zNUoI z(4@Q5JK;BfljFBrl$KtBM!6#v-lNYaKpYHdgT~xM_;#7-zoZFLhQZxnzQx6H=el%% zi1{yIDrh}6{%iI19OK{r0i*wP!&2+m*Z=A({y*RFQ~&jUlI$OQ`jh_ekl%lf>>t90 z{-e_VLH73#fNBUNTmL_h{ex=gKcVFRNcIn^|C+yBw}O991GnF*@R}JK;ol-?(IhCdDTf(`+x6aypJT%sfBkXRY)heZ915P)^m5>8Fo)=c)l+}(pzg)_`Hv4}T+@!_YRsESKV1k%af`!(2j_r_DlD>?%r zH!|+eEjAw-_e}JY*($}(i<|HLcHf6x)Vxe$rT%XY|GjdI`Ih@VTGO`th_?HvAZD14 z(-iV?PJ_z{;jKAw6k9lPO*B5*wV@ACf)h0(`9Cx+1{{SH6t3#Whc zlVGP3G^u2xcRICMA#{A`URc(l^bEB*e;po4Baa77^1iR!>pH9lkXIspxcl`FA-Sqk z#`UXkj=B*S$Qn|FPT(DZM#)5G?z)-$rjZh{LSqvaH9uVauWjKb3|uf;X*{_I5VZm!G;|B{>9J3=79MIJI@fXBxBfP`ut}rmw^Bm zm2b(tYKKxx*VM#plhsj+b&u;;wuf%Ve0%hem+-n4hW>|(Q*Ld&p`u7M6f6&=FDzb5 zyQP8^iRStk!{Px6hwg^qzFGVET90l)mGOs`6NBQ@#cCJu%)dlmRqJc)wl3)HTSaFG zLfjy8u<0r&U zCB7L**d|4yE|RFLuy;DoUID2#9FlTQah+r4TPjsTpZ^H6*f_pjb(5)P)r+d^qZ}DT zUxxf71R_y`9^%^XdbkA#Zh`x;oKFY;GJ(AfMB~SjF8eor4$ET4x$nNoBP>;N(P5); zTzj!I@}VR={Dp8MQ%ue0X#KQ3U=4T=jefom4cMEb}Lc-4K zTnOCh)GN8if6gqJbRs~mqLwcHJk<&gu1^sFqhh3ZCQY`38!hrT|JGgZyJ55G5~Jn9 zb}hf*3huQ!pI_6C{VV|MQCJS$9uL|Gv|5_gQLDlAksDR&rImj&xc^|WxA6XnS?Yob z;KYQnZwwy1a%FqNAz|ma&?xB)eVdrjYj=Li;lKtY4*Mh3QJ)7|2*1Hh-rc?8I$mfu z|3q@-Q6N!#_|daMB1tUVG3r? zeqwX9=w@)q%o`|io0K|=&G?+jWJf=%$(Eh4vtLv>v^Gd~s}Gond^K_omExOoNc>=4|B-|#xEN{cL&@$;ZCB!aYAfc+_wmiYcQJqBlM7%AePvn) zhgO_`BW#8i*xe{k^=$-k^^zNCysHXrR_D^f$ssbaOJSLRufdQ?RT0Qp)wz@0D!e`T zK2!DRy=c%}A#34Udtd^{u074OEHSSG1#I5e{jwP_{L6-G@)Ba#dcYVq zdbYARw(iQqpcGizrdyZRS^ii45dyAX0{k9M(s94dP0u`Ny6ye%jvJ3L2^7$(q^6Jn zN!J)%_eqCa2bi9{{!YbTdQx?Bod|W*DTE8?#4Wm>b0wgv&vPJN7l4=UpVW4wT6p$J zgR<*@9;2HOZ?y(dx=y?FSA=!RI@P>#vBLLMQ~tVxLh$@|-3ggcFcp$YW5!o?^e|vB zFtDe;?2?^ZGU*$<3TD|}h06BJDUBRqIe#+ewfZ0y6i$vgfnE?pf{u`s<6uML z8W?*p;Yyg_2S#hf#Qg?$YZF$Y>lFnnM@3ywJ|7XFgx1#O1co!Wyi1%XaWg$d{cyk` z#SFm;L~`Lvfh*VHPCJqf2OSh?JCw%NMBjaYg2CWSJKqbiv>&6Z1!d)NS|{$s{&cp{ z0MHM8l9y3|ycaVCU+J|DSCUzqO(5%078my1*!-8p`k(zFbK)+B%nucqx_DJ{o4$`= zx|LTp^f+u4Hu*@hHC)Fa05h;$CyRb;e*4|Fhwqvw#QXsWj?OxM96`-08JPRQf@eqm zl29e+76bySvS;-3h=RyAsQ^^u^m4s@)3E?Vi&lnSX@402%@_7|Jgzltym-b75uOx< ziC*K~9l<|bpP)KJm$<917+^jVLQK{y!(->QWF4?cf9&Zb*`O3+j zeeI`Z`-@%$B-r&9N#76)^ z2b=}K<;|vZ=Eyn<)80ltoenJ*SfGC4hil3ueXvw=vvz*jaiyV^cszY^JT^V;k7*Y- zg|WAkMqP6Bz`|Ob%7NraC|3hX6ErJcOn;Ktt)|uA{-(mQhrajiskOEj;4J6Z%VNLF z5g3!`U<2-CewADQc^#y(FKU%$(uc^IvT-bEY z5iMGR66C~C;ZS?GX7e3jq7jKa))3G2F0fpW8jL6|`R@GUjk!sE&a#P(b`OwZ=$LI2VZzeiMZUcJ`XKdD;aeZ&#Ut1n;A&A_BdNQXS{pcd0za-GeT~&4aZA!%)ro0 z>HR^+EkJDxNbcHyox~F5jMxM9h6Oex`gWDtLS~YMN+?$dnJi>l%|qUN>awwz*vvBaTVDR4rF`idZdHLI8fOyvWH+an4j7`EGwl>rM}ae_xUOB>3UJXF z;(ovT$H^cFZhis*;2EL0kCl1TOj1WP8d$o%NaTMDjByjIaO-Z&E3>hz_d6;PbW##l zy`!Y!)v&Z4Eg#<|3}FR)&*%1*UAoLsSL4KUps-6k--U~F7+Y-Y3Y}I*nKoG#ow;_O zS?1PGB|b2{o%Yr(xEf=?FATBMKaEh!f~b04@7aCOJd3Yf5|0Z0b&N+>G89ioKpkb+ zf=Ll*3e+~VjbExWlaufL7;xBCMVBAPqD5cn4C|^%&7G_6TAJE(_l9M-CAEFO7NN!n zmG#KMC0YgEJw>BbkgVO((msX?~ zo=|zWEB!y>-aDS^H~b&ZC{&UpAyGzA$gyRW?1MN-M)t8s2$?UWZJ!g4J?h9Vdyj^3 ztc=L6?3KOO?><_}`}=+T=I8gH9=*;zuKT*K`x?*ty2@__V(YU5I?p^h)k5id3aH#RpCN5&0Vks|w6;@iIrk57zH$9zLSV5dCbVK;K2rKkJZ zy3Z5j)a!0_hPo$5o*CVmSWMS&bX~ikB^94c!?~LIB)%S`)cWieV})Sf01UuWB}}F9 zFj#uHEn*l$d$-vC^#nfkt~fdy(NTi!W--4JUk_@hgeCCyFC`l1eKvfS0ZoKK_AU9` z<>}vlOH;iv{w~K-g2bGdU}wsFPJ#zTnZbCpTTlP6lP{AU?c{@Jp}GeyySdqxDNV3T zQ|4F|B24@Fs$+!mEiX~E?pzQ#4k9Y%PnErx&1$bk75FFG4L9f&aY-l1-gb8xdHw=m zo+m-^um_MgJP&cYvcAM+J`4M*gkfRB&|3*(%Gy}23m$8`$FnZn0-2gt@cgpJaZc42 z1}Z~ny7mm5?#QxHB>`#BRFRAWpRAGK1}(BK-g!N>BWxy*@CuYUif1perSDd<9%$qu6D$Fg^P z0{pUz=trD=X}LW{fRU?x;ze~vt849~(1-I7?c_bnYWC|q;*2TpH_M~#+&Y{+bxhWg z)8mI7vQ|r`v+Dxkk6T~0uf}Fy4z;U%>CCBJRcqSYH|wr5o9tnxcHRNx%I=COupL5{ zfwCA-o~_B(fh$eiCtA=hCwz|k`L&{99R>LOu_XWvf-;Dp007)F?Tt*G>xUw-A$Ao| z6e3ffS3y>3ZRxp9!JkT{CeMG8oUIST?J^?F>0Onmd&k0nq+Hty(yXQz4sfsaL2pa} z4eeBt=W)%KQ{wVU6%;UYZkS5L1otpeWpq+*MKe?E!sb?B{>63Y8C5~YG+AG9@JjhA z2HdTwMzW%eCykfE%Y)_ozgC^&e{p7x{dwVV3vJA(%>eA<4k2~?#C5P2+a%T-=7 zf4uTruC|C1xY)Y$+;`mtLw>qVfT!JV3eg@$fWg1^=Eo zAbRei-;?fjVCIWOzlDvik{dBR;%^GK?R;IwReVTkx*++mJa*V!`kZ`?J8pRjsAWl)`` zdjJAjgywcBJC}7dx!qG$IHQL3T2BYJip2JmKYPa8<5#ZVeZQWeqI>IPk-K$ZD%NCn zHdE*3io0iTQLpWEcmcrWN0nuPLWRzgQ6Q`r71C073CLkqB&^9s89)K7M0<^w~+RjS^+pk?X94QHA;3a9}LI$o}f6eVIOB)pqHFVymgshHQ0tpmhiB zmy(fI8cyx70`Pc+tzGzPAV2~0iGjjNQC+HmihSkJH|k6|P=jN7U@Ybl5W|~s?DH4j z(S?09{QC9*zQB#PEYrO2Innq`5CNM43ZpKsmGhUoxz8I^zb8e~(cm^lH9Eo`p6g#9 z%Y86Cxq9eC(&+ljO}Xdb+BE8%kSJJWWoXJT7vB~lj1vy)6XV}hmMAGQ>Y^!uT*l0m z>P~!g8j;X-G^yj86_ViNLDyz(Bg1ZoerpT8LViC+FHHm7CxWLQeLTB1(rK3He~<{H zyB<_)tK9=^T+4pl9dOU8|m3GNWOC;yZc=E;KK1Fv0m5imQ;a;$b6w(l8dul(~}-bUyF>H`!|!H ziR2B;rB2tz*bD~4>TdQ$$CFKh_m4YIHTAZ;xOo|pgwp}yiDCY!qP8==K)?HZJTdG| zy?lR}O-2kTO7tU?gMV=W?1_P^n0t|1gBA2GF_1)g#*m(-9&C0E(s5MjLiSr~Z%r-M zO$;Q5e)UnDjwo7K6zDHKYh5z*Va%E_61BBFK!X)}%C;6Dys@I)(z|?-!rt)Ph0N#< zSihC9odP2NjL1@hZe(wjtBF)=Ai6g1-P8(ceWYL}Gh7ouRb90z@wgC%`Fr4P{l|Go zJ=9gptbqnNm7k1fK(VVIE}Qp(AAEQiNw;u%!cF}F%%c_a`kH=G{0FCQ>ki7A_ss&` zR@q8;OqA=EbEEJGI?WtP1iE4k!9)FvKPrTF+$4NB;?WP+v_z|wjMEcHGxY&jYhg>P z0~EX7<81*#1mwr->VLb7RXgq?h~s?Fe&fLE3yWr}f~)9@#7nD6z*@9eXp{i8hfUs}`&|@Q(5u zt=~Tdf1Cs%2PGWtJ}P5dFiu|HP;FUkG(IH*-c z;`XKN_h$()ukWDijXg)ZIR2_XX}sfR-SUM2b3N+dnQx;(Ab94S5{MZcbrRToCT?ul z{f>$7SLp2bDgTa~8QZ=QQeYu`GWtc}?UT+0?mXeVUUMBy{=dt_8~^g1;Y-~OQ2Re| zWKbiQ7Fd5KtLv3wzqs+oOqXCkLp)jek^BGO`W5s)IoW^AwNwA{|C62l$7Fcs{AaFT z@y8$R^*>B}utey8?4t8$nz;QKim+xmj9L} z)avecz2n~AyW{wHy^tB%rCjC_VLVgbQTBKDDg8FM!fjcuPQl^{j zM~%ln8U@SDgtmL(*BXYMKLY!63GYb9C<5;~Q{om@hk5?03l5(71pv(7RVmD;hxWIgLePC5w&j=Empb(f~6zI-xS_|^;Udq@>dYDGb zh&5bWVn-au8Aoqs6iHboLZe?)QQD_}>4Kj-#g76KTOA*yzppf9w67KPoOB`;}e157hkI&ySgrgxUSq+1_FBMBoehO-|+auwKk%DyXiDgR$BWC>4()BtoXV>spV0~mA41K8-&f!eE>f(9SV zq#On+@IRny8rY5qzo`>a6YbLQSm3?kzw|gEG%$_^32cz{^>h^vda}7}6)RpI+aE)K zM($Vo8Vz!dbMbIK;}iAQn71c$8WG{`oy?$mc|?mAY~>QM{Y|zz=}+uyfnhn!KF)WIf(m7C=KRAM*iq4M7uM%#?jFB-ylPq5 zOrcd%<(F#z$$uYDd4KM=p)me7`&DtN3BVh++FpLnY?>Y!S>CRL`3yh4IBV8|3-unM zXZ=1xpLQPbK>!qaD(BT}rn7|(90(N0yP{utiyur>aPa+>V>2ZTm@1wwd4Vwu@ZkQy zrs@9t>Gd!q@xb`?9Nlafx)uru#kf_MEcD#gzP#C>Ry=CNCc=ns%<|je!T+%dw(F?M z2zxWlus-lcudhiJM)?sW+$>RLNgPDBDs^-6T0Ko_c^4h)u42r5B-Z`Nwm;vt zf0-Mkvx&thWpUS}as-vjX0s0XcW3EiCm&(vUw^qqHD=)`{aK> zuDs|T(>>lC{HzzSIs6%FTzdJ;#%Q~k1J6j%hNs86IHbu$H4w?i$AKpM3|m<`fD_d1 z;XY`Rb&bo$wsbS5Mcm}+)0%?swlHz`|A0Bgl^#f-zN!RY@2&$D)&ihC5-|HDZ^cAF2+JE!DeV za&bCr(ze>u*;7Ka9E$0;ZJKTZwMfJE!+6Tf-vO{0E+CZspvm`=iI|+}Y7CFAwcaqL6e>)65iG8*v-cnQuDbFRLkJ?&G(FLkh047 zU*Za1bqU(^hcz-1Q!aNef0$n%n_8clT3_j%^U`9k2`@GKCWTo7iAMT*;}7cUzA@9M z^=H2(?m`~^K)6BSQFJv+&%13&XlveYm4XbF+DjYq=9m{sg5m5U7HoQE;&N;w_pfPN z?1dUimeSQs)8zNtQW#;~eCt^bz$i2M=HxK9W^Ll(q8*l(TKlTu&0}!&uW&a?lfcsW ziPCssJGH-%h!Fl?ek$a~>p7)8OLSE^%V(%e^N&w8X(0CnQ}NlES)Hf)+)MZJ6=ipm zlBLA+XL)}2riej(93kfOvhCc*(d%qq ziWxY0{q)%`WZ3Kf&!yMFGZIXH+ceKuuKPE!PNQ&jrF zC-Fv-#>v%+=JqZva_H~ndv|IPO|8F`4$Sr#Tk1~OoJsgDYpC<-%E?*x)<;#3V9om+ z=~B{ypB+pnHS1!ep^mbfznsC}3i7YmKKrpdiB&mmd8Xwcb3P3$og_H5&Z3? zRG{WQXUPQ4N=t|MTXJ6vq`A8g(eNM3kR-nb&bCE5zjvt)w5^(rkf&v1Lq9o?+rvjRC^Fd;!i=xKeOF=nLw*XY-@T>$BuLGc^&w;k4}=vY#%vy9Knx&nYDT~K3AM7wYMu5_Ru;^ z>k@DS1DlidynlYEgjiJpZqu=HWlokB6+b}5){;VyuT#+GlG$@v?liXx6p`14fgOut zB3L~3s7zNuU&oSDn2#J4`;uB+kw_$Lsf(nxzty;E)KvZ@J5^iwEU!hCyxfLrZ960N zH>Hy1pG*0*5=kN_a-pF*-4UN~9yNh0bU9FJaY4Tll1d|AA2{4M3KvW~RQlM6r2{nzfmxcZ3)O6&*rnICf+ zerAXx4)O|{SqZk;2!2a=0@d70MP*TOLGVbBiD}t+FeP!xwW`G#R7DDn)?LdA*2TsR zb2zOO;RdDLG9$q^Mfbgj$&g9FOy0C%FswxD8N{%CpXI>&edN2Q-}y(761j2j^V&4_ zcNF505@8ke1SgDVTP1HcVCpe2gYA{@0*+`Z4N8q~Pyge5BtHu~wbx_n!(j%b4;Wu8 zQyi1IbQRCsf6Zd7O=K|GugPNyGr*xQkZuJTuTzkruB1?(T(XSoi4r|j1y2E-M#R`2 zn30>SKI=_@qI9QHV9_Kp7^)c>95oj-QM1GmlRF8YRh$caS~kzPe-Cr*qa&3f8X9c9 z;;@tx!JEv7^dauZy!ZAfhvN(h1^(pev*HNK3!Q>C#Qdw^<8TaKWaNb<(4nCxKA@&O zsriCr$kC{CZbN-n=2miOd6QwtjRP%;N3k_GGj$VBa9UjFHK|uau_>u1%BoyfS2z0f zn9>Lp?|cIKD5*>oa!#@AqD%H*Q;4jhxb<*{Zec-xl(iGB=DELS8Y!5L3JH)}s<#c;LzGm5$dD2*@I5gzxu%2_07Xw4~5N19&vyQ9_O(mmB zS*?7&df$kclKIt+Dv|!1+!ZMVwb`uw0`s={r+Nc;$GLuDf=9b<8jS%@K?+Z~X_o*QdVwUny z(QZBy779Us+S;b*IcIJotcTddN->o+?%w`t_BiYr=C?;5H6E9_eOszp_QC02Gya)e zO-6Fgns+ zns61|J%;O^$}vk^jx)Nx{NCZO`6RCswo~$Y-bBvL?ekeW!!?93 z$KCS}F*i47kC2t=vo^Z_H)Zg@W1=G*KE(?w_Zu7=eoUKGQikTCQp$X1d!02H3s065 z+TVCM?NmnxHXux1>lP0-yymH99F;zz0Q_Zs{wja68<5uODqcdG#y(Z*W?{75hHAi%F{ZxE%+v zJK!mvgZpoL@7bvFGq1s+E_8BgYCZ;L&d79V?zT8W0k!uc2-o zg@WH_gZT6Fhqr8q1Vx7BahCjxSid9KNhK0xpT+}wIKxY_`q)RT-=q>kX6{~VcqMx5 zvkadsNFni$a_AXOzy(UBQS*n2sZha7n%PGRnUIIb|8vMw6jD#B|b0iyhF;azz8G z#+Ml?I7(`WlPj}b1HboHM7+5iJsJ!%VH!M%U~^hakotEY`@BPlyNqy;X}%cOqpdE< z&>(DaqpGlyvg6F3nyL3lSVaeM51h7kU{U+hFw^0QedKV=LB(3K*HPIA-X0D)ate#0 z&t`;<HQ3 zUoRs0eO|wG>`H{>b-<9G4kA>7O-y872#B|t8w)=+D8qQ>muC9Cl@EX&p1QpM9vL}- z6fp{iy*WhB;Pd-`f060lu?qC;wYE3=FCj%jCDNsSG0X3{Ii&X?uxiFqDKrQ+mY^Gd zD^Uoqhab~|-G%Re-^Bo@y+B#EcZilN`w(oycJD!ZP_NO`dl)wkP8beD`aByKfMZ_C zwI12?0h1Q^pn2{{4;>b+Z``wMr^kQ(Ek}%B!Xq*;4M76Ru9XUck?G^mWLzoTmyii( zl`j9r$@U`djqWoN$lzxmh%VKUb8a<%zPNnW<9@7t>~^(ccUR1$K6czRX~Hemhy zNRu-%0$hj_reiJ{-GR%=z-zLvhAc;&kMJz7sSZStY04Sapx zMN~X&mt?6);+J}5hmn6SwL$-Rwn>8;zJN-i!C4uFj*Qzx2+dpzb*RtGj@K}%(H68h z84uOAQJv_>r0CI2rf=DDe;E^Pxr-ym&HzT4zh#JHluCd6>sk7HQAz62(^&ZaIFmGm z)#5YQXDIoErv3a#P@Vh55l|&Q#BsbRdMPQ^)731K@8#wyj7{S-&2QowLlHYFB@m3f zPd&~p97gRG@rEPz-ZwIpd6viQ%!xXnr37(@$ns|+3dd$?nxQ)U)Ax)aP_{ek`q|*6 zkwg2BJ>SLEKUEY^f`7(~=NM^-Oag5Piq9Gi4x&_U-pmF=JAj&sG@qa(*|#;8@^f^- zh3U78Z+a{=%PRQM-EQomU=V4$czQ)>s)^<#so?GzeysS>-!n8xY;T<9y>>XFt4phU z1Ah-)}+gHyuC$^7hGaHKIBNmcFa34><|IkQJPG*ccfSaFU7A2 zd*7jx_qF-m5Z15oIx8h3^J-zDgL`|ST^`zufZ3M|w@3$MmM&@OT_d45ZB^{tswBwi z*3u6~<$iU1m+F+G-qAL^7qIo)n=WPJ9^Dr^njE)zwZ+!1Mr-AJO4Wjwr;yRSmE(e& zi|SU)2SshGju#E;mRbxGQR>CYz1wYsi;Nx?Z3ew;DWxi>QGJ<2yo^qd+k8_^xlOC=GZMM=) z>cdqFigge&GHv0^NRZm+%{Bb+^lGUt3BH{}^QKw{zywibc3X9{Zn@`?3={v6Ye}{p z#aOQiL*6|fpM9S(S{ci>qMsd8S_f+l)EsEMB^qLl62IpPjHJ=q1oS7(ohgK zG&GEZI?L=ZW6(tC&Zm|ZwY#Q;;HqFHD6i?yWN?B$$G@`0LwDn}fX4CGzkc$!ZjfYh z+>wfwi;=K8dhJg()&6fV^tOk!44*}y$g(=*jXt$d(^DZZBr=g_UANm(7atT2@}KkQ z>*-&e5#=}Sb7jT)*PAnE%9k$n9b42BtgngXzM+3=VN$I34cG1I{6PBjn^1;ROx*!Q z)xO&JbKU?{l~l73)bR{xbgN}YUv^%LwpR&dwdZNesSZz&$gR(hjTlq>wmF!Bl)#P8 z6X+JIL`$ZWpNj3Q_t$28UA}f_%%9h4C}X={_`xXdg34`W2Ga}kW3NEbZo%I5ms4w< z8gNdXWj7{=0W)Y`db-@9>RxxDN(voA>U*@^`?vBWgxRJ|H}Q~?;MwLR6~;#)Ln;ds zw=jXI^z`)caH9bB@yKvkpu|=|U~%`;7n`f@_v4s$F`)%88s3ZMXbK{?Ru%{&F=u4_ z3puUK>`$p8#Eg{UZ%w^r(-t!fuXzf0g^JfgHS=KW?ob+?n0YSOH%smd(&oG}OE8Y% zv5tvnjkT*JF-|dofJ8JV2Zu-(Mw=6B7Cr+ggt}2;b|=lE94+QiRn&k?z-7nr<7UE> zITDO#cS)}op11ge91$k_?p#&bia$%);7!H z27+EMGI|3U6OHc%q~Qj0Kk@U8gf$4PJIr!h%q>TZ4Bpa(?7KoNaPSyWO;F}ZDn%nx zcO0N1ZxE3jxsk@I_ z`BIs&nXM}atWBRa6!2XPRTpE^vFVefMcXk|3&)t`n zc%Lc7yT|vGhnV4jK5xof3-t37T7o_s5pl+*(fZzwZHq*U@ZVQ+<0%$#{;p%}8U@(# zrH!g828KvdR)=9S9ntlmkk|DrXc&KmtfrmXWy2ar;t4$v>xhtfJKw53l}TN?a#Kp& z{+*0K7yPK^fnrCgZrEp$5{cr(mFH)9v}_9d#RVHaLJ)r_pUGg^yCS6o zd8h|Kp`@|Zc>P%his^;q%NpQ74ItU6+zwr74=RQzfW6H76sO=Q0MZ%borOQ0S-b_x z6vVkBM}k;CyuQ>izWcaywr<-}8`o7kdMT{3{p*w~#v^%Rq~D6y=`L+)EV!Ja-JW~A zWNWqRT+Xq>S-jd9vL(;++-i!oaLi5FzVOVd14(^uB9sp?{Fpi5HS5=|pyqXhcMmlg zTNm8`gGk9Iw^Bc~i^pQ2swIo-{be5h#~L3!7eJoi(s>1}mVJ>YKqbga9WFLet`SQk z4z4DRyG&r?Fg&e|0@)MW5-P9OA}q&_cf8^K{O zYQK>Z(j11&Q`rvgt#4k`acQjzCYz)C^kkc-vmL5h=(Id!?H5sibGm)gJS=?HbN(zZm1UWZoEze2ZBSnVh|k!}T89hf0N`433tve~dNZVK z3V`rdJ7!Ovez$m|E4FE|vT&CV5+skOF~wypT-!^zG^eQM z!Dj+$^_z25H?=h<$au7MT`k`RXTJ8HOSuwzk=wm*%`7>c(Qxfn zJ_`m$bxt{l^&8e8E)Wzs*KcuGC~ zDls5yOmescbGc*dX`BNz-PMTQTvZUe-0{nO1RRkizvGHkqsUDB7E)BKT;CA##_(J6=B&_E?PGc#yK5Putj5@>y-qvih z3W3v(t$>bOHj21hTIO}m{2tiH3l|MKG@gjxOi@nmum+7Ys;#0R&^jd**dcE_s*A4W zo)pFRG;B_K^QJl7rQ3x^6;wJttR4G4Xg1>R=bM_}uK_+7!wCQ7qXQ$;5;)78l36~% ztx(NLYpWX1FCV`lUptyb-?R;RnZC%Dd9rph%c8YmxltYRaDEe_9{!#*dO1rF3S zoT7X;@OXX_s9jK7Blg35v)rmipJp0&>LcKqe!f9Tlw_x#s#U@#*f}Hr0Y$F3+0iGi zy*V7iZ5^w(kV`Klv9(x#Rd0~V9P78B2@mWmbxXzLz++$49cwU!VqCCvd}cv9M@k;t zj=jso?pRd$^qF~cS62#G*@|K0nbu@PQkG23=!nw4xBor@)IO}AJoCfqa2WmlxqAA= zjNw{lD7pLAMvKl&e4-(H% z-917(-#G|e6H^b}zXBPOc|rcqs$PgQe{=F+OJlbBPE zR;kGVF>KrM{`>?aU*uUjZ9gu=nkklkt2566foRphS-h6(ln^WbIO@GQGpE;(BUatB zf8x-7lnw6qY2W+T$x1-q-4wUw??{idI(VI>^5yB0>~t>8uA;Uj(10rK>_fjC3@|i5 zJm2jq)kCGTPJo%?9Q6&yPnu9se{{b3y5)0Oqqs z*eAEKq`pf?KC&ePN;3^B8-EO*ytc@m0JqQA>EA@%zyXSw8H^kH4 z8cZL?`bEokHR-%mIT2unQ%>#jtz zQ|b8Fg3#-o8N)6|IPG$UKCU49>%m>N;SjJ5Z^YOYYgM4lY09oaeSYkyn%5tSKyL8+ z*GjaV>APJ)PH!Al1v*)Dz$w>@y_L)TNeL~2E!ZHjb(gt>|C11WMdo+0iylN+h8P~T zUqXI6x_@og<%9n-ZVu3fqp9FF=Zj7>t%PSuN_x6A4RJruC?^CqH<#b`YRza6I|8&c3J-o_ zlf4iuY&_Wc!22ZZt?%B*kP7~?;!!SUPn@kgPszh#>_e>0b1n-N5lMGA>qk(r@hM;` zR7E5;GzzG2RhG`?K{)K|+zWv}O7EvzA*q9xVb)_@n-yp~f_LV7KX|)i-FxA0^P|0c z6F6vacVgjpRC@s*Q=51FllTB721u_df(2{!d27D|r{+h$>)!qO=M#`3pqjsA0GtTP zyA*%e`{%v)|0Iz7GrO=mOw%m3caIoAB^)u$C+l#SYA}{z?*}>H1Hfwq{BTS~O~KwA zUl8ezxkCj6n&{f{pDjYaL;(q|7$7Y-@(pm;q$8aEeDUjpX8au#>ih+8Ga>W9fxSyO zyW{G^|F50HPAD30^Zx&I4*2u`?fn0a=*N2O8(EE!v?t41gx$D7kE`g zQSn(zEJz-+#sclI0a8d`0`3su({fP!u}kxJql+hWbVru5I)p(Fi{a`9Uea6?b&3`0 z;3s;ETpOHA5m2s6zm}1339rRuO#}@ z3L>gb(ec|4e(pIR5&Gi&Q_r8dzpJ~>Lk-XepW$WCw)n)M0)7yF2AEltwUy*K{7hZw z;8FpT1v%Qzy6dlMQAyN3;vnDuIL6ClXB!`hSr|JW;`7(3iXr6_QGNCE>8HISHR8G- zuZ!n0BjE@c!eoD1vbh9l@&^@xbo}BF=XX$j=$|`*X`gq_(V$be=j^O;Z6MzbL*|@e zc7tP1Uh8ex%qlWAd0o#GfvsO#ocQER_UXZwI^(NW_#sgHJ18WtNmc0h%Fa2|wl;ul zqqyzx>P?D@h6|5}*}M7`3}tXNiA9wH_YDu!9ZnEH8gqN=mfSP1L{pk(WMsr|@+A|X zykAp6A;c`(?aao;<;JxwAP_v~#2YI(@6NmJJWr}1a60>0GB1)v(xjqZ(!xjvPP^(p z`{C5HqoE%zir(Fu+zUEQs2FLWW zHiFPnVh<3gw)pm*U0T{l|2_Qum6yW*o^K5?!2~I7Z8a-**hWu%$Ie*kh2@d5K`i0P zjO@$=Z3O)H)1nJ&*}{OJ_+ZPVt@% z1)zWw^H!5#Ho^>z3mO@?NYqRs4S_X^^aUf7E)2$So<9(BA`m3;rx-YyuLiLe7^|~6 z6j~ufPtk0Le<7gw55&$)B7myUaOm*5ex0j4+Yb1DXYUULa^bN@ zkg@s?NYDHSxvh&XIfJbt`Ae2Hav3(mv&t@Ik>`%`PQ2A{J|?Ip6NBU22QUzqc*E_j z=yy&gHTXC=7jYz2=8ejJ(e@_&MTPq)QS1qx|8O zmmB-^xa6SvgD?BgZvsNiGkFpp46$C#2orb>`kwC@O41eJ*^m?BaKNxYTEYtyUJ@EO zwscw63;9RzJg8y}S=cypCiMNWzY$pgp7lkA$VAslEH8p*is1}OMoMP#`LzIaa6lLg zIj99)H>wh;_G_Jh>kj*=`>tJgPp)WJ=tt3%$kPaBs8kiX>QBFaQ{qpvy4J1`+!M( z&4iMtu4&6RyJMk?ry%2&P1%Pl$Mp7)-OEGX($eN)zay7*@8zMd%B_Jl!kJf2+KY{8 ze*@uZuUN^#{hjhhZ#Lg5zf2b3(2$oqY(Pl$?=S#4=ESGp5S`v1J!hM*)2k8_dsj+k zE%qQn=Jb1&iXNXSmct&69A}fJH-c*$8EFlb()NP zVNi!=XZChHR21cW?1{K3^@)CMokxk42L%3-8?$o&r{`^DDLK-jysqX_$S5U)dx2E+ z2O4FTzC?|124vPuWt(ySaqnMc&oF|JWx> z?*XiZG~muP)YmUm$Ip?E>WEpc*GIraJ}Mi2IR&wN+=o|Nf;V)DLjMq^TDKyXw-`4pO(x9$8u$76 z6+vc?kYq&kYQhf2l~vU91wHiQwb%YV2v??Px*425(Th$D_fz(Pvjp71c48$4R+4K4@*^{ictdM)h3x&HN9x@tNZ!wbH8br0>zVhLS%z4NZo&wh~{@- zHUj0fkws}8{@)QB}iOzP(ldH}*>oLF!89L}A!P2=Ub#()E#hFSjZjFq}gP!&JF=A?A{=0>eh7)E;PUocBeu3fl|@7Dy$L2PJ}FlanmH zrq)RD^5skEpEz297pedlTdP~>93(1k4WPE*j`dzR=F6V-DYfI3^fS6PKicfJ7xIWt zqs>$|)IZ(gH++9m{1WQR7l4Uv^%|@V;a2RsxSBoK9HJ7rnybO}T`)-n#e)LJWILnq zMDm$*PyO23hm;~$5ecrXiUd?<8a0F<3egbcyI5PUn&9vq=$8H-an33@7EYUAVQEm~ z*_kzD@z&SE^A2+B%gHP6Nq6Joe^KhSh2)%7ZGOW>H>d2fQ9ba}AA7}m74FwQlu%fx z*$}b#vcZp5*gh>nz#5y9nu@nd)YO#64e?Go>c;(}5CBE)Ub}V!ZEf+(sKyVy_Kp%R zo^+qjdA{(&D{9SW`kQNutIK`xH-2>dy5JE$)49-4zV{f@pRVIB7w(#ZpG zyfwyIX6{Zjs(5J9a}G3Dc}3_C?rgh*8AnPcrAga6P;?m=prno7x^Q#7CXuc0*CJuM zm39YTnb$nN^gf>VfvQHw$63{QlD&p7nli|}yS|*2QBV(wOW;9iA*$+vg7vjWf&gSl z6UWjtuxmv>|NI6_c$?Pn;F6wGqN)KrRIy2i`cUtsB7ix@ntgX{?(CUMSJ?{g6%g$S zFdRjDIllLcRmYTwdc}D>R$RRi0n<%1*3!~?IvgDA+>K(&IBxp*p_g#AUp+UoOOdc) z6?-N(vi@4@#EiE53w8v@QDtvlq6^iFi_Z=v8XKQ5V_PKGyVXYeuk(5I4l|QWK_Lf1 z>RrfL1lxs79=wf12m4m0uA#ym4$Bgy!Fy{^^RXazohJNLjyZlP9)v}ZOin39QZ9HE z0oKJ*k*bl&PV507%!R5j&aXi)PW)>ygJW~20%OeCTi45#+3=f0&AAI2RXM-o;RqK( zRFRiO1HU=)^-4lWy4sy zaCsz8YewVUiiRfu-W}&wTJ+*R$9i+(x#OtA_vz0A$gRCK08-ivPh)uoI?$95le{(u zoYwMAeFX*(;j_9r{W;2zb^PI=lwTi&YP)lJj2fnZU(j9QAK(%)r=?WNo_L?#t<@V9 zm%S_Q`ipfwz9G(GXLf5v2aERcnE<4pfHJOOfA)c@!vIl7LgGKX*BxgCF&MNLRg$77 z9HaK|Ff;PoaiulFoxT3$&Ru`d5eEFl@?={L)+jltT$az4C{edQXDZxeT6AlZRjuZzYe`&cfseI1$g&!@c za25JVblK?9e|IPu$Kt&d4*RxWh?bX?-mm#XTO`aCeK?c*gB+LR-Tiw+a)zHk5Dzlm zJmDuy`c6cW2!Va8W>0u=Bn@TsfDQ8Hq+~|Ey@WItryWMi`>>4dL4+GW@%n_eiu{g{x0*|m!vVWvT*!KNXm_~!&a0ByfAq~2CLf%uJV3-CBmBa@4+L)Lok zN~0HT)OwA$fr(#wc~y2zb}cUmlmE?fl1@8O?j=n=r1A0E2SyN9fHs1j8g+oT%7U$y zcPK_FCYX|!XPcnqpXf0}NR5ZQUMVoR0T4~Y4bt~NnJ}IXSC*2Y=My%PiJ5IEsx+wa z75VpIn7qNc7@p3#7y*M#D{MVywbp;(80*HV81sBj#Q$e{x+#I3nd%#ME|)d65KYg? z+=K(5hTQ>PK+0cel4f+L#mtr3*tQOfiURjAQ{-R#i$61~ot$S+wi%AauG6wxL6M8i zFE>i`!k)~CG5+-G2V$hbg9@D&n{M^2a(e^ZaaX~1IEV$(EO?Oib+YTH97Edd4a^_7 z?%B8I&c3{3LbUcQ>u46C5+N3DN(ESv&uxp&Ri*nv_YGk;s7Po)=7{{g*@nTRDbbaULH>x_E zYd?g0%EvLK6fL4oep>XF80Zl-?oD#~I(OMh0-ea+S6anR*3wYd3$@+1?+QSz4m?sL z39Uqf=Mj>t&38#C%|QOSNqjx63)bA*O0r)w^w!aKY zQ4HhCn6l1p5EuuIHxch1l3!4#-VJVGx=sml6V#P-x-Y|FT-f^cLgU3!Web$Io9srX zqV?SO(}e;K>&r{3ktOAN#Tt(es&KZU4-kS@nf(e8q{?jmCmAN%)92kc)P{W#rJjxW zrpqx?0kpg__#SsqM%81)+}j7QvmanEz|}mCwU3pL zu?DzRH9hxP>EvpTBDPHCXlQE{$%9@3fTvTq^U(>)vwz(@T!1xoD&7zAVg2s2&+D2l zmVO;cUZjr@;e+cXXWp19dN2-|Y{*ZE53cmoV4{S1YvRkH(<34aXUs$eh;;$dLu1|$ zRJpxD!sz~5WU&qLsqymkq=nE%cll-{!1&pFU|%U=!t^{l7cuYmjkP7C#y_Qoi2$%_ z8$dIStm&xPeD5jDXhP~1fMTq-Cn%lH#kyyWcV?Sz@h5|takw{W=tx1^7){RV-=u_q zBKwP$C}va7Q%jl@xg~`>q93Qy%-si$JGRXLTJX7qU%EMfjaG7SJ4jly!9G_MaC$Le z8I+aIcOCE-yrHP5*of!tZ;2?|sq%~#`Wvf?^5iNDLg}S+a-CzzLaz3TYbB^N;zROo$ zp7_>^Q8m_>P=A7Vs$d`hmtK-_%`Yg@rl{5_^W^m`EmU_Nz}^fQ6HbBtv?*9@)l}Zb zs^{ifXBVmrw4wyTn}M^tjhQZx%*2)wUvQVe`em~_)Ig@aZ9a>O7D^LEJ*MeX*&>il zbXU-Nb&pngR~()8&D7@v;;Gsl;p%8n&+@NSi~f})L%K#drE8N8@8Puv3&ULrW1+3W zhND3pj>ffS65XK4wo&o6FO~9)gJm4d(CU`#e3U(oJ;U)7Xj+)(2>{L>8AItb#?)-7 z$;^sApi#Yw*djW81E6vt)N>sahLh<7wbF$+_?9Q(Y6jN_ZXrxO!YL)8<&kpBN$Ajl) zW-H$%zkvGdZ!iR)09vS&{0L$$1t6WG(Ry#>hy8*B!^u3A7)G?FOu0)J)U+iY9i}zp zURk8Y^jBHfgZD!pa!VF{N^TmLZbw*Vyg32r4*G+ZC>J(!4$BVbkYz!&#|DNs?Ki-C z1(IZ+tlx40#Der1*zD1a(L+W!Aq>o3IrM#_Qrd+&waXs%ib&h_uLc(Ifx(10_4M$M zc`qEl$25owU5^%-Q*+d6yc4X_5geAv^-j6zQ<%0z_f6C8!iEDLvYX{(<*JKHiciP+ z%iW9a=5(<^5?WRL_MO9}r%a!Dr5!iEo#z6&AwKIJ^{Yjl>t>sL-jUiP;IiKwJg?w_ z2|0C{pUeLiFanVDI(N%Yvfu$WMw-Ir(dTdJA}uTq3ec{A?u#at^KTDv-?c^^+Pxh! zZXgp&$I@mt!(ld9zv|WHWyEE7$Q@1Bee3q|c-0GR!-vE2Sksniol>+S-8Pe5q#U+d z=hUCA4NN9E)M-1j&yK4$9;Pb@6G%fugM5Xmu?2o#-@>lOpmP1#)nU1lkumHSg$>(F$0|3x(+ zU7+~WC+(^kGzz{iOX@afiI3P6PYo|S;dWbEOqakGDryo+2@qB9-0gV9+{0nfkD^T? z9fnmLVwNu<%TB*U(LZq*sh8FHFq3NTJTg9;e=X0FRYy+DyMJR?P=M;oeG2i%pBw@i zF1P221Yb0OrgA|^W5+zxLomCHk`N@nocQJfqS_=iHPsr4q)v+K#y!7ay(q_M(!k+K z4l^r7?|!1_MGxM^2*P-T1KAOp2m(<4JD&x^S&-H_N`ZF*i} zL$yF1oq+RjA8Ss0lpdHhj_SzMuOtNhS3Ock`x>J!Uyzu`iGnuVc^xl{oTtBc8Q;Er zTlKQxi&Fr8moe1K^?22g-)C@LZ+lH6Ut4Gw7<`|%6ENJ(A(}E=zaKjl0z4lW9fXIS zv($4qUWr!c{e-niymxVg;ldYVHqx3@9xNHte8Q+Tz(gv@MAoQ%G@+fC1+BcT9Y_9; zvaZFS>AjD8o=$b-R7XyyRH!55jGR!iT%vNzeV8S4Vk?}X%q6t_8r_uJTQfo5yQy8652AKQgt=YVsdk5$%g*aZ)S>!W^*P& z@y!5Lt7mW8>aH64wwp8B*Yh`@5&psjIpudNOtUu%O=Ctbt$kW~ zY#4Dac{0PrLU91Pm1J18N4tMkE$Xe6yr04W{a!ld0+nGDaj@;WOS7NXW}DC&@R{G6 zaSfOoZfQ<7KV&;f=G3Bxm5cUt{$m3LzxV~Pcd7DA;l=xl9kEW?)qZ|E5Zbj48C2dt z!{gW5DX*Q*veydo03q$*v}bq`N6%G>wT8SV$;ulWVi0mL8v z8p}o~`S#<1$?w6hCJs+W^-Uz#F926pXs0gp4{YiO?@|T6@Q*6mD{d1WRt!-+Q z2@>(eQW&_l8eD0VF#FPd&k1n8#Ta`r%Y;AdRf6EN@F&DI8B%c=B$CmnO#~U7exNle z>4vhvCTzYoa;%+vtgzIjz=94R+xO3rXLL0yL4P0iXmR%epoa(30jJ!XuB(YB{hC#+jwiGimG-@1;2G~lx1*qvVjYq7^>^{bD{^Hp5T`XuU>yFmN(RiB6c z6<>{@W5#zPo1MKbruQ8;oSwJ~t8l%o9$QMe@@yhMt_--odW9yqw`m0>t@a6!G%x9= z>Ha78Ko@X1t{0Teueq`Z2Hy4ZM=h$(2``d{H9NWXxfbV)iO%OyhKwGsKJdZB0Ixb&Qy5h^w_;D)MWoz0~*`2 z2j)1x)EeYLE^s?>5yI3YQY$b73lz4amx2Sq7OtS*H%&~8x#=LCq$R%Bw0V?)!iqDf z%MoC7e=n@OlH(@?a_Pn3^e;G+L-!PlAxG5P-x$DV+gjZHqLHm7c!@H1cdX&>#7BXz5zEpR~B;5x@_UYZ@3q1pmd!@60! z3leQg5sy$moaJ+@`H zB2?WmnSN@UX^U4c6ExfGXODHklhfxI#x(A)Nk3Q3*MW#;)(@nVafwc)R`cr@M}{&L z@2)l++gYml-Foj1Ft-CvjCqTb7s@^pE9sj38BuK=R?8xILU4=YA9Ac&^D2WcYXvf`n~&o zK)EeiGd$;1D`g(MuA9A(b(E7aG%e1PRDc^o+;VmDF2@)6=&om|NY!%A_ojY*E>Hj- z#jYKfsnR-LnB&i)W(D(8nT)1dDKz*lf!(DvdS&OURP9e?;-G{c$U1<&APr$38#Z2wP>kw)-ielJVhk3e6c@c6W{U(`n=X80+AVR z{FR<)Tx8PjBd?;>>fbF)y$O-D&ySAdoHPDXj~OG6dyI?nLD+fMAQa8a@Q?*xw_d+4 z{th^~Duu)$q+@pfty>iC+!`_Xc5147z+TEdYk2UPP=DSMe8RRWLOm)cc%_UsDTSF9 zj+X+&TWC3pmF)vqpiI=>HQ=JdFShVGRy=9(vFnvYQfE(O2zgWP{YiZUlUb+cxja)m zlAfH z39vhNI@dgoj_T&jX{>$N>|?&mH-ao^1VafykS^#-yYo!nR8faI5H9BI!BMbNxzzrd zw|;{=$x!?m>a5v&0Sf~h9@yWKCPCIKDg&L6A@N^7Bts z`VCNtoiiExy3CB6hrkXR2-`a*fq~c$kX!AGHRp2N-vW8ilZPp?@koslvKG-XiQ@O?OHNJwfs4 zm{#D)YD2132loTA2rJ@%pAlr! zJ+dCMTI&D}A-w-GtR>SvMb{_>n+y-X+DqpYUQ0<=4gl736aKYltZ%FHg1HI`8>a0~ zTX}q2cv}14QL#H6*ABNE3Vd)?H^mmH6}xY?Smq8ia?o+y>D@o=nsTmf z`qRhWXyZG^x53^{;qiFxPC}NtPKG@+y}Ve60KD0UoR%S1Gh(FtEvl=FjsLKGa z79g|ANe{X5MMl5{a6uIl{5Oh#Fqo6c^&@<2Ze|w<%}Pd}YPc_(?We#x+}U-B*Rl4Z z+V2VHpI^L>hu^P;d=?(ZhP;m};}0VT%8za@4K0MAbjrl@O3{KzRpqgOg{JuV$J1Xa zr}gRI-WPtS(Ed@fV&y7WI7PBV4i%MQqCt&JQ8(vBtD!gg5m&Hn$h*{#Si%F(M&X!t z+Tt_T!xNmy#Hh-svHIPHK-oR_<~!_q68Dc#z$S`qyt!L|WE$u;MW?Evn#fQ^(JR{~ z(Ju*${HvpS0$?U&2}aC$7S%X;!G*8mBmhSrTQrRPx_-Qv=}*7IvRzxr;o<=43G z89-YGzk5L8)FvES+|C8k?9< zM3qd7%W;NQRow>7n}DhKpB;x(3hv(NGxgn3KVjol_l@t-REzP;?te%BP9-ht`ZkN@ zpIs1E-Mh05umDGp0^9QrhgY%>sv5Nto-Uo->b<3lUxoA|cuHot2sx)pk1AhHL#B;o z>DSs5^w|ue8t``twm1(iVz%X$Jo)gQSZ=k*RJ}9zAPmA>0i$U+vLd&QuHF+`8ej)NUDX@&K%e_9E4G1&tf9rU(3MC zXV)Qe7PKZSH8KpZRCW8{0X~?R$RgKaiF5b-4rL=I61Lk~xa#ZcKd!aExqbkAIHiDS z-Tq{oUV<+8TaPqf_ Date: Tue, 17 Dec 2024 09:39:24 -0800 Subject: [PATCH 37/54] revert verticalspmvc snapshot tests --- ...calSavedPaymentMethodsViewControllerSnapshotTests.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift index f36f14bfaaa..b1732d91326 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift @@ -43,10 +43,12 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT func _test_VerticalSavedPaymentMethodsViewControllerSnapshotTests(darkMode: Bool, appearance: PaymentSheet.Appearance = .default, isEmbedded: Bool = false, showDefaultPMBadge: Bool = false) { var configuration = PaymentSheet.Configuration() configuration.appearance = appearance + var paymentMethods = generatePaymentMethods() if showDefaultPMBadge { configuration.allowsSetAsDefaultPM = true + let card = STPPaymentMethod._testCard() + paymentMethods.insert(card, at: 0) } - let paymentMethods = generatePaymentMethods() let sut = VerticalSavedPaymentMethodsViewController(configuration: configuration, selectedPaymentMethod: paymentMethods.first, @@ -80,8 +82,7 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT } private func generatePaymentMethods() -> [STPPaymentMethod] { - let card = STPPaymentMethod._testCard() - return [card, + return [ STPFixtures.paymentMethod(), STPFixtures.usBankAccountPaymentMethod(), STPFixtures.usBankAccountPaymentMethod(bankName: "BANK OF AMERICA"), From 6dba918773e150ba81b9e1af539b5ef8c3353e33 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Tue, 17 Dec 2024 14:18:01 -0800 Subject: [PATCH 38/54] do not change cell size if should not display default badge; --- .../Source/Categories/String+Localized.swift | 7 ++ .../ElementsCustomer.swift | 7 +- .../LinkPaymentMethodPicker-Cell.swift | 2 +- ...ymentMethodsCollectionViewController.swift | 3 +- .../SavedPaymentMethodCollectionView.swift | 88 ++++++++++--------- .../SavedPaymentOptionsViewController.swift | 16 +++- .../SavedPaymentMethodRowButton.swift | 2 +- .../Vertical Main Screen/RowButton.swift | 4 +- 8 files changed, 77 insertions(+), 52 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift b/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift index 1c235fd0a7b..2a26833dc1d 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Categories/String+Localized.swift @@ -437,4 +437,11 @@ extension String.Localized { "Promotional text for Affirm, displayed in a button that lets the customer pay with Affirm" ) } + + static var default_text: String { + STPLocalizedString( + "Default", + "Label for identifying the default payment method." + ) + } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index 76ab7b66b6b..a6710e46def 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -40,9 +40,14 @@ struct ElementsCustomer: Equatable, Hashable { return ElementsCustomer(paymentMethods: paymentMethods, defaultPaymentMethod: defaultPaymentMethod, customerSession: customerSession) } + func getDefaultPaymentMethod() -> STPPaymentMethod? { + let defaultSavedPaymentMethod = paymentMethods.first { $0.stripeId == defaultPaymentMethod } + return defaultSavedPaymentMethod + } + func getDefaultOrFirstPaymentMethod() -> STPPaymentMethod? { // if customer has a default payment method from the elements session, return the default payment method - let defaultSavedPaymentMethod = paymentMethods.first { $0.stripeId == defaultPaymentMethod } + let defaultSavedPaymentMethod = getDefaultPaymentMethod() if let defaultSavedPaymentMethod = defaultSavedPaymentMethod { return defaultSavedPaymentMethod } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/Components/PaymentMethodPicker/LinkPaymentMethodPicker-Cell.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/Components/PaymentMethodPicker/LinkPaymentMethodPicker-Cell.swift index b5efa868962..3f90eecd2af 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/Components/PaymentMethodPicker/LinkPaymentMethodPicker-Cell.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/Link/Components/PaymentMethodPicker/LinkPaymentMethodPicker-Cell.swift @@ -73,7 +73,7 @@ extension LinkPaymentMethodPicker { private let defaultBadge = LinkBadgeView( type: .neutral, - text: STPLocalizedString("Default", "Label for identifying the default payment method.") + text: String.Localized.default_text ) private let alertIconView: UIImageView = { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index 7f5bbdde4b2..442dbeef902 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -387,7 +387,8 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - allowsSetAsDefaultPM: false) + allowsSetAsDefaultPM: false, + showDefaultPMBadge: false) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index d8a4ba7bbbf..1532595b7f2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -45,7 +45,7 @@ class SavedPaymentMethodCollectionView: UICollectionView { } var isRemovingPaymentMethods: Bool = false - var showDefaultPMBadge: Bool = false + let showDefaultPMBadge: Bool required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") @@ -57,10 +57,11 @@ class SavedPaymentMethodCollectionView: UICollectionView { func updateLayout() { guard let layout = collectionViewLayout as? UICollectionViewFlowLayout else { return } - layout.itemSize = isRemovingPaymentMethods ? cellSizeWithDefaultBadge : cellSize + let newItemSize = showDefaultPMBadge && isRemovingPaymentMethods ? cellSizeWithDefaultBadge : cellSize + guard newItemSize != layout.itemSize else { return } + layout.itemSize = newItemSize collectionViewLayout.invalidateLayout() invalidateIntrinsicContentSize() - setNeedsLayout() } } @@ -105,10 +106,11 @@ extension SavedPaymentMethodCollectionView { }() lazy var defaultBadge: UILabel = { let label = UILabel() - label.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) + label.font = appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) label.textColor = appearance.colors.textSecondary label.adjustsFontForContentSizeCategory = true - label.text = STPLocalizedString("Default", "Label for identifying the default payment method.") + label.text = String.Localized.default_text + label.isHidden = true return label }() @@ -117,13 +119,15 @@ extension SavedPaymentMethodCollectionView { var isRemovingPaymentMethods: Bool = false { didSet { - if allowsSetAsDefaultPM { + if showDefaultPMBadge { if isRemovingPaymentMethods { - addDefaultBadge() + deactivateBottomConstraint() + activateDefaultBadge() defaultBadge.isHidden = !isDefaultPM } else { - removeDefaultBadge() + reactivateBottomConstraint() + defaultBadge.isHidden = true } } update() @@ -141,6 +145,7 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true var allowsSetAsDefaultPM: Bool = false + var showDefaultPMBadge: Bool = false /// Indicates whether the cell for a saved payment method should display the edit icon. /// True if payment methods can be removed or edited @@ -173,7 +178,7 @@ extension SavedPaymentMethodCollectionView { paymentMethodLogo.contentMode = .scaleAspectFit accessoryButton.addTarget(self, action: #selector(didSelectAccessory), for: .touchUpInside) let views = [ - label, shadowRoundedRectangle, paymentMethodLogo, plus, selectedIcon, accessoryButton, + label, shadowRoundedRectangle, paymentMethodLogo, plus, selectedIcon, accessoryButton, defaultBadge ] views.forEach { $0.translatesAutoresizingMaskIntoConstraints = false @@ -246,7 +251,7 @@ extension SavedPaymentMethodCollectionView { private var labelHeightConstraint: NSLayoutConstraint? // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool, showDefaultPMBadge: Bool) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false @@ -254,6 +259,7 @@ extension SavedPaymentMethodCollectionView { self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval self.allowsSetAsDefaultPM = allowsSetAsDefaultPM + self.showDefaultPMBadge = showDefaultPMBadge update() } @@ -408,41 +414,39 @@ extension SavedPaymentMethodCollectionView { } } - private func addDefaultBadge() { - defaultBadge.isHidden = true - if defaultBadge.superview == nil { - defaultBadge.translatesAutoresizingMaskIntoConstraints = false - contentView.addSubview(defaultBadge) - labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) - guard let labelBottomConstraint, let labelHeightConstraint else { return } - NSLayoutConstraint.deactivate([ - labelBottomConstraint - ]) - NSLayoutConstraint.activate([ - labelHeightConstraint, - defaultBadge.topAnchor.constraint( - equalTo: label.bottomAnchor, constant: 4), - defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), - defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), - defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) - ]) - contentView.layoutIfNeeded() - } + private func deactivateBottomConstraint() { + labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) + guard let labelBottomConstraint, let labelHeightConstraint else { return } + NSLayoutConstraint.deactivate([ + labelBottomConstraint + ]) + NSLayoutConstraint.activate([ + labelHeightConstraint + ]) } - private func removeDefaultBadge() { - if defaultBadge.superview != nil { - guard let labelHeightConstraint, let labelBottomConstraint else { return } - NSLayoutConstraint.deactivate([ - labelHeightConstraint - ]) - defaultBadge.removeFromSuperview() - NSLayoutConstraint.activate([ - labelBottomConstraint - ]) - contentView.layoutIfNeeded() - } + private func reactivateBottomConstraint() { + guard let labelHeightConstraint, let labelBottomConstraint else { return } + NSLayoutConstraint.deactivate([ + labelHeightConstraint + ]) + NSLayoutConstraint.activate([ + labelBottomConstraint + ]) } + + private func activateDefaultBadge() { + contentView.addSubview(defaultBadge) + NSLayoutConstraint.activate([ + defaultBadge.topAnchor.constraint( + equalTo: label.bottomAnchor, constant: 4), + defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), + defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) + ]) + contentView.layoutIfNeeded() + } + } // A circle with an image in the middle diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 786a1682054..b9800fc0316 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -151,6 +151,12 @@ class SavedPaymentOptionsViewController: UIViewController { } } } + + var hasDefault: Bool { + guard configuration.allowsSetAsDefaultPM, let defaultPaymentMethod = elementsSession.customer?.getDefaultPaymentMethod() else { return false } + return viewModels.contains(where: { $0.savedPaymentMethod?.stripeId == defaultPaymentMethod.stripeId }) + } + var bottomNoticeAttributedString: NSAttributedString? { if case .saved(let paymentMethod, _) = selectedPaymentOption { if paymentMethod.usBankAccount != nil { @@ -271,7 +277,7 @@ class SavedPaymentOptionsViewController: UIViewController { // MARK: - Views private lazy var collectionView: SavedPaymentMethodCollectionView = { - let collectionView = SavedPaymentMethodCollectionView(appearance: appearance, showDefaultPMBadge: configuration.allowsSetAsDefaultPM) + let collectionView = SavedPaymentMethodCollectionView(appearance: appearance, showDefaultPMBadge: hasDefault) collectionView.delegate = self collectionView.dataSource = self return collectionView @@ -512,10 +518,12 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: self.configuration.allowsSetAsDefaultPM) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, showDefaultPMBadge: hasDefault) cell.delegate = self - if self.configuration.allowsSetAsDefaultPM { - cell.isDefaultPM = viewModel.savedPaymentMethod?.stripeId == elementsSession.customer?.defaultPaymentMethod + if hasDefault, + let savedPMId = viewModel.savedPaymentMethod?.stripeId, + let defaultPMId = elementsSession.customer?.defaultPaymentMethod { + cell.isDefaultPM = savedPMId == defaultPMId } cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 20dceb9d6a6..8ae2c0965e2 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -47,7 +47,7 @@ final class SavedPaymentMethodRowButton: UIView { } } - var showDefaultPMBadge: Bool = false + let showDefaultPMBadge: Bool private var isEditing: Bool { switch state { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index 53009b00fe7..5dfa3c792b1 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -100,10 +100,10 @@ class RowButton: UIView { if showDefaultPMBadge { let defaultBadge = UILabel() - defaultBadge.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) + defaultBadge.font = appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) defaultBadge.textColor = appearance.colors.textSecondary defaultBadge.adjustsFontForContentSizeCategory = true - defaultBadge.text = STPLocalizedString("Default", "Label for identifying the default payment method.") + defaultBadge.text = String.Localized.default_text self.defaultBadge = defaultBadge } else { From 626f4d597ff1360da5bf13bbf991105aee6a3d98 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Tue, 17 Dec 2024 15:06:34 -0800 Subject: [PATCH 39/54] cleanup vertical default badge code --- .../SavedPaymentMethodCollectionView.swift | 2 - .../Vertical Main Screen/RowButton.swift | 44 +++++-------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 1532595b7f2..de63e672c81 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -436,7 +436,6 @@ extension SavedPaymentMethodCollectionView { } private func activateDefaultBadge() { - contentView.addSubview(defaultBadge) NSLayoutConstraint.activate([ defaultBadge.topAnchor.constraint( equalTo: label.bottomAnchor, constant: 4), @@ -444,7 +443,6 @@ extension SavedPaymentMethodCollectionView { defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) ]) - contentView.layoutIfNeeded() } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index 5dfa3c792b1..17633e11041 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -130,11 +130,6 @@ class RowButton: UIView { labelsStackView.axis = .vertical labelsStackView.alignment = .leading - let horizontalStackView = UIStackView(arrangedSubviews: [labelsStackView, defaultBadge].compactMap { $0 }) - horizontalStackView.axis = .horizontal - horizontalStackView.alignment = .leading - horizontalStackView.setCustomSpacing(8, after: labelsStackView) - addAndPinSubview(shadowRoundedRect) if let rightAccessoryView, !isFlatWithCheckmarkStyle { @@ -195,31 +190,13 @@ class RowButton: UIView { } } - for view in [radioButton, imageView, horizontalStackView].compactMap({ $0 }) { + for view in [radioButton, imageView, labelsStackView, defaultBadge].compactMap({ $0 }) { view.translatesAutoresizingMaskIntoConstraints = false view.isUserInteractionEnabled = false view.isAccessibilityElement = false addSubview(view) } - if let defaultBadge = defaultBadge { - for view in [labelsStackView, defaultBadge].compactMap({ $0 }) { - view.translatesAutoresizingMaskIntoConstraints = false - view.isUserInteractionEnabled = false - view.isAccessibilityElement = false - addSubview(view) - } - let stackViewConstraints = [ - labelsStackView.leadingAnchor.constraint(equalTo: horizontalStackView.leadingAnchor), - labelsStackView.topAnchor.constraint(equalTo: horizontalStackView.topAnchor), - labelsStackView.bottomAnchor.constraint(equalTo: horizontalStackView.bottomAnchor), - defaultBadge.centerYAnchor.constraint(equalTo: centerYAnchor), - defaultBadge.leadingAnchor.constraint(equalTo: labelsStackView.trailingAnchor, constant: 8), - defaultBadge.trailingAnchor.constraint(lessThanOrEqualTo: horizontalStackView.trailingAnchor) - ] - NSLayoutConstraint.activate(stackViewConstraints) - } - // Resolve ambiguous height warning by setting these constraints w/ low priority let imageViewTopConstraint = imageView.topAnchor.constraint(equalTo: topAnchor, constant: 14) imageViewTopConstraint.priority = .defaultLow @@ -262,13 +239,16 @@ class RowButton: UIView { radioButton?.centerYAnchor.constraint(equalTo: centerYAnchor), radioButton?.heightAnchor.constraint(equalToConstant: 18), radioButton?.widthAnchor.constraint(equalToConstant: 18), - - horizontalStackView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 12), - horizontalStackView.trailingAnchor.constraint(equalTo: promoBadge?.leadingAnchor ?? labelTrailingConstant, constant: -12), - horizontalStackView.centerYAnchor.constraint(equalTo: centerYAnchor), - horizontalStackView.topAnchor.constraint(greaterThanOrEqualTo: topAnchor, constant: insets), - horizontalStackView.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor, constant: -insets), - + + labelsStackView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 12), + labelsStackView.trailingAnchor.constraint(equalTo: promoBadge?.leadingAnchor ?? labelTrailingConstant, constant: -12), + labelsStackView.centerYAnchor.constraint(equalTo: centerYAnchor), + labelsStackView.topAnchor.constraint(greaterThanOrEqualTo: topAnchor, constant: insets), + labelsStackView.bottomAnchor.constraint(lessThanOrEqualTo: bottomAnchor, constant: -insets), + + defaultBadge?.leadingAnchor.constraint(equalTo: label.trailingAnchor, constant: 8), + defaultBadge?.centerYAnchor.constraint(equalTo: centerYAnchor), + imageViewBottomConstraint, imageViewTopConstraint, ].compactMap({ $0 })) @@ -352,7 +332,7 @@ class RowButton: UIView { /// Sets icon, text, and sublabel alpha func setContentViewAlpha(_ alpha: CGFloat) { - [imageView, label, sublabel, promoBadge].compactMap { $0 }.forEach { + [imageView, label, sublabel, defaultBadge, promoBadge].compactMap { $0 }.forEach { $0.alpha = alpha } } From 734345ef251bff1adbd40c1df7c53a47f4954d21 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Tue, 17 Dec 2024 15:32:14 -0800 Subject: [PATCH 40/54] update snapshots --- ...ntOptionsViewControllerSnapshotTests.swift | 54 ++++++++++++++++-- ...nd_apple_pay_and_link_default_badge@3x.png | Bin 91061 -> 90750 bytes ...ControllerSnapshotTestsDefaultBadge@3x.png | Bin 104140 -> 103793 bytes 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift index 0d01866bc93..547f39f2627 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/SavedPaymentOptionsViewControllerSnapshotTests.swift @@ -43,7 +43,7 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase paymentSheetConfiguration: PaymentSheet.Configuration(), intent: intent, appearance: appearance, - elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first?.stripeId ?? STPPaymentMethod._testCard().stripeId) : .emptyElementsSession, + elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first?.stripeId ?? STPPaymentMethod._testCard().stripeId, paymentMethods: [testCardJSON, testUSBankAccountJSON, testSEPAJSON]) : .emptyElementsSession, analyticsHelper: ._testValue()) let testWindow = UIWindow() testWindow.isHidden = false @@ -54,13 +54,59 @@ final class SavedPaymentOptionsViewControllerSnapshotTests: STPSnapshotTestCase // Adding sut.view as the subview should be implied by the above line, but Autolayout can't lay out the view correctly on this pass of the runloop unless we explicitly addSubview. Maybe there are side effects that happen one turn of the runloop after setting the rootViewController. testWindow.addSubview(sut.view) sut.view.autosizeHeight(width: 1000) + if showDefaultPMBadge { + sut.isRemovingPaymentMethods = true + } NSLayoutConstraint.activate([ sut.view.topAnchor.constraint(equalTo: testWindow.topAnchor), sut.view.leftAnchor.constraint(equalTo: testWindow.leftAnchor), ]) - if showDefaultPMBadge { - sut.isRemovingPaymentMethods = true - } STPSnapshotVerifyView(sut.view) } + + private let testCardJSON = [ + "id": "pm_123card", + "type": "card", + "card": [ + "last4": "4242", + "brand": "visa", + "fingerprint": "B8XXs2y2JsVBtB9f", + "networks": ["available": ["visa"]], + "exp_month": "01", + "exp_year": Calendar.current.component(.year, from: Date()) + 1 + ] + ] as [AnyHashable : Any] + private let testUSBankAccountJSON = [ + "id": "pm_123bank", + "type": "us_bank_account", + "us_bank_account": [ + "account_holder_type": "individual", + "account_type": "checking", + "bank_name": "STRIPE TEST BANK", + "fingerprint": "ickfX9sbxIyAlbuh", + "last4": "6789", + "networks": [ + "preferred": "ach", + "supported": [ + "ach", + ], + ] as [String: Any], + "routing_number": "110000000", + ] as [String: Any], + "billing_details": [ + "name": "Sam Stripe", + "email": "sam@stripe.com", + ] as [String: Any], + ] as [AnyHashable : Any] + private let testSEPAJSON = [ + "id": "pm_123sepa", + "type": "sepa_debit", + "sepa_debit": [ + "last4": "1234", + ], + "billing_details": [ + "name": "Sam Stripe", + "email": "sam@stripe.com", + ] as [String: Any], + ] as [AnyHashable : Any] } diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png index ed6110b92523d160b832a10dd55a26782f06329d..65d8430b62a24980d7e057ebecb989436029184b 100644 GIT binary patch delta 25485 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 e5kYm1RReWi{70Eb-heTFGdN>Fze@p`?aJ zX&6Fc==kmN-tX_d*Z2N2pFz%eX79E3v!3T!>u}U?vb6bRLHRF;Nh@*3QBR&s>Ey!` z7aPqL$y}a=US(E1p7alu2yJ0dlDZ)%W*Hg#@R_Wm9J%_l=VUJ*`|GtTva*N2m-a{u zZ_F{{@LIpS<%2NVnm*dFnH4Fw9~-X9uFB4?cj=VWLSl2hWL)sL!z@Va@O1ynZ$Hx$<-To~QrjBH}Jw@YKByn%=s{N*) z$+n+o6TFsxU+^O)zu7fO()XYOU2obPs&y24RXS^WwL9gWHT1>55!3aVN2e?XXY*B= zR+HfbnG+wY<9(ChU8uZ)H9$dvFShVOGrwfsf_r+i1m7aglSycT53$-jTAoMkC@_~8 zxOh$d_K8WeFXwJ_$o=Klcd{rnVs9h$YWnzJr{(`TK}I9{_e(M>N&b^2*Li5?ThpF0 zr@_HXVHbpAIP6@_Z<5E;6t^I!R$rJcQ2=~Yq_P=^OxBR~Vz}xQ?sU!zu~WhEEApv)}o9=1C<^o#$FWSZ#8(C9_;Cr0$bcTRdFo z3ZB*F?=|f;;IeS~jQUKg5f5q!N#3rJGKbGh4%xT+vr(Hqe7+0ED_Yjr zXgllUBhr~=GnO+H5bJZ<@aGK_0e5Hx*<7tS*nb5b?2PsK zCv9YIRs~1RGEZ{q?>mJo^T%x3?4qq8T%L4Yl3IDhBag!x{%a?Q8Nasw{6J_g4_SRL zf)QD$+(i}WFmbykZZCb*<{3u3I!jrokwuI{oe17cjgG7G$76j@j4P^@Nw{J7H4y0^{Jsn>3h zLQTW9FqhliWyN+_6Ae?(7t54UT3mI$%=Y{*5(?J;czKRW?xtLEa+HN)&B8!TmvDR7 zPobgbNmzK~7bo*-V%#KUfJe+de|e7#V< z`J&|bVE(fEM--k4^U#!eF?FC9>$1Bwm=|-XU;ai+FXu>EYSMim6@0N>DZMb?CfHlc zj#2V;8ZLsR0zeUqNZjn4{2{}`uy1Hl4nK{ft>uwp=-4ek?_fgOW?;0>UdV2?PIfH7 zeDj1GOZeq$xOtaZA)u962)KpZ1A#Xu4MBO()ZdllqkUkY*!^AZ^lmhD%$@5w8 zuoyG!-F!2=N9w!to&3P(^F^C>4+&UhlcUL1#~ueYnTD6JZbP5X!2x+zI^KO7=!Vt; z7Z(ptTimxL4U5T7D)FuH0(P8F+e)Mg#g>RrA1DJ7KewO!tBF5v@zh&p%Ox?hrW=r? z??T0=X5+%!wz19|@O(F}ELumP?Uq;2_=JS%BgN`l14_yy> z996@<5!0u(_Ug#~9sFZlS6=;C-3{ta#!kjPSv=u?UZ3KVh{pX__JHkzSbto+;q6~- zDArAX-q3Xa>x;wTn)_d#Idk|vtr0Wwz>~Uq7ow_7A~E!?=lcw2&#tZ6lU-MH%9~y` zOo8Q&a4lCnsUNuWU0B4_cu>f($Yr0t@Rcd*CG2st!hR_aY|+EG@VnussWkB}%z$~E zX*J)c^29Tbxu^zP$@W|{X(1BqH-}T7$&;>cpJ3)%Dr812?U*)kO4`TXQALcb@vqp_ z){2*HTMjhlrH`GfPTX^O7k0;v?e%wZYdooh+Muaq-QZetu&V2*fN2~il#za!u(>rm zIG&_OUyX5W75nbC^F;-s*LAwC0Js1(kfY~+e%xiGS{yK)wXWGFORdCG&2o7J4d#%>E{iuHY}MlKhL$?6+df(J6e*6J#1DxT>wR# znl4S$eO$-qWOCAu&G9XaCZGEKoi7;I#tV`w@9(sR>g2t*Xp-{MKR&kW5=B+Fm2BG# zwC3e!tGZTqfVH_FQg9^%j*_>(e~hR$31oI_e{a^zqoX2dijh_YrI}~FQgI}%92zP7 z?md!dn@qB&W+^=2n#mMqty%WZii!4fCAr;>HW60Jy;>nN)mIjmQ!su zpXI5&6DTTQd_IT1GR{X9eovskK)<}}notrmlHURO%v)7sw(gYCWg5cCEYNbJR%n$t z(bkuy&4s-_tSh_rd2@l+ToVeX!kN>b9SAhL))b@g?p9spsCe^5E3aeM!==6I;U`xb z5(hei#pmWpJ4VPSF{`tld6!L^86?jQIRf(JY}+ikFYH+4vCnYF-xSvl&MoAa&dAK= z0@axP6E%GOJ|UjQa1PNUUVx2w{NmGcP`RVg2>o*p=7coAvmy%1q>d)9YSq-41m?&a z1-LN28vL7&S}*kS@N8ro2Ir);hsG zYgnfE!cI)t)W_OUZ@cKsbR@u&1?!;f4o{==p||W<6~B}BEd2cu=){WLNiOT|rTt zE47i4TWd~mfW$9sNi3?~vNiCE)q9g{r4zp>9Oitz+L^?_b{Ukljp0%#DS5}VvwTWt z&}NeTaAako<`W|AJGgze(MG%bWg+HE^vmXQjy*RZVE@fy|w9Q zyCYE`)lFDjsJ^0;E~sSh?7W~y&SN{y`rcIL4*$9YFH57L}C zXy-j1!YO!VuIx>FdH=fU#M15fRoJ!hijIm?V_t?k{RRHiGUsKi7MIQ#(ynhK&^y?Q z@lG&I-QbT4l@fB6E55I;rBe6hQ&&u;VsLN87%s@fhCzRnOj#bP3!Gn&=S=zDd);;d%2A(Gi|=&=?kQd3#4*u zjlvVbS`T|0S|>Npce;g|XK$a-kvbDcf040c#&I&O(zpAWI?}MYBZ`-G;~69%H~9W# z*dB-X;}934Jy~6qZmj=gAkV3jjoHaN7M;|Av9l6#y>k05{dY2?t7?s>YM4Y9<<6uK z7xJ=^td{piUWJLedd=xThgt7Qv%^ryxyu8aemg$0&0h-~Q>V<-56ocyO`859$>mkg zAafHBpKXNtG8U4lN{u&=^xm;bMQ8s-EsYD=pXh0h3dHE_&zeV{7iQM%D%jghsJU9PA{&U@MAjPI!O2Ql&! z_Kc^JJzw@C%lT~+noSiG-*RmF?QQuLTuzC3)fkt&bKz3&rog0`Pnhr=bZLCkZ*lKA zs0~w!&8-z{k%a%$t3*-v@@QB6bSCye6jk{VVC4d!==9 z3r^@z@$ph-hl5|K#3Kx!iZn_Riye(S3SjU_7TIHA^Z)mO9r@$*4w~`pcPw`6T z-Tn+chtZ6JqNS{>63B>~Y-+EVdDVY22jIjH*z>a@n|{AQunoSNJQ}S~OgOWh4o%); zX@OW;loNs(5qi}B2ms9uGyiI)iVAuoB>ok$+g#6?)92}^m^~m;d4qIrM*0qFj@xtk z{0^ADH_iz#b*KjRBT(9L?mSlzjzz3l{L|(Mh~+IK9TMM9%Y~e&oK;{hE|@-18_XVl zz~%QeSWGcw5%8XuA*qw$JU|X|gv90v7;b!6q#qEe&3SmV6yux(3qJ6biT2WKhxb zZgc59_NVk=t)XTQkjr!F^%ZnlW^0uSb=z5MB4^o?U5ACUpQ;?-P~#L$Pcl(td6EZ~ z;{%`lc%Ca_i9ZWkXz*h}&myV$`6XZ|{nn|^bDlIass|GaFBX2-sbXk4U+ z66Tl?d!MmBtZ-mAh<1oEl(Bf}jhe=?|9tL(xN+uoGIh-;`D7D=Bmn zbxc>{iHXVY-!aZX^Q1q0l4B>$^w*-D{@mdw zihj}Xr!g<+T;)V^&HD{67&Fqk0HQTS-V?}ZJkz%y!jZ#gbt|=A)DoJja2(BAAhl`? zDR6olvDsn0$2rpNu--%db<#i|3!JI`0l{2T*-1tB$y2Z$AybIuJ`YTjE~)5kY=7Uq zGB`GcVgD}|PS@|`U-xD8*HYqkml!5d=YsM)#k<0Vw2D=aZckO zRmFquNhLtvzp`q@zPPe~BbEw1plZ^uNOx8xMs`)ogF9%BkY8bDAsl7r%8Y#9ULb`w z{c->}X%Mcaf6uGol2DgHJA#$sNv#?%o{dPgT~($$Q>PH^BEi#`nbu zsbK>>*rYC|9n?galoRl=D9gYFfA=AOtrZri6wS84}nwPwdHF z@nLmXdx(R$LdqVVnxpu?YcjusYfPdaDt{muLC@c1xuMN++w|U*-jKi;tG+Sb7rsV0 zzMX5+?%?k2gW*j=j_4y@Wys864{>#0_DbP*-qeSV=)>#(0V+g-(S4faR??3=>LQOj z{#Iz^dD2Zk&#e>8Z`NT@UOFW>m1#gxwZp=3U~vd|Pn+eQTcTSEkWCZ#r5IfL&*Z&P1PsB@)RAENM;U_j ze=U%9^pi8Cq-R=upNPw@cZ7h*?HDAFe{X73 z0;6H;6C!XcNE(&Axh&6;0kJ$;WW5Zfu5V`UZQpFa!>`Zs_PlkRNz?~s`r&&yDb&;T z)IthRg}C8KZBWwWWyj#a0rFs)z6%iw8|l&w7xrY2_GLB5l(+-_y!8oi>-@=Nr^1`Z z^zmYfOsR_7e%yDJQ$(yvWcImE0hu;Ie){5O){`?nLeQ~Kq-nz)>t`$(*Gq)PI737% zjuYlK{U*2kK2g0raq&~wrSdQ*Tk*1x719&N=?fO3!|x8A`FhC%N66#&SRWbxnR};i z$ohLJl1ByUH`Zn}7S0S>ToBRE)9vKw~+>rmJ-2FBUmeVD!0FDbg#hq8WQ7}XjG2ZAczq@2ISN#6hdij6IeT4rB zw-+9=T74kFM~vQOd2$3(Z_tg_ikFa(=sVb@YJK6JX(5DmSew z9aZ$+IETU1b71Oy?uym_$fhcgO$st!Oa83<|0V*bd7ke4I!~Akvgwb!+1vO2&Qu#D zaBIVif%H!b`tR=w{XQw(wj}Hoq9f;1>;7KCEgn_`jX}L{t$v+%rG)Q+J659m>EFBk zQ7u6%Wgyoe|C4Hbo?_V5^rlee{HBn2^`i)@ST3v?vtG=JKiJ8C{rKe43EI*48R-5@ z3FhM?xb#N5U{t+oyvRrW-W)8VwCKWXu+3s*oGS0t1K!c{i#m)i=?3Y6uO}VWZFshsQUMabk{ z;?-5h?X|#M&{4s-9KDFeqhdap{h@QZ`$ltQ$lE$}HPY3z%Evvk_ga)-AIA3v%Cnriq;=p+)r(o#P#>=T$VK?+ z57|<;)p2=3XtC39lIYY@gv*~tkLW^-f@4yRj5AsBBPI8StD)yh%(2l`{W5s6%^Yk# z;|0mP$*;)PY2w!###925p`(qY#8n>GySaz@b?RvT{28pV#pOO!4Roj z=sWD#q9YDyT{zW~PZiN6cE4%y1ua>7wC5ong@PaTw$2M2P14uD&lp;dUA2_ikCnjZ z6erBYnqxOZM8`8+mxrUCu;fJrb)V9ye*Z?+@Wd|4>x;iaR<7NLE7G2Z;$Nh>Gsj8| z%c2C*cyC5rOCmYkBWT1RUG;Lr_96b`b^et4r4rkrBHfw6wGqPJ{=~8GjrXHxj*pKf zj)O{NJXm(Sjt{zeMGcqE-RdnZaG0oDnO{)jDUhIV71%xTK6rDp(a+*-CA8Mr9sy;GoHX!0>mY^|~v zk$N?MGhz_gig%oYGdzlpylIYwU0!GV_2UIKXK3-dyeZtw?JNPfQz$a={iR|$91_#c zTTer88J;dtjdot%X5KGl|1z)<=aEoWaE^okU3w4msq&nYoLG=jnqsfOO*tnUI=uCw z`{;pzrWhygbF@n5cEuB5WlR49@^55;a-iyM25QNY%2ViIt+_vdj%%@}D2J}Qn6IAi z{t}trCAyY-wrzACf*k(Cl$FM>BVns1Hr*VaH7O<$Zr+J4=$hrs?F z32j~5NBal}Y5(~7hGna}h`(;IeB8!p<4UP@ zKR1eW@!b!Y>yoaeQ?=Bqqdk1SPW|Ds1J>nu$x<8}^;uOa8e5xc-gtI7gNnq3zMw0;gmx4^PSboY{$`$dRu?ZgJ;@)*rkzI==#iRm z5{bD4=RRuCUT?F3p9%zGdevOwrcv1O(dzNI$G84H0zMHz!3^_uH#xpua?LRn8cP0n za+T?`MnC-gNOfh5DS$sAhqIP>wc@>kV zyFAg6$9UB7aCu()V6kP`-oYFsv#N(0_S|1Cm&D-&xzrLe(hPf*XoudMV_x(c43e@M zCa@n6*E8CZBF9kv@_EBWT>k1{At(12X?&L-tr92`+a8?`l~zi=3}1y+;)LL>{DOmP zkMRS!dHrm2A9pN_?CGhkkRJzn7$OiCsMS+xgJ2fSk#s+7ebeM zU+a;_L}7%U`GoPed(_g<^pIlN>QJ%eASds=x+F zo2Y~&HPwosmj0PJRzRyzaL&k}b!h$L`tuW{+#8;o^C{DCnAI6$nQItDBIc(X%Q8@~ z(%e#C9W)!b!5jJ>uO*38-nHWJf6YOyHNxjrZB6GibJ*mKLX&MuxYv5?7StfLt*QxR#|Cb-N_h$`z^~oo5or%);)`%2pCNY}I zuxs~TyO%|5^Lkj<*g)YZp3)@kRnNE@n~_!TIZ4dn{p!oWb3CydMZQs-Jet-sFraN; zWmqm4^NNF59)8>^ADztX0+s(Vo@U5#kyx&CmfNFx4r;8Tu|ofY=gTew+QKCi8MJ_| zNI#zKh>t0FIjl2LV0_Q~7tt$vHxGTv!<-;4m+%qZZI5WPyAm^#fOb1-* zK^;?~h+W)pJydUW>uG|^u4i*Ur@#F~9kR7+xoxY~lfd2V#sFc#zHntDt6dk6X(D+X z*WA8;P{3@ndaP0?CyZ6Q<)gQ|A7!RZ*UE>c*rtx$a2YDIGk81#IQ5SO#`UY0-QEjY zhFXr$8@XRw`IPfU*49tIGrb`3{-~g7Dvu*OZylToXaW0OE4#g#2zjMlVOEbG(?O4H ze3VdLu3=>lq+yu}mC7*Y;XnT#<6t$E#nc>hy44kjylk>4#~I$`km>&r)DNyAqom-v1sN4_tC2T^m-mkzt= zHMcI~=Uq1dd2KBP)Y^3iZuKTktVfrV!Bl3TIho_i^p&K8X|5N6g!ULb$*fn93ONS> zd(6631wd>gl74d%0qsRNjOZ0xoXqX?COggc7{CbNSz3~AD>)^%;Qn6HF!DCKN&c$& z4{b??{K0|;&CtP{xq~Bsj`WtrZ4y?{c+Q1(vVSHA^jwykm>p*A_x!7+I8@Pp5t4k1 zLc9Y~=33o%e*L60Nbidiw$V(2`AE&YH*YIpzrL9EEe&8oOj5-cTX5zxDbtwar!6y= zci2$FZM|P-nyz}q?pAqiuMo8Z_fjifFDBnOg46%O`a;V)wtFM#Bi!e#U_-UhFAXby zLb5pJFeEAqd*|Itr^J$c+}SJ2==$ss^lck^w&u~A6LSuR`vuPLkTP$wMdE zzZ}+Vbn+a_*q3vFh_b=RhY4pr4|ltuaXQ9nIaT=U5*Y{1AyNFF<`xlm<$?OVYB#Ny z`kivc)da&XzL1{ON>5ID>dY^8nnsVnLi-N@yPY?-$rs2}JTEEMovMi8w+6XiSH>#>FX3$mgs}VLt zkv6RNvNgOVDxP}Da~NLa`naMKdA}>Z`@@x5sr+aDIl9Z z#sTr4#i1N6vWZxv*{m3hp)STHn);aLYg<2KVB~xHG z0RLGhWo#lLqsa)8y;Rs5_1qp-iL85SXJfAaYb*J@+96{t87(B zPhPv|^kaUbnw@7P&9oe=rcSm5Cuvt^rF|Vz;QHV{5Za6Jx6RuwbU7KZhDXcZn$yr_ z&Qg8KB4VpMQ-j`6+dB$o5CmqFX(aMff*T#D3Pp}$LIvlYFLjiV`PR~qpLx-58OX|f z0)D@CZ!uds0JdeB<_WrPX9IMMJU*uL)$cU&UuV<@Xe)xgNED3sWb^FaQw{>U8;Z6e z^9*Nfbg0|4AiN9nmQRF^b{B&MJJn;1JTvzI0&5+$--2VT&K6C$)#8zuy@Q|B&|BUk zC7Hc>=0ZwP%xNDyr(!(&DKf!{1d`rzaPSr`oYt#ssk}QGiGoq)xfEo zejtl$?L^Pp`3~{iijcny_aDH|7fPk<|N8l@uE`QvH*TCDude3?Ah)h6->~u#{S-s> z@WO+?wrwv=Dcqv0RF2^z^iOzGi$9wWcc^4i!m*1@VEQbXJ=<5L9TK@w2S0Ypt@qlt?@|rkt3h+Yt6pbRl$kc4 z>rY3pbnS}U4DjkaY`;g0=6yX`dqdF(c4Pny=;8YPm1=31cP~3!@B<2E6%=-FZP|GM zWrRpxKWF!fFWk?{&g14Et8g^kg-^{2;5He@f4yGM7iLh>w5y_RiIHu+69Wcm*vRy^6ZwG6o;Gg+mvg8klZeElwCm&f4@KUBG{ z-2BkIWnIc=JXixYAon{(|La9xix^j>x_6W->zb!`(Q;hOaQ_JQ6LBxtS6dN?MHe$( zxT5h3c8OR#wuGJbH3wxIJ;j#D`fwDHNg3OjGLS$NX8hq=wx=I-N2W(%5l-Z1*X2zl zVU=~8?N#2$`V0`$RZunSP~YE6y5;eG6)%ghoPn>Fo^y>&RSXH#N~=K)E=Tewb;!}S z&L~nG0$pL;{GBlV)3XadQC~mjUOoQine?>s?P7w8Kl#p9oi?FTc%Lz1NiI% zG?NSM1Q2tc9HL)F?n%>*&ge+8ryy|(O~hJ@yf}fsUh)NZ!-7@)#pgoP=Kk^8{l23^ zaw%wkYkAwSJmNTNYjt83(wqBex8;?`+;(hVl#9eH-P_X2zm{9^zTBxHKTg7Bp{J3K zzy64jA2UJ4UpY1ePD#Rptm-c0Ker zs-KfyeMrRnkHN{5yS9((^S!sLC(i2E3ZRCcbqM2j7TJu9aS%KA$=lyGN%|9@yi>Ee zOqr(oE4jrmHq6_;VM*L1qMRepmpp;SKi8BU#a@-%ExBCD+2UF#S_!J;w@_5 zEB;qn{L9b!1xoUYC}m=A3)!|p&?OJrjixY`)g1ihLa#I)?yoh-3g*qeLMS4@LqjvZ zCh2;e6^>IrbD*9y!PX%{mFJZ!?5+ni_x2ue*IK zcVm?Im*kD$38m!w(CgO)NkZilEFK?9a$E62C$q$pCYL5){DufKw?jePPQsGCb1?GeZ$B_XGxc@F*>1 z<@N%H^4Q&EwhKCPCVb@g$rM=4Deip4ayYNl|J$Tkt=-NddR2*T;~r5n5AJ#3jx20 zd$+MA?Vb_LfiqVW|NjT6p}%!=F0pg?MPWi zF~-}2c}xDvE?lX2^p0s$MIfOgBHbl!q_xEGbIF?=Z25LGm>J8+m(>Q0AX(hJEmAkc zpvWwM3)Y&C8bq}LDwp>}{d$HGpJ_m~g;XL0BwD4|Q+-T(S^-LyyHI_WnFj zLRurHIwV?3*eiy|{X!`89&`Pw#>{dfkOJGsJ5yogb#tv{lQmHvA*I~U;T(WGmO0&TN;^>0!oK98}|Ht zZr0WXHYIQbOQgm(M6LTSmpaeoJ#b_cvDKVvQvH>~Hqs)c_lX?X8>QF?pZ5X3JP%8n ztr{C^qS(|*`xeM$cKo>P7a?7~DWI-;+gysvrAkrg>JAt4Jyi!!4K2zfG`qFTojQYZ z`+%y?fIasC;r*dg=GYrmyX3iuL(2m`zb!fPWYzF$!Bf!e*=swRgN`gY>aVBgGqeah z@76CYX6NVS?3d>ImF23=a(f%z#Pou3JJEuAZYx+Ay{(koph&BUQs#2J?wC5(pfnbF1=Ci>)v`S19 zE6QyCuvM3@2TRY8Cx`Kr1ig)}z4hsYl= zuW1C&37@se#=EXyph3(!T4hT+)OndEZLCn~Pm_eoq$rGOJp$ znq2SZ`PRSNX4>c~6GmaZCP71xZW%RR&VJ1Z)5F~i51puT!Ao%#Q6HL@B6mPHY+283 zswsv}Y_sZ7o*u&E5hP4XqIY_5E@Cts-NZWgVJK#KkaPcOW4T!Uug5s?`OH;U!wC6H z`%;noKN*OEK#XK!r%BYC(o(`$p~+EZVmg<}%1hrR&?%B}SOyR~9i}d+4Hd${Mi;q# zw3dH$4Oi{);c9;0z0f2nV|OCiboovd*nMj3QWHhmO;+fb5q`IdJu4mpdnujxqpr9p zJBD_2L<(P1;u|0JqfVo>%tBA#)_%B;xpdk^`VH;SivCAj9sLwPQITx2==$C4sQvz+jU^z%e+jKm9aloJEvs5@b@AC5%{a$oEkdu-=S8ac_$H;rUo}}n=I*L6F zux>G0JF(rh?b$HpN~!m`61+uS9kATn*6x|KfIQY9bU65G_$-;SXsmnSf=@V^cBF>E ztnC-$J3%g?8sGofy#76ZNdu6lT0zjHfdbJJ9xJQa@$C5MFjrc0`%xW@$TmM>@C>6x z`}?1IDBmW5C-a~qX^Hf>?l77HTpo-alIR7nl;`EV`HN(M%8Vi2kTNb_)FHH=Vwb^M z(4uVD}}0Pc*(CQ@+M`x;Zb@|NPSZWBPUTlxUe)s{sVOs(kTb0H8h4VxKqbtOin z)=}s~X`sYsrah2~gJL(n_I4j~u=B;))&Jy(_>jPPPCoj-OnTM<0q0=(k%d1`q1%{iV8HP24iyITgYX)QG6n(1hX{HIytTQf&U@9c9O4pNdRRM82j86 zfN=9&BA_mmEM7Rpiokk*V;on%6Ul{(L%6uw#k=}fd*|&naKRpCzF?{+S_#(EE${Ni z_Gf{+QwJ&DA@z$S3yl21$NsxGXxNMZ$eImEp;eLrZNX+RZ2?e4dW1`Lyl#8kOM0Y! zih1>^k9G)a{cxi1Ih_Ez|tu6Wl(cMyudYr((Y(cA*3*qj}a<-NC%PI_z@;BJh^ zzS`3#_b@56sfW+y>K1<0xd>NZ9@tEROIPJcvM`C&t$X z#1}jr_qJbsXdu)MkIUb-jR*d%C1?fEa&esR3;u{szO~Bo5PGzgbhMe?=80A}z&_@h zevk;nnD|_h6o=2z!LBusvW3272cTVI-4cEcFHhe+xwpu|PBiF&v&W--THLu&eN|2{o{K|Zh>3% zUui9gai0TmA2>3wuWX#cRXWeD_d3jQwk6ktewKULZo4Hcbz0HwkV}-hiJ84~BtQYJ zd859E&JDOllVwo^h~_@GdI{Nf$)pKjtW)~RiPO-@{lnENd|uEPl6^LAB*|kowveuG zdu1$}IG511wJzg1DrcW1F%>K*HG)W}zVM;@jH}xccD~cA%BPOqwG@#CjB%_70+dlLR*mh8bV!$*zi&lcZ}-{(D7ed{gT!XoLLILnkrTecATxirC6PL#h?oBsjcj?PJcn0 zy~IwautQV5cSSCdxm|0mItU)TdFce%b+V#R)jYCixDbgv>o$5Q$JJYa4r3lq%z!}9 zw5$x=aQgxH&5tp-D8oF8}LIxi+1&OG7gVPv`u(=P~6B%jtb?8+qgtQ zOSO+Jz<~c!%xf=`b>TA^i57*K3v7k}R562|@6B&g)aLs3y6+f0E)xqltKSSZCY#vM zjd_2)6}l-p?ryqt8C~v_R%_LNvqf!|SoxfXV*^6r>BKM;Aho06B(;g}Z?rCddwn)L zhtBc?;DEhq19Hh%{674DL>|#!oPIzH{qQ3_!dk+Kjp*OO`QRBGhb@N$ai<9 zFkeL}QPS^1I_};6Qs$#x>mCherZK9nZk^Wh@l8t}zmFx#&Sl6q)O8&#*T_zsy$e z2_2Fc8x~2|_F`&}D>YZA;X9raXeM4n1aQ!8{BkS7^<&e{r5#G(Lr zwo?{Q*)m7sVS*pBOhT%uRnC71>dP%3zv5137_JUZhvz4)^kflHZapPf_84%zFlHaD z(IX#`U{s=e%@{^fdiuhxFG#81nk;>w?64no7{&F;2s$JbR)Ov7_*%p z=3_P%>qI<52SOD?u*#p@i#|;*bXvOp)fGTAclj<&+e3VR{UtC9mzUE7LtQ$))`?4q zRp{$WN~A|x089jo|yiEF55SPdqEIG3q7xv1T+W}z_&@MkD!!@JG|(esBAJoq!t z#3q$H_2fj1tthhNTjth&cN675SVxR}lva51!pG1(L{^_fLFFk<#3QI5Y~!$wsvblv za?*~3vkva}mbSkUr4Yt$=2M~AH!yqgb7&=T)!TCVc+s^IOku4>UZY%ex+S*qt2pVf zz5Ec=N$+@U{`w)<@?Qt7yXV1>i+H@~Uo~JBBdnMKFO(@OJeQQ6No1|>wG-2Ftm#I3 zkC<+_#ELn7m}8PYKG=wY410qFTlf`Q_?6zzxr2VTcf82t#;1JR_Wv8B_`mTWqQ!Eb z=$qdy^5m)r0}bv7)<~f{2#l*O=jF2u0u4A5xR?O$-2&(*?hgoBw$M`mY4po(j%cNN z7aOU71ot6ZJP-KkJZ%#AO9RZq_a)UJtVkZePB9-!M?eiUz=S)3ztN(m*k6>DmuJTc zT52D$->iwgmi=-R^dh~6>A|6^6Mx|Sfp!#^k6IlH8|^DKX*}H}C3wF45>J@|>jT#8 zjhm~KE0az?KA+&I2T#}vd)OVL6(g@bCoO=~BvB<7MCwmQq|0|5AG?=DI!4aW=+fKo7IC_@Jj`giq8{ znMq`79rWQ%@@KtjUGUl*@U&Ui^~X_ZFP0{F?|lMO6D&>KiuT^+peKmXr}ixHt3k!? zSFJTMvTd{Ftz&P`x&=?(fj|l)dfMRRdI;>u=jDI~2IbeoJJF7vueDyEz8PIBsIQ)V3FT zo9UAb1HJ>~3zJPCbJNqQ(-oL1E%_FTt5RW57AW5}bBc}Te`(DCz);$C>3zCgPbcXA zkZHRBQN(_{psvkc4& z#D6>iEovmK+iep^p8S>%`}2Kg3{Xchr>{(BuCnZPzmXbg(O8_ha*~uJmrq^Q-zz$a z)S+sDv#WA1OQ-gM!dUQi+}#E0P71QI$Kh+))_>wOW>yn%_ zs7t#DE{LoZs1r6s8C>GNf0ABjj$X01!u_I*%23Qzz(DjXoj#)Z`^=b!w7J6CbQjZb zQH4BTkgm}#yZ=T)x(pp665`!CQIClurdrwBQBx5O79Nx3%n|H-t@L$yKs^v(K$s~D zR3Bn5qr;_L7WghH}9Xyp>_IrmrXJFSD)T6_v+2{ zh;Qp3%S%*4(+?g6jENjdfaff>raafH$BlRyXfk4+`@mXvd6Tly2e-gniq4n?cv2)# z20%;QhMq6-?e7`n0EDxZz}UucKOInxYxU4$z?-8$Yz#0n@#Z+72XEW+|_*g1bWN&j+u5cpaI zU=oa#Lt|j>EPXoW)J*0kx~A^gLQm1RSM)~n25!H8dPq<@$o$ds`VIehWgm3bLy6pV;>n*f$ydjon!zDu6k9 zXiUBx8!zYzsyihJDlX9SE`HW%mvhV#(<;{m=mICzCcy3smuFJgWia@W=-&k)j23Ih zD7JOr^Vksqh3F;UtszVDrYQ$#e*{zHZ#3$Jy@e4N2mN=Px2hbbglP-LihxXEVBVP& z=Rusct&0BSzHTc z6Ur(Wa6!5ty(nQ(REm@}AWDrZh;#))5z%K7T_AzoeLuWEzPx<8;hx-c?wL7f=FI&6 zlN-ZD$ZL_7Cnp^DZP;`6Qde|X;vs-n%U=uaWWUaOL0w9kPDWWm0bb_Yamf&{H+lVu zF)x+hjnI?PUS9zD-#eisdG*8Fr@7uQy=|lNhBBzO>Juw=e2>wum{=W(8jz=b49cV^ zNhVJM-o-l&e!#r*V0UHQ>(Gl>26=2JfEFU*ZV7V(p3iL+gX z?`{OinRGfp)+$+A!nCK7QpJq8 z8{lY*uKna=G$Ggm@FcxFJeiR$UkMX04iVW<8b;Y%M~km02Pa%4DcBS)AVcs%Aab|O z-0Eeg{S+W%vTmb>YN^UbuLau_M91J1{8`rmyN=*?U&NITA*-TFyztv+NXY4_$+5BG z+VV*IcPsTTOu{}{8>8BOdNlg5+l%<$r1-Zj?i-Ags3WWHA4k~et%75 zDBxzj6tDE!8nQXb=&hE?l>{7C>8uF^o44tepbwvx#gK$f;^37q5)%nrV)2x(b#O2`JecO&>} zb4^u;)|i%b3f0Z)~zdy*mM5X9xxD|$%B4l4|-UHjD`$k%3e~)*C5kO zo$8&mkx!s(wSKWrF4^LA0n5IDpYH^jpR?i{%JGFNQ%FK{bMyXY@x{{_ zG4{@5D_F01RoM=)&AmQ{4m#`kJfwIQcx|mYd&!fE1ZL3HJ>wtW;{39RARar2`lmo3 zhRQ#7NA1cG<;jT1^cx{Cbemo0RLQ~y9qRHF2DFgwl@szG7{ z_*Em57N_ZI`9DDA!=KpwCkJMT6Vn2jJsli!*qH|rh$kwvoK>uMG~~r%#95nsMqJ$X z+))c-KfASeW3>=o#Zn@84k`EU;UO@n=&mR_AHHlp9b*5lLkH~c#VulXe-RM(^20$k z5$s$1g@KmjU~$zg=F3mbgPr)UQnUCU({EIs4FmU9QK(1u` z?zEKu{yE6pHWIaF0c_e>3|I zNeO@h)UG(S)_?ix>@Ur{AW0NL{KY@5I*3=F?qvR!?C-GjpY!$*>x@keS>?e-@o?Vb zYC7LXLsncxRN>WuwR4_4Uvq@}p9?8`cy(_5TTtP{)=-)yMpG*H1T=-o2x8TC()W3xnK8ODOgYa!OK+fWH5>V?>(J>bd0hESU9%pP% zv2Pr(dmI>qrw7JfTP3b?l-aL%e<Cabu~-&#%fjd~PpvnQ}=3IJ;Ub95^^Mxq@@rT!*cP9w}QEbi`mYPyNjh-bjOxC`_h!w76X|S z$kRsKQ#KdW0`TZc-WC2ajDqMtzas0d3Rq(zYHm1}B()fKw+HgS)d6Frm#?G*2M0@~ zu21cQ0<{z5W^v@=B_QajA6^4^!OcBTzc911au}!VyTjLiGC)v7uQ9!KH$p)Zs@#TI zPVhgEql0CXHf>&!0tW+*rWjn+_ZHCsb-W$0&K*HCR>zlFN}18zwW^wrlIgF;>R{Lf5(71nzN2 zsKcD=l*RAlc4t=q40E0W<@89&u==sa+5`v|{7IqboNnqB}^aT9a`NlTd z(?a7~DuBVwpWZ++!WwezJwvL@Lzrn&bQ$vVT8Xh^&EU6~p zmb3ny!`yu2vGI(5^_?)7pY*C&~>VH+} z7MT^3H-IZT*u@-ZB@~kB_INf?4^nOS69?Y;T}}YrbBaIJN7LVzamSjMd$rA)G4|LF z+=NwuzwmpK%uGw<+hw(k)~*IBLuSd_XZhabGVzNa*4*sh2&b2H;3d8_I882p;5kSv zxOP>A8(E z>ufXlE8UE{<%V5ayY5mLG_xl-Q@(NF=3aD&0vxSV@ssP3pI%bdlQE9y@Y$%eVgtL6FoLQL-q4;u>jpO6_ zXoZ|Rp9D*~LR`}QE?fm5C28lQt`D{pR?#B>r<|;L+iwt?2lWvUYp<7?reV0YPZjj? z%YhI!+bHj-O;DZsv6CQN@|bEtBTlX&wB8MZb2U@%Szc&j$+PuTAG@CuKgXiW#`?O6 zd|zM(Q@f5XRSvuI6Sv5@b#nDKuy+EhX10@Q|677c(yoZYsCa#-OSzEcIcP#~%|js> zM)_?zFCjFm+&j{*SeM2k6Pi36+Hb4SSZ!oWwKEe z#uoqbZQK&#o*SE8AWI~w$N8iIchg&@vAQ^PX>nZKW6HR6MSFk0y%GlIZ8&ZJxktxp zhhoLZ?irM3OC|HCQe7$77{-7U$}Hjb`4Y>jQ|+Rtg2@x}Ch0hK7W^)l3JS92Pztx3 zfXQAKhU-QZ0L}U_B|zrtd!u|GN{KIPAy~H*2-?9$@C$Nz$;#35@_rYiD2jkYgAyCb z0LD#W73k=1_Do{YuNqRDm6@Rj$&3M||2&_E6~ms7Y5$w#F8~EpLKk88&zUDtlJ*a` z`Nx1cGD$803N7Otpz_6;_smspDi4h8uU#<~mTFp0X3(r_O>!+N_DNcf41NvhX_D!U^7xzM1IRzIx`yf6)Ac-d-_!; zI_Ol?N3cyh-41#5g!O=1K=lAG;m(qk8#YZef}N4X_WKyKDo$WUT0%A*{%s5Luq07a z;pP|8(k^3{Ev4(e;oWst& z%!(wCcC6VMZbxud_4*J?4sgD`N#<>`&euMX&;S>=+j^-@#NPUS+im?P%dXaX_s|Q6 zAKQTs!79TG;8|Jd;@-91uOROAQj=Y-ma-pl*+Dl>o|`_{mzA*G>) zIr4nX_J>y|U_0(szrpQG%nbAU6-f)0lA5>v&zyS_=({b}Y%-8QsBP(c2M!azRn@5oR;Nu4R!={`mt`NFsy;+5wjS>V+6@JV*C7r*55 zD8(>z6NTY;Z4dWynbT(wMDmLNIDTo0Go}d@0nEVCIS39^MP__JS!(!S7;HnPqOXA$ zJDjHI{(euFPeaX*-}IPZ+#xsuv$njI`H8s^Nd88EvjrU+x|a|2SL(7r+C9xXQUM6D zS#fKQjMU$)uNi&L0f8F&@0~Gy>?^Q;_3E*@DJrGJn&>Vf_BDB=*p|M-x)pxL;+;W> zPGWm1tUJXx5DxWK#Q#$5nk@3B%1A`Y}n z>{E39Re@Pc`xGC}P;u>8M|iEKL(7!7e^QD|c3klX7%nM645qJJXzNO@rkL15ew?J! zi%~|Yn%YL^&*Lt+ULUogbPt6ZZ;Ks`Q1!<7zN*V;$JAZ`^iLd)TzxrE&fY|K$lb%3 zb_4Kxy=RoM{*!;ieL*L%452|fl%Yr5@)B1SsidO|sy+dXqa~Y$dI+vRMsy-@bW|<{ z97W|`R?UHe=89n<<$84w_f10$m*)lKaoCBw4=Zi&X5%%w0;Eq z1*9*NnnLeROz-V*^p$FkKIF13hem$xh<2+|c@`p@3}?>>kqk+aF`0J!#=8FI#-x+x zi>e4@hRjbZHXL}RL(9Pnj{p`sPLryX46*Li2q}YvKq2vNgWB_+TK6dMoW0RQ}lvjno(u;QJXPp}RAa$?UNZ;QX$e&%aueI1$R+7LF8@{U% z8Qz@QXg&9o%JIUm3T$8z=JL<2g#!H4?!Z#@NdP!tsu zE;94R#68T9N+>L!QT6$+V(Y*~5&QJv#i8ll@2~jJ5E|US2!;wco_4K8%&QyoTswC$ z>(q>u1Y0k>$es9f(>gE}>|5Xf+SdQUfAYMCBg#9RlApz6DOHofkow-8VbZ!~H_3z= zEGziV0DzIkz@Xh?2ZaN6?&bDDIIJ*>|MQQ!axIe4mP{Yi%Xd_+zr=gF{==K?^*7dM z*Fyy=yOicHQNiLR@Xhq47w z=GT~UFUVPD;hPPEiYlH)0dtD{OK5rVV$%U8k#G3m!fnHcURMpXt?o5tTRTZ2A0JS8 z$nGU}dJmd%Y$*!v@3rh6fD?B1FqB##TS8SK4POs4UpqytRvr9wPFOwm%LaoGemyI_ zSwfsw-ZqzD!&`~5j^tKT4tad{|L1Gt2kJbv>>T{x(EIz$8cut&I{5# z>-S&g*e~{w7N&cNZ}kV~j$whizciD7;~2w2br1aK`4nKmx}RVF7Owkw^=|>YpHKf5 zvio`TZ$Z1CtA7jIJ)a|&`v0GG|KV$MuG&T(9-e@6Uy*8FMIN2&Ta&j$9y!e`yJYR^ zg2u9=kw=d5$}HpI2n&fSjWZx6u7tqBpOhlHmKMC>+Y~tr1Sn3`bdD577?-DIu zk}qD0eJ$X;dUb(#ow0D_8YA94OE8Q12jns%KN|4vTY3b;@WXgw+0Pe*=l{R$ZXHbK Z*;t;_OQQnK?t>_JuK%oLo+nqP$r>)|rFS@ME6~x?>%6$eX-x=@+u@lJ}m;Y-P;QT6nTi5^n#BcuZng1sE|1IeV$+VZ>2{XfwbiE6)?7=2NPvGOdf)TV{1$+a69D&gO}f(tnQ%XWi6=Kw@n3RYHC zC6IA=j+uJFM)Npd#$W6=y7{M1IZe+M^)2_q=Tj`F#SjEsr)_=#^M4O`S)M0SN#pKm z2qnywkAdOOLC9U7o>YtvLCXof)8WYwv5KRU2mWwuX)aWB$R~zJ;(lEuw9-$+c7*?H z6fCo0?Z5@R))-E1e=JT;)~?IL39^uRvc1cQ5vRT|3Qj^dIK|$GAfMG%$>>4w6BCnk%W@y%}@ml@-)57w6p0U zdA1u6OCcX*oYK=<3sWua0*0(+UI!fzz1O!<+}jx5{?2tC8Q6nLaOw{o1Ok3@TT$j* zJW&$!sqIsn&o?=A6yvRO0#T4>dk-pAenCkg@1>>R{C2-9 z9NhM>!MNK9-otr$9tNj}UT6G5xEZySe%pP?Qu!;2EM`o(9l`DU^U(H-_;(^l7py{% z8~q)_Oz$(ZLq;TQ6g#x~qGJKqw+@REtU$YWWiJ0D@`v==lpUQ#77h3un&3WfQb@X( z^lwrm=lXsw$C_tr`-vqEwMwg$^z0W^>;;!rs`iSCBEClv+6&&*4~y|HOw6QqQ|o8f zbPg_B*XvYw9_cb4O-L?YRE&>%3nM6`t={7*5?$K90m_Bp|YHk(bwdV=b6hdxE80t!|;HD z6mscCm-26tp(AJdDi!7B;U|)c{z(gybpg^vva8JC-k;do8z8N5evWf3rbFUAov&iu zr9B4uCD-^%j0i9Lrf-O63ol1Zw`LXW?GpM>ZuSSGaMAawtAzcjfMICq44c+hL4|V*Cj-x)`It#qj-K6O9z1 zVg$kgDTPKIR~CoFx4_Y4r`q z4w-bYQw~dJg?M)=_|azz*9N}CFd#{5&a!-7Ry!%sMFeyI*tR$HS^4dIG_qyVQ zOZg9a8Qhn3*z+8`qE{pGQ#`)N5O2S_)j2mF0J)S$D*C@v1JS5mRP=BeU8)(r|i^V*K^lveuO9FUN|eR(k0Q{f0!dS&#=`0@28Ikj zPR~X-3$~=hrKG>@V;>9Y=2-yt%VSvdaNV+y zDx}t>LWI(>VX&{Np%f1g)7TwD3s+>EGI zB>zvPcUmd-U4f1kZ?hVdSWXLhMDpOj&$`(6;w01)q}xOuHW|Ig*^2s)@&Hk)H21VGmZciT^KfM7ceq!r4%)N zcq!xzaMIT)9SoSrZx01QRIsWu2*tIWz1}}e+Wq+tZ6}YCf1!PC?tTS@)hp_`$Ez&m z<&yujexhzuUMJ$4=(f|Mh`sG@i~NFfzZ)8ONzhgB5?#l;;3XhR()~Y&NtPOcr$vd- z%sIc{cc4Ig5)qn3x(HTQRIr9#%FvB@TE9x8#1$!eJ6|R82NS9s!JtV3ekh*;LirXV zxYfFTwgoEz+qeG(mc;a5^rH9nsw*l2d~ZE(x>aaeThR`Vn}(D^oSH>*Z;x2L-vi=XXb{n_&7Tj+K3>jrf`RU5}UN{xU%A=O<;0 z(Izcs_3qRMPk#YEP6@IIID)Ee!6mL79$MhD90@Tal&5RP?adUzeEX+J$Z&4hC+7}$Mb`LXfR-CElI+q zOZ9s4lcx1R;eb~+dH}`GPe)ChWL$m%Z?Cf!=I1a#H-n5_qS%Ooq={0jdzsBnT#L#r zzGXs$7)SvyzUEFd@$1K>$ap7UN1<|V7v`vKD~dQ|;Bg}(`n@9wM_Nt4ZUXE&ihphT zPD7Cs8`tk6i zA0eHX=6S|$l%7V zRLi$h*x+UXKsS@0d4pTHCI8!IE@7oy>xtCllSmDL(JzDG`UFlj2uFRqwu-wFz6UI9 zP4vj-Thk+-aDRgzZvi=MV&c=lN43z;=dR!WM!>yOqTyBVoKrK$=|y+MZmg(%W2Ki* zO92NN(yiZ^L}oPYf{SfDha4JBEF^j+7&BLtZT>X6s9s2qYin5xnDE(*OjWO3QKFT3 z_{P00wqYfoH(YpbJT~GcaQTJ2%xO<(PPY48b+ig%3zR&Z`yX=aTUKJhM(iRDnjSM1 zELB9P3Dtg)-d}IE`W!$J?dM&&A17kjC4--`?2%Z!h(7tUc_Y;60yW>%3b>_Z#p%*b zA=c3QBOso{GJZ#-r%Z&->T_Vb7u^u(Xzi?~8Nh)W+;g6C`D|KPod@PA(^s4I;aZo) z_NqXma;tdG!}Ztt=!fqH|A)iH*(Ni`x*dgPAwzc_yXOeGv*hAHjfNc3#Pn!gbC z8V_FFfJqY`0AHKK`^Mf``EaHSmh!jl{22e`@6p(=CV-Fc*~?h$Az$2v|Uv#q_=2|XN0@>+<`GO2!Q_36b) ztA(!kn~oVA&`ne+r#N|W!{+_AEmVH7H~<`OrFQ>#&1t@jb=}|SNZjg?>di42cIlO| z)-N)(Ew4kmxPC0$-C8s_@WI#5hB};Qb82uN-kRvJHLQfxlf4?hbuKTtUj^(oz*<2r);t>1Ovq0|8E|lmo7rpz6l_3!SoP?jh(V3g2Er zUNFi|c2C&d2nQT|36rx4Y)@-i_6f5`;+(!a>24c(XIM}&cd{Lj2F0&IS2Atty;`}@ zeQUPD++g7P!hx@LFlN%J*%5$aQF;=3*qn?oh}`Zst*&wFRL8ZNIT}&BA)dLSj+_Ib zIl?JN;f8j!-mI-$u^aYVJ*KIC(|B}ox`m9>AxvW7g3DU%qW%P-!glbpN6{;lYg#F$ z66~fJoxPb47-5txaZ*hWVww;HeOYVQ1kaQ~&`I*8n(dt(w2lX42e-ZCT$i*(t$ULC zG(h+_uzq~@kyrH7WJfLq-!m1C#{fqJ3RS5Tj!_e3e^UMiRS06cUu9trU3?3Av^Q$m zS%erAcYP-Q?E9yOmSdR*5$CJ5uruK$n>?o4IWRP@?rE>=6nI{Li{(`2Vq0bD)o`?$ zCG#K|rw<)qQq+8OfYD1FXjxgUo_#7-_26OrsF{b^)@bu#<$`?Qc+Ka4V4=FND;0y9 zR@h;K@TsbL(@Dqb8ye?P|KW{LfHB z2y69DzudRYpN$w<$LEx2NZoK4yOBTY|M_m9xRE**@R7SWM;K5Oj!!+@&MqaX2Yxc7 z=8*n!#-L$vXxeI9^C^_xtSTt@y2_b+xue})l_rlIGyWVFY0qc-J?+v;EwE6I06&W{kw^~-4`4ZtWW1*V zNjILY3H#!^zI13Rzoy%n$yU87X1l_bhg6KX41fB>+{((zP0sONp9RrUn0wP#PbX}f z;*p3JgqtYlHRaXU)uxg*lAy|TWy@l7hf*lXw>f37p5%!rEKJ&gV6hd+5tnzqf2|&q z^3|^U=BOC3+X;OT=*L%$y4Ru&Or7+vPWC=JoLZE%-kz7pi+vCG^^B$3Gm+tr&=e=* zwCo6TggOq?=@h4@mA&eow0O~A9 zChI*gV>jCE8@t6P;}%l^*`YK63{{0peeV!_*dwCX9_#R+SlwwdlwblhDl_$E$8XD; zq6xboO3<(EQ%qQu>Rdvo$Ow)aT87>sG#?!j5;x{Lr1EopioSU9?i{n!bn;x9X}Yf= zC`mTFU*3_>#Zkt;hHb94(kZ zqRS?nxR|r}wY*mrK+oJE9KaDQPP1wA$ydp;P~7jfJM$+svYW2T*o@lVuU{!svvSMa z+{YXpI{jMamclf+tl(T)yx zo$*x7R&M0Hx>312&uCRNb6Rqk*M_eZv}dPEB)V-uw9*{FIug7J2cHdRh!m{0caP?V zs9sCv$PDKGQaFlpKD}B;X_cUwt+-sFH0kJ-iYErMrBud*CEm!aGlpk~aDnR{Q4D*} zs&?a?+JqEQErwb8T9huGpm_>D2&Z^5lL+rGEwy??&F-UUY&#@1$! zQ}37I*I0V$?f%r^Tn3Y zZq_a&*gvk$)isPz2YsfT zqvJ1vUtw|k8y%k15v9)M?>Z+lJoxqqrvOJMJ+8T@Y&xmA*gU7iUi(H`>y2bZOOJ8& zz3Xo@4_r-PZqRJYYw@nAA$$|QF`@HA@Ac$EO`ga*sf)(|)wpk73R#hB1J6Q&t{Cmhsszd<;`Xt zuT#rjtdy0>dhuCie5m_lthpU-%B6SAt;3NJc;5U*xZI&>%qP5 zn=wo4;B)g;e^LEf!rS087I;nIt}p0ic1c(k-I#Il#>IP8yA30srZv6nYlr17{}j5K zc7mtVJXc}95j$eiC|umv?AT62HKE+sFuT8SD*%!{@E1???qS;CYX~dD)g_W!HZ!A5 zxSJXLTQ<)c;Ocd!es>hKf$F_0|8S4gmhj0p90%8hm*y^eRk(r)$ScF z4{{YyQn^xW)wt#Kw1={dnzKv3Fu3J}*D^JDN*%D|+eBz;S3o|#@BJw6-H$g{!g5U8 z76TYGbIt}N|6-)YHoQ%6ILyymmD}nP)hm{0JlvKXf|)uZT?RF7on}_DZ2vM`3fCD^ z*99hpc-gCku%EUxRnb<-ZX>y-d&Yim6z5uLq`LCR9vO~T&A{!q>SqsnmTqR?W1W1r z67{o;Q)h%fWLXh?ZT`Vtk4KYkt#rvmC~9RXBV5zfIQ0yZn-AM{H8hC z;>O}#ja$1BgGsXm*k`IsA&LB800s9rm4FxR(EG6_yQ z0|qT+%-tCX*+F3oFbBUe;lufSq_Ef7%uF-e4aLZ7mM7&{3{zyuzWXeg2pj0QiFo-3 z@o1sXx!*(P-dEU8)5mSw3xZ?OCtv9@g!U@couNfyo;jz|Yg7%20SdliZ}TBo%p8*b zJo1YmH2lD@^l{*@-nAk0WxnmcSlI*XKF9N}M<757Du}6>xgbf+hv8iYZS?K(W{1L$ zxi4=S3Qx&**de2M{pxRlC}vD}W4g|b%5+4A7+6CKGfGM=#C9A^X)l=tBCQ5aHk9{T zR4c3ss!lJR&<36=3=%>1*lK;}$3c2VBhi%yVNXq^|gn+V+P*i9xs~`N=IZNRRzxl<2T6nb(lV6uOf)^{E@v#}fVlUb<4R zMtd0x%%V8#Exh-ABr==-b8RQP`wW8Kqanr=BUHX&o`IJ^N-+&gr^uiDw1Z(=k^E11K0CcYbimaLlgB z=U7s^H^zu>5oJ zpdgFKLYO{~JS@K3Hw)Jw)!2K$zU^Z@<4agQUt#!N8oTx^hN^BjI_C4WMvj*;&I`HM z!@57N3|qDtU0cF|Ak6&{y#reLXg+N3bFp}iGwsW&)#Pk^zD4V+(=i?Kxuw<)LYFw* z$JedA>%9`o$I-thOtsT57Xt0MvxDVH` z3vUTN&KU0@Z`UDr&$Gt|Y8MJR`wAXN~uP zINp&~-K~Vf{T+J+yP3OW-YTlJ#GHh9LMpfJr8(%ItBS1qp%Se`BKulnPuOFq3@(6b zE;BBM>n)2_}*w(6e zMnk)Xs~wOfeaw01Yy-w+gkM$cA*gb?M3q~toXGmTTEYR*98WSyZ23aiUY?U~JkW1^ z_R^ee&5O0S*Zo0BdhccY<_rNfoRxq2jK=GW&+q*zGmh1q1cLUggS;E-6w_9B!~!5s zCDx9UF9D#$YMzL>-<#Na)d;0~c{uWVC-m0L(!}HS=^DrqV{WGI6pZU;jB+0%o?94H zw^s*!e%e!ye85BZ)1NcyWbCfmzhWD5bUQb9ARG@pbhaF5)v@!E-^8B(`Z_i!u{|%T z`YGZGp-08#=9)^MeV%Nf~9wq>PdSWI||2^&>k|Bcgq|0AsX52>2 zN>?S9I9Z)7TXL$?;XK#lHDz~yjg>7`@MAJ{zs)J?){c>euDL;oPjH9|_rHV<8zcye~M%Al@tA4gq!x1m5ss}Zt+NvxP zpQ07eRms_EgYAuBA4Zrwf+ml!qsmxk_5E|baaC}aj|UMZpe zwhi65J({MSWi&(k#A>d79I#3p-_%dZPLuB8UP~+HA=;Im#+6m;yup&q9868GeP#cx z8P8T;#g$d?Nc?!RvM6gI#i8A)|I@f?_VpCc%T)sKS)8VD^ZxUd=SK&#N2_K6I47)p zn0GfC%t{#EPdVm8`#`V6FmQIetx+vjsI*bQK{m=iWeW`jjwGLT3ODUMULk8dBc-Pm za#gMlrJ*g6Xb=_Xn(_;xa!O^$FYq8oEU;IhfVc^lHo~@Tp-9AQ^e9L<3 zdY5ie)qsWq;PV&NG9W2WcAyD)2`2Tt4wCcSnqqg(&5A7DOZc)2H*CUG+Dq!uT9DSb>>K^(2Q zmt^KKeN+4Lnwq&G&!7OoLR9u%pM0R-1(xovxlYf4591f(?D|^8B8vtXM-N}NUwSh! zf-Y`;3Niz*LtJ$;3;Wq+xk6SGRm;{f(^FD8(mIoaaa7R#pXaaOm15shCy0?hdl>IZ zVF(<=-gGF-Wi!+3b`PS0HGxdjSP}9phxF}%J3R`ZN;YuXs5tt#*(pXWgN#d<8?PFV z(xi!CRS{N_oS^PDp~sO*;+#5K=juA3iZM{Yr1nTV@i5$aR3B3h(lU|E8Jqhxx?KM7 zhAA*Oyq`DlS_98!59doIJ_c!DV-f_Yi0oUkCdfluL<1miqI`tabBeYMlW2FSo^~&_ zw7Cs6Z>R>5`g^BOGN*6OEDq0MO4jzAp_`w1RpTE~ zG8$4Ylvu|*;pYr4`s;0bXyMj-6^^$K{C24Uki#1p9Da{PD`hH~tdVmrT&s(fx>;$H zndu=-Y;BF4WT&eYCUHH%Y@UV&I@_A8+A>Abb&8e=s*SmGBN{xB$}un^wcA4^(-o4@ z=iYkEBB~{DW0pW@cUr<4turFtLrap*UCz9iz#4Gd=01VD*a)X2!~gSaWRfN4lPFhn z4rqI1Ov?humR!q>XUzH%@7;0fnUnS5{_a9CaA5CXfUR--BC|GQ)rSal(?Rz=`qUXC zxFwj!p{&!nyjh?VsWHtc2*!9kNv-v2zS}wEy%xEfN`P>om7Vv~bZJ?#0bld_&iTev zu_y_Ue!Vh#v^|qkYB!)RxBr9Ia&(oQvvWb}g{HTL=(wp}qV}~=flgx8RtvHAojI{*6sdC(~Bn2$?BJg`ra%>JDGA zKN*3@p+TRCYt2H#r)*EJ?S1>{d%Pc=;C?`@2G#4z9+;Y(l|(GJ(#nZ}935h%%o$yU zn6jD`Se0%YJW*)&ggqMMHO?5#KZ$QDA-9y%Pakr++|1aE@4 zxBO^dZ<0I_j4KtXqZY8C{Y)7E=5Pk9Db?p>DvV4M3381_=HQ>mWKo^UjQ`orK3GQq z8~9pw7Ca^N?UItio)@@;hSK8$m1A>UwZt3GE_5d@nqM6y*f#&V+372Nw7*pf{VLS7 z^V5{Nk-rxNTpn!Bz~sd^-&K2Pu!+X^Iq@Gs_=qu=#h#n28QiGOayXD8v;K)BS|0MO zwJ6>w5MumMh?+ycXxIQcZKKX>ExGgEUnw>Jy8?mb*7%S{KTSyD{DC~qh+vl-0C}*k z)!nE2?`;FuwD#N!(}8%sVUGA_m4+AXl^(2*A8U5A^PCzM21#UK7Ji1Bm2od+rJ>jx z-%=g%js=ifDN$Mhm#MfO7fOWh+T4A%O7W+um@gpw-tN_cC;0r5fqi-pBQp%(P6XIv zw7aq9a9$0a2ZE6}HS_Y7jwoK;$1-?O>%NG)EOd#mUeuP8P31Uka zNpu0j-V|7rbi+<`HJm7b;}A*re5A?vdU^=szOHBhqxL1x%sCBlp|?ZA$EB9Jn7;_nhEAMGmiWIVV5zO z!s_(BL*2kPTRCFfnMdYtBD}^&hk~$+w;@=LHe;JFR@qo>fvyG?xh?lb^6r(K?z+Y0 z`_Q_I2JgD>z)Pyjv4gy7s#!!<`aN3L%OShwk=EouX5ZJw)ENR8gA#|YIij*`(nH)E zK-5%*8*UoDLiD4jCsOPhaJ-(u<3(i>mCy4f8l zU`hoA1(jow?oM(`hwm;aeI`G(I7!2m>?%hB+-g@RX5ah=Q#8^t42?;IfD6`N|L#gou~mi}wieb#}Ivn>!bC=C>wzWAWk|JPdf_ zQ38hIdeZmlhfA|4LdoHScN+PE4>?)Huxy1E?^Oy2m4Fo4|iWCL?A*msoOZp5enVPmsXSOr+CFOb`c?|rB#LwRStOB&?F zFOOFDE3WMS(3#&AjU+=+{1W#V;ZZ=z0i|l=^@?rW`51xa*d2p zU$E-KP3-Pt7U_hcYA0xZZ@`ssX^41S{7ri>FfR5i-kTCkSGTGBD<$(njmY$}Qe9o6 zdcEbBe^k+xBr$mRybm7CaEnTwZ~!uybySp~$J4p;G=E9_uiMV%>Tl z7W>T}9pc}kA9yl~pRg@Fj^T^~cZLHwCZDxZ^Ut-^98BSvq;0gn*I>UKkgaP0d%7!< zO@wI->#&)5Bp6$~?9qBiO@SD)u|4Md4cE=)21ewDxp6CAPSg@sU|9$OmKM>8~j7 z=zr`5%sv9Por2Zs+Y(^(%y{x|4@3j|wUIcx-@Zqp@9((=5>wGnt4B>;LcLZ>JG%O+ zoUek(JPYDc@V>{dUc{Qq2pT<6X)hmLkboW1)dF#5+wNz2_xvL+nS<@YChStP1b*5h zb^LL#;N#H^kp38{ZV=5FAx30?6C_Es3j9Odz8AKfBBSMS5Q}+3^L_iYhQI9OzK6QO z>o;hHi?m7B;A&qz+(`#oeN4L>u4SIAPrT#U!hL(w(! zYC@A@Zy?oqg$iyAxRM*oG-It?ykp#ta zY!l{V{4H_PsQQs!blN}`H7w;XS`ZF35RL`;m?`xHvD^buJTdRLclInie4}U5GF;}d zcg>dr7i7IAkld5m%a0gY&V%n=Pryrv10bfUCMOiGv{yvOba0Ds$Rj z*mK7BuXm3xEXo~uWeC$t-WdMqpS zx*XW#wnc2-fZM(%8`6ea)f~Ns@4AWy^Lf1qX*03x-X*A%qPUvFJ+$>+}*!PZ@(GU1wPUj4j{weDjDP1J&$m)Oj>40CJ1}5a{q`RB}$zpD{)=(5!k6<-M zyPBcdKhV-J$<;}ys|#t0ES6vagd1)|EUc9G_GCUCDsrsrQDMIJy#<65nUv2k;K}Pn zWneE-Qp_f6hH?T8GVD)Q^ASjJGY1GSapP7WRs;Fxb!Lrx%)Qkv;-`65wz&&cim|Iz zlR}YrY)Nml$&^|J$$kV?~E0%0U>3^tr?t+K6I0{k+Ubv z?t~fj7c@2p>r|+lEj6wwSt-yhjt29}eA>>ApRD9u+qe-5;R!=74usWet@)oq{_qN$ zeHMH}8bJpJP;BR~&O2HmeYeQjJR;eB&!UI7qQ zyEn&4q-28^+U)Gy%4in|fm%nRaxL!5oEy9bsNp6udSPMx^8H1Ph`v}@#W zd-;CE=+}d1n1c36RmsD9QTZq^GYxff`i$~T5PprNfmK}Dd(a3b8$Uh;B!%T1y@{!Shy5SxQWw(({h>VlxYJRh{M|N_GPi*j0kSa>4 zI5@w!X(9(sm+WI)T*H=9i;@!73=2EW$aSLssZMBRl4R zl|enGlSeF}gYKI+HM->qM{>xp0Uwo*^dvXGUg=){(W-aN! z0ec$|G?o`F5^KP6RN8ko=34a=ZJIREwHxhh{05i@-c)R!#+S5@4i6X#rB=S#(yG5c z%ksc>R44ZJ$fKY-yC|V6W}VyL{b>`FXe6#exb%9(9qqv^t6m~;{eZG-Wm%g4X^eEV z;968+p5oDBc!e87g;2Ns0*PgI7uHAa>x2Q}9gJr#4rF~>c+2rIRf|j%M^eFiJ#$-< zo!ZLY#ek-5lAu|)(9`K2?>tRf{ZFaCIPd=$U=Lq%QTm}iC8s>Zrf=|UTQdM+PJeh@ zmwk_4p2zZ1HmG6V__YNPdWw@>d?r5+`BW$UL6hWxaGYTERM~Ux3+(b79#hU)9+(+o z{SLEz(JF6UL^p$$w1rsT^xgAjPr~F5caSIJ>K0PKOmVcDTR4Y|q_bAw#QkWWWvg*o zvoPJ*t<}M7t@`Y`m{i}rOqKCvk7SggHuG5dm7!_gxD{JQ8r~IGc>9yu#u~SS z-Cm%I61EM0a$l$qL}K66QjX4fH4Fc0ChKktw6gbx6+0oc2E4szn-JaHv8In*$L$ac zDbDRIfO4Z9V;4GA6~y$l;uo<=$u}$%=eL?w!Z{XRQVHDvH{S#{DTxiDAnMQwzlPJ~ zuuW#G19Gu+`NDK{hP4M~K^2eND9eZSO~3-5BvAUbl|C<;rf?3@+fVPh4K0*3lcXY2I+MmjEiu3 z!3{qCcn-(PJP2|du62CYujvhMY6gqGc|5jC#CDphA5SLTOnGr8W2o>VZrqwPp9501 z52gnPx94uVA%kGq|0pK5Q9P*##9u353<{8+Ikg={abBN}f%#!uH`FrpCQAH*>kh~I z?<=_ru7v02T?zWH#2H>JkI`QE87xc#6$$^(a*5wKh;D`)xC~YqlfypSOE~hlfW3<6ULc>~CtMjk3$Iw=~t zuOxQzY-F>d=>JzgYKZz9n0f8~85 z*uJjcs2eN>d0hnto~_^@#GI0U zFZzDse$hNeS zs}6DmpIJ$_yview!0W*|$Rj4@t*Nag&3GcQRQ7E_Os_c4MwX~BvYv2E6Rq+q2rrc~ zxjksB7%#wj-`dBowAZI3^5i{+i^N+a#NV}Tcvw?dOWx&)tWvmY>na_4i+AEgq`5Nl zg`G+H3CqnMx~?e6C{>dUqsBMJCMMK!7l?O1Am06cQeMB~t8G|+Cr4M5c$BK~xGk&E zd+5WcWZKjJYe{|mK%FU(q6zOZA9q(!p1>-CWq@Q@kibT$-j0Q zLt50A72~fmv5wvwXwWt`Ha`2;lOtPHI4-`$R41ee7m77EczhhstruZ4wd+b)WGkPL z*nbphq0A&n+?~pk?AOtrMjhRfz9Y^RVcF9iqs|>at2(w}lvei{kYoDh53f99?JS!w zT+`%ngT&0uy(UI;vcNcuh;eOw8HCUz(O@G;d_BZr}Q^jvBf*^nDxUVHs}Hg>!Zu zTys;S&NWhT{Tp6=8{Vcj7<8kufSSH^b<=rLy&S1`Ig7w%=dK8=-IVyyN%QG~$DI$w{%`f@{MDr)8{O zhM_ZF#{1k)JTj(YLEh23quo}^uaC!EoX2oyxJ=!K@gAM&VE)6bC5vB#)%&-{)!J_d zAoGHti;9*L?F^59Z}R{p;wMS5blbFJ zPLnGGoQPD%+8UtA8~}04V@&K0;C?)F|G7chpqg@Yy)GVgf3`ZjTi=W3pP~9#37+t# z%{hbZ9CO$-?Q5z|@dBL&;ciTM+3JQ|U=?(PZf@Q5_W{)Xqk}8hM^OHMG%)^olKu)G=QF2_aZK!GP?%x$Kc^a>fYp*uN2HtU26}xzjOV}E{8Jj* zvM1TY>y=p8i_taH6jlu#xEaeMP^R}De58dXA%_b2M$LZI0Y7x_<_RH#ev6c#Bqc~) zrPpMXJzhfq$uJKxkk+Lx!j~|1nTV|22ieYNA4|Rd4rl+y6sN#QJ)xL;A~q`-#(=zY z8nPW_JCXPCPZLR2=Mso2T@_@Ap=W$sdLv!^f_sEH1SE0n5~7&?qf*3gX*|{A8P24H?q`qCiv#>{0GGlzwx{W-vQvK38hqPc7P*uUWaVWvER8D`rEtSDKeXd9`ATyn$1^)B0fPeMx82hDZ zD|f7FW>eyw8yULjkeS0p&b1}moo1IbxtB-Gyfg#B_5ni*fv`ViseH;7)J06a%Zri% zu8hkIO$mzlC})F!H3sCb8S}9}E0NUX)ck8m6n~jFU zsedkrXu@iKHQ>B9dW>$YX1`4RYgkKk1S?52Kzt^#OBMO@;q|5&g*2qIZ5 zmw2}xe%5dOy;Y4k74kGI@OMR)jL0+%W`HY-SBGaVsV>t*6PkyidVAcg@lOkS_mImG zv^-z@vuhSgDOUxxuB1Q{24l%#to=S?*ZwrsWl(3ActO!Fn@b4<{y8xX@O2Nwe>WQg z3@;pu1^AC}{9OP3^?!Kl|0{O_|9?F6AI}8-CqnwKm1-~{eb!sZi0v*`+e`gczrMat zMyU`A5V0r!)vR^wH$lI%3j#}WSiqZ@N5wPt6{hUgVjDXSOSG1f@IRM`si@`>350_TzTXA6TLtn$r&tR+ZGFa2%c}L}Oe6bBy z!RucKG(QM<#QSR~{siJsSufg9lhwr%U=ouA=m8IhL*CmU4Hpj{4|@u#XW&*~RWH@P z5tv@?22(QHwI2*o)NKNWxP#zv1jq5IA2=2ePYH1y;7TH!UQoaiDjrkn7krDno=9vk z@bi27G75p8zO}(2Xj)Tpt|H*Hh{6`JEhVA6N3v7EtWInL_ko#*aCmoBD*Qh|ixK)l z`xW>vOBLD?0MRfOIn6hMjOOQ0SJS@tvrCN?*_9$Q=>U{>i>F@-FP|xyMBv7+m+K}V zn}E}HcD0O^A3wHr#fc0yY$9#IgV}dv@6LwPLRn#h!QOz{l?ly7HuGKL;c6z)^5E~C z)8;yMEQ;~h5H07BVzzCJIfjjJY!J0pL;wUeUpD!)KCsATF7%f8Yj$_Tc?tW1Qb2iW zD@+oVqt4jb1XOZq#6yNd*rkLv7YnPeu>?8eb1cr zEQk-XHH!gRt0IIPv#_~C<3+8%qnO|3vEqQLvy4tU-XyLzu$!>X$Ya_q|K)qID{RoS zHR5V|SG;wKQ6(UoeJey$ZNT=<+A^4A689&g6{oaITC8;fsS#WJAj7OM;gI{xhQPDM zWPH`@6ElylEMdUD@qT@%65pjzYdyCk-AnIpz0=9*FSo{2%|Nt<8l{aK-f3T>x;x@` z?EmB?jx7l^!tF{8p218e-FJ`K!9pZGi#Mkd0NcT=-S*g0YM5ACDZ@ag4m)I0#G;(ZZi49y;3HmrN_-RUv%Ms;>Nnsv>UJygnua*P ze!*9J7dN9~@NADRJmB+-Qq0BArs~F)mD2x>Eo=(@Ry0eff4a%_C<@@?55Eh3;EOua z_}=NzMuVM<`Z1d{d-fo;?&YC%ep+th3xnnTGSm+R|1-NWW(e%CF72KP?x0*T)GGpf zd%#lq;R0A$pSS0AxO=`EY{8s%XW2U0WX?-z1K+Osrk*N$#fpDdTH2;Bay7jROiZNo zDx(_oC$+QeN7*Lu2w|6v(O!BlB1~^2!C>GUe4t862b-Spmo9$x+ zLJy0V+orP!BmG-F~Kqj7n?UxhP1 zRD2?bk8~VN4^DQRRb@l&gB4$e#@UMT9USFsvr3jWo?3|mn{yrET4napi!q3!bN&GW z-)Ue&TUVbxII;Eh%8>&tDPtE8SDX~SwdSrUun)d7#X-0u(Mj{G&q1gm*s6JDXq*^4 ziD0PhUu#wtP869tpV;Z$eM9P^Si6sNY%B?&xeB?t%_I(+cu@YM`k?b*D_4)~yb?44 zW3s4E2-z&eG}6WxC`Oe)Y8E*GcdRGtTC~jm7t>i>5)8A#IU|#--Cp<=VdBT2c{`m? z+6e5H?E#`dZqE0gnIBfg$IOu8eV@B&T{0<%!C&KQ>D!;I%* zt)5^(uB!2g-n+*^D2-Uf47wUep1B4_GU?rP;X67x8zYlyN!b;%e4e}QcqmrpsIG~9 zae<%QS&@Dbx82-4-9!_p;C=Kw2_w-1xcEOky1AW!o1gX&lUv&DX}}!%6cCp6@D#AT z+dEg3<;gySjdf;vT;*W%!3E4o=Lzj=R$K3B(a$@H&5`-YDlpTfA~c66Ss^S=&l(>U zaYyMOY)hco)ku&rW;VGfn4#tXmUkmoJ0&{N`q|3eaU!D6Wb86V%_j>FfR4r_&GhGT z%uIC45A#owaNGowDK2^}MYRj?!QxpnM}t^6@{3s*{O6bIiE6y|q@lEUNJi%i@M^PO;{t|^K6WS4L#QI^OHai@eZBOS(g%aVu)bzeM4#RTR@3Go zv&VA)ke@-k=e4P)LmfH|@u_N~@owp)!`KPR-|OQ4b>3+M`<_9Ewx_KuTuKtoj-k5M(=-8~T7{3q`tc2NfVp(# zf!+jedfK6MlxNl@g{3s@K*HK|qYAS@5~g|xGqjw${Ug|gPC!=H(*G{a@>Ty!D-IxsXouYUj~z0VjSOu>Q^4pf@%pnY9n_~?@zl`J07 zR?gn9X?>M;<1Xys0o=P|2{HoINV##eXV6hM#P(#N>pTAcVD2rTqVB%7VG%??2?;3? z5NRZa5+p^z7z9K?X@sFex*0-I5fGgrh8A#WknU6ghwcugLAs>hGpM)T@_(N1ec$zb z-}=_Q*1c5to!on$v-iICbtElCKZip!oHiHA`y0d_k5XtnwQir2O`;W(R5|Zv5w|E7 z(e_-qR+}t3a{~FAtoG6ej~{cyfJDyW9F4~3Ub^f1@hZ-r9!?8O#vgEa##EBk@ocbT z)OczuCgHYbX%d{P9wTH#TEsn63=4A-{z#d#VpLNCB>yA zzik8nHX}jj@W%eY;j7j%{iZq5meavcHVG&dWXRClKGL!O1?GcQSYS= z-dS4AX?l^ybWk67f1*R?BPhT1?|+wC2d;VduS9-B1NqATP{7(;X{P1cI zc2-_pfJl6OYMn66wR$=)G1_yw@>WNJoSHWNfXkVo$2+AJ%99F}StM3Q6@@%Ya7uP| zs0xj}PLHY4e$5i!LD)w4mw_OBp6?Q6w2Eo6l+!gl@n@LW)`igOP^rXtmaKN8rUAFAkrdKhn0|7>qK1x1K)TGfp?1r443cOGUb4P3&ATLuDNgQ(P2gN*!c2)OzAYn7dU+X!%6 zO>B`CK=t!|aY-&$ISD5x*MJ$vZy4dn{7)^WB2a*I0{m;L;X zsICb5#fW(~Ep?j}_?_#gV2*<}3L~;b6!n)2<(`qOFBnaafSJ;BVZ`NBv`C@h{MAlo z%3-|PS}g<>fYn9NyqgEOEd$^CYc>X~8O56wm2U#?L3Sr zhtuW6h~vs0H<}eP&d>~BUp);2XvFv?@YY{;I`T~C=pB70obT+rdEum zq+6M~$4cmH<=Qh-@Lz;`bU*Yr9Gp|ga!;`WuGa4>PV)F9OK$zFsvcR~>+Uu_l$-Mk ztC}7y>&?o&wskCa?q6PYCvXdjb*Q%NoFpIq5+^XZ42O5_uhx$iSJ-l_E#J9L1Z0bL z>(udGBDP<=)4&K7Z&2dp~SaXCW$7HqwdgA z8-M_a`HCRL&!EXHplJb{nXHU%Anx$+_Pctrnj#@G%muVDqv#^1%tK?TysU$9z%1DEXcMQX18zI3ina>rXsCMQcw~u zIc}@jn?Po>;m2qt-*zhl$T#f1q$1G6j8wx})K?N|`*&=_r_XHy#);{TDJbgeB6D)! zMMBuHhf~2!+ZcKyN6VorU*4C5^xWm%WT^Owx%Hm9h{EBBdowr3cm>}=?}x0M{Arqn zZXDjkmESfBvYh?scmCOa=C;|bW^?Z8H+}GDv5;z)BHLoKb^A8cJNg};skcuO4bLZ~ z;itJ9wAW?BP7xVKxwKT~#F^!S-MqJy@Jg!RNf{&sO0+>vnmoGZ&HDBVhk?#qr|So_ z)lkV+l#PtFV!e~~>CzljelKP;xGk=a47%}0wq4!Awj6Vh879deN6a;y7 zexh00F+BPbkF^>2EY?c*#HESOw0Acrss`khW%k=oQZ0s;9*EUVb3uuGgvb_O!((V@ zO0*ou0x(?r&dZ%ubwjY1C5sH=rBWeU!!fdg)kD z=>YB%z|bJDBxY*V?+0;}ydwL|ikc^xq@a92=e?eO*J^&5)7_%+birxJ=HN+4`2nQ2`Q<1at|ECpFb3Y^CDsfoEiUDfKZA1- zJ)Y#V5Vo5vAQmZ8Sl9cYaqwbFQ2<`PYdO-AqP>gLoVCBA=JwD&2}~7}?i&UC$Z88v zY!QO%pdIgWu(v4+s_Ki*-;scoOHsuEt^QyZ+Ilr9>zwEJFBLLIz);`rlB?|-0iI-T ztjh>MFy70eoBKq_X1~*Xr5esW1keiB@R-b0WS1duNww~XQC;|?Sb|r$>OO@36tXZn z*>7HY|BhRL#v;Jsr*)%X9Dpe+wMyD-N5b!CfcXxpD-7?Ah@)Z@yd-r!s?bvtDZ%U2q6&{ZxR1LisTA8y6hmPcoY<*7ci0Bs`EnXct zS*DR6u0IfoILtlLN|=dz(}D zEOqBdBSYc5+Gc}E;!iXbHKZRUI_)D?Mo*6B2p-AB{vBzCbmC#%9&?m$t!HoL6(E8OpSnj7H>O7Mn4#>GahSqZKB7|8t7sXJE3L8vTDY&y>O z?w&KBU`9ujNUt95NQu4aTrw!>x`Sa2ZW95>L&Il8H9ALXy|ZH;$1k+atExn+z^VNK-{#P!-j3bQ#{87Wt(}pAx9|YWB=73j zD^kep%viL&1Dj34feoMl0LbC?CxrE7kd|4y4oQ~IvRm-bN*>J9-c~I1TvXdzD_)e8yeC`^j$_Qb zEWRSE2(g9qo0IS*RrYY*U7L6nKDs~#!N~Asqx`Uu5MVO%g(tz`^_waxZ2Q8xTrx zTGaHA?$I4dkUaMI>WQh1>^gk9Kw3)C&t-s1_da~C&6Uy9*^5?c7ltL+4cP%OXpbE` z%EW8Lk3bYI*`lQ8jjGX**^v0&Ep>0#jlL;v+2A{J?FMpwr-hq6_89E9-vEsK)#8(r zUE(K6+-m}81lr5i+MnN|8Cx@Hdsj0gX>LXg8=n}C1!qrRGA}-$$rr3rZ&!VSI*-ANRB2bx@!JD9vw67c z#@_9#V8dNWF&DRhcZ>P?qlGP^~NF_9$FjW0;4+unrdL8Jmo zjTIkoBsk1=zAbV{-3)Zixr`GCkI@D0nCkn%okiXcz1h~uCeUBOWXM0kWEG0TU~Evl!TN%dkHV_7z-?Kn#+1+Dg6#3f@~AXZyqkU zUVbWAVv+AUeR<~%xGc__S;R8S`KdjX?5C~`e@*f;RWflXcEGuB?-2%}do`%{%lo%Y z&VWGfn`3O##Z8nLO8o=>_BBeb>9vc*Z-BJq2G;7P^d!b`)3F%Ob{2An)x*2>%JT2n zO?f_e7|R=$Q61=8+nC}&uiwD^EkYXZsj0kb)2kZ(OZ`tA+Bs~G)B-8L#0pJQRZr2!)SQZig#)iQO#sS1l4*Z80nM*?pQ(!tj z*46ww6VvfeK)nI^BZ2Ze%YaQY(f){mNgzSpQ69KxYRD^=NTj`f@n5HZu!$?nu=5}R zbV41Q07A@LoFf@5wri??&C&$2Fv`v92wBSuaMKip`ec;^0;7H&%KCaA9ms@x2Q2H~ zNu?iQM$W6K?(Xhe1aF6#$7%!90t6Dgt*&&usts@Oe*1}RlQNZf~0d>;IAQUBQ)+FguPfj$lO=Nr{E!u-(+Z%y;ehT{R}u|y zah>f?jx>XV*G{l2?KXvDrEovXqlB{fxmPEde;`-+1Fz@DnT3{XsNmJ4WOip%s(gH0 zzf8spojLL7Dg~Zwa9o@>nLi$LFv&~^SvvyZ+O9-6H?T-JXE@L4*77ZPQ%cqILoTWh zgef#ucPfoncXhkd-?ks`gO*51R9dfKN7!NTP!PwQ zk!a8R=hhlxQ$%h1ec{LOn2zBP$Q(OP=JoTBGFwIF7!KVqP6J}vc>x%CJc4PeVJ@h+ z8ATjL4?VHDH2g_+aYN?n`CzL*Kl{;w?X{nuXN7Vi&IY8=aI%DlL_i?M=>iF(I!ogx zugi`s$Qwjxc98RK6XFnD`>Tl?(l`@eFm>9h@>?b5nBMBM{iVMAWw=50!F<^seY1!kY zu6}>sXnkOedeX_awEtQm>{Mlf2+IU}XePd7awbR&2^%6S2cm|XR?E-JgsTUiEkiMI zjzvI-5`~Q@$E9DbRMyzL>l$eEB(YkoA@1f-z@?63N?&o0k7P0@jMWVX9n6xmz-DO< z_%|Eo-V~EWICPbv8zb@+Cvz)TUyd5%&V82=I`Qvq0)wch#hDn=k(1vlUa@yd42Wzg zb*bpVC0HeD_YoFmf#C_AE}*9rePBg4e}i_1sKe{#B`M|`G*0EHP@Gl-|65A9D*?yI z1|4L3|0=Vz6EW>(7wg2jRm|e#f&O_}*XNYZi7C1IRYP&py~GcK1rqe;R--GkNGYF0 zUD1KvLO`au|CXJLAzmwUac3Y9LuA;%xgiqt<5g$T%FW4r(B54!ymjs{bO6Jpj-u4h z=lV*W+u^!%{iZ>*ic%l(kIcVjcSAne{e3e z_)bJnMuU;IDA>y-yD;I%7Q9A27H<;~lS>`%);l6Kxfeu4ul^y|KLu1yW-E8aWTIpE ze(2S2G6Yy@D^D;)W(}MhjvR2aJK%rCq!=eCa97@Y3BQgwhB$dczZTm2oR&L$-bx5P zfLp7zA0W_EY0?;&wd9S1IO9$MkHayQamiVMO*CO*EqNL8)c3WUgH`qyCfA3fq#J|V zwuCHGATT_U(`BMER!jEh3>zOP+}WAn?s?iQKymRxbI3l6FR6R$F*+GslVikjI6_|d zKmJmch65I0cc7_mev}ZfkWH>(8>GL1U{0toszs{El*!uqPQ&qg@U`633Ff*p1Y49W zNVIqdxGz?$j`{p-ON87)LSw&0Q|8ro}u zVlpsVk8qf5dwps0dqp+k*s22c{40_>kFWkUzGKAWnz)#2X(77YEtwyKRd`=v?DZ;fa>H8~8~e-pRORAqnL+mg7Yhz8m@Nw1VH`fO;`yKhFl)?!_HYd_(uLdf@o zFj)p13V0gM#Ai%ch$uH)?R*^{91;-bhT zH#=wRAYBaU^KqYx>B{g)McPFZR1lq@n%2a%`t^4Fv+kq5N0zZZ2;U;}+mL!ku!<*` zF`0VGJ*Kid8VZ4^I2FOn*6+-pn@I_?FNXemGr=}^o6tR8eYBX}6EHJP0ATEp9QC_m zcjX!QV3=tQEl^2+r4HIU2c2l7%_5k0+K)@vll?$==V&wICRLMpHXAlgG>hjTuBEIT zv3yfF_3SssLN!$7-`_sL%JF>IsiQ0la)MS+e=>kd+lt)fC_l&Y8@UeBqSVSDr8_0D`<|n#&C(ku<_ob=Az@{&sg`Qc|Hcy#Qzr1pQ7b2 zJUUtaE+`>fpbMz}PLj)QtfhV@-_ThTp8b`JRVGuImZs`oa(MWcU`FCzEisct1_oc| z+%|a(br~mxQRDPFnj=f_;W8d!gIf?|)b8#mV%dcPE~6tn+Vs@7VnD0Eloa#97tPpK zZ0pN!FFCI{t4Mo-=~i5g&$){PStey8zIb)TMk5-l{N98|=POOOG}%17D7)qKAoDzH zi&80b!oG10vd#Az;e!Y7eV^#JxLl`Pi)KXa?$(o;KMMT0{fJ!`B97iT@3`Gwx8})i z*`4?2ByV~0F*2Rf%!JaO5aF2?XS_)6*38XQQTQFf>q@Hw*44hX;-1d=Pr)jvbPJRK zj50X6nw!bKjRD6?dC-78m zLG^pS`;IHnBHoTsu;iqAzt<}2+_EipijvTAfrl0}q98O8$fkk zZ24MwGh^DpD=IdAS=_%xF!467iruK~ghexhaqNA;S}Aq3BJEDF&GCiMOY9t(S$tRc zNCWhq9Mzmc{6UE;&Dl*exn(U+ITMc65)!#Tc<6a!Wl!$vE<)Cc!aA-Dzs7d<@>H(H z$D)={devGf`*UZmaW*g-Zb{#usV4Z-KK>9QMdE9pBgc^0#cnzq#ey&ky|L#$IgIyU ziD%Azd46OFGPtr}V_b(fiiKeoalQxvcREO?4z7r3%be6EI)L7Jf7I;YiB<}&mX^g!Q1x2nCm*CDwP)gvo~6WeY+195J{Jl?`j=-=Yxby+W7l7!)mP#|91$;U_i!^+s6}-(xvw zekq1HrHZ~QyCnB!k&*nX(r(-Das52_7;07_;rr{xd2_QGOSzngHe)clTbEA)aB|xt{5|d z5b^KTaz~aR&RfES$t;tB9o`ZzfFKo9WxFHO@FMYzG%_^w><7f6CzV+6b>e$(*uxsi z$Htc*3K~IRm}|s_VzNaSH1o~!AHI*PhDM7I0lZ-w2%7bSG&$xpE#wV$BG{XQAf-^8 z#KWze6{Cq3OhSlK>6SyWmW0`zSXKizK{T{;G=$un>g8Y~sOU#6kFl@TeIn&K{4UO$ zNI0&n9)vFI2`J29~^`r=jqYFt8lHzu(gIWx_HV!a(oMd*D7vW#H%reZ3>D`PQ= zPsiMA#(h5UED_m~$f;_DgxW6?t$8Dd?j{`=pl7%MMe!FrDrht(1-|Z7c{LFo zD}ed=Y{<#+zCGhbIi%Uh5HYaz%75snG`kIptRPH2djz`3@N|qe-OEIA#n%6lu5}x zeeUOPYrB*R8L37@Ar26lv#yOY2f*-l&JM zw~B&>pPD2NpcjIo?jXv1&*Q`+27DRL>hc3EDpj31{&=tqwwvJUK@` z{2HR7NV|ojuOq8bq>o8ty^B!Ep;VDQ9uDCoFbm(If+YrMiR{?;M*GyEU;g9D|56oi zD8=Jd`^eJL1lXYIt+F3Jsvg!yjUH9Uu{1N|a#g={Nj5$fA=^g*Cx5I+J2BrKZnNro zINmozH6S3#Byyv_v^p2(6LKbTw2kL)*H4D&iOf0RwO7pHK5;q0tjM}xpQ?Z<@@@sE z<=3_A&;E`wfJ76a{YT_$YBIw{qy@h$wV*YoR|Qg5frK-4wNV|>w5n%#HBj1#<&8@; zPGo*gUifHe;5$mZ2UBI=jVenX8C4uEo|!(TUhu|;Q2*DEE`FF$>}fkp zqU@WsGruDqKbC3bT9r8lPjLf2M^dvy(n_#;y1j}Y0UTD=gmMN>Urq$RSi8dCrLjvfx=PS zD?vkaXsCtZ;Gf#^D9gJraUz*Sy}z8P*D zj9-O9O;f9~5!)ubIw~BGfE0a_Am6;yxNaLQ07X2?qlRP1tB{;8lkH9cdF2I!6i2K~ zr~ffDG^1WEMF)!F@=m1tdttm}Y6$c&7kQY57xXaBFP0eoUT&sfV$d()D;6}g2KUa2)W*+dYjF+!J~;_<_{@YJ&g_+hix zBOL$TD7MXYRGVR&@PdV%TuR0jCBu%$A^+taA^Z;z^u#5J~L^-I+vwZ~U=q8TWJ|x0-<#|3L zY$EC4Ih?tMpWhU;F_#tOsyuo0_Ke`84@bK1W5ag;-KY=Q_BXI zKWO@wM#z+7Cm8A6xRGOlG4auCN~%$V%0NH*5&ykdIf}GN$}oC>C8}RVKK;KHDTXj z0ub>>5fKq)?M9N^P1~zo2v*BKlnRfc3Q0KmCOkJB@`4b4eMsDgQ&qGRWjzh37DOan z*9dmCKv@ix^ucJgZ&P9Ao+TFF9IhzRcX25fl+Q$fN`!(84mBG&m{sHUYKV(FuiP(# zi9=xMgce7NSY#Wy5&R=w z^a!Y_Xaa=8#@!j3)TQNjMGg11Zb@G0`9lnIP=L&*#F3;iQyps4#VrqFia($`+rRAda&x!_{W0i+g8mm0_d>8aF z@Xljq&8cPJ*_(z4b{i;dpsg6-LAyFP2+;OTfGBD}%?Pk$oxbD*Ud&QsC4UI7NR^2v z|EIlU-uK9=z@WnUVdUrI=V(fG=C_a?seI%7h7VC`g1t-m1qd*t<%)79F06NX)p-RBYV71&^2fFB$DZ=?JEKFTMJIT*W0U0=% zj6Vdl8mIHzeHXwHL4{(5m>4xhOhoE}gEzs&(1&fU955E$x*ILwVjCv_%BMEpY=)GE zuTODr?rQyEjq1-HiWCJ_{(i}nF#G)tz*|%w+(r;0<*}V7S?<(6l8g>ma8f9l{thVh ztuDsno+MctDxE<`s!7aPcgOOP-y`}%vJA1tt>y!YT6Iz#9&X^e@9sK1<$vJPGPqao zp6fWY{pQS0rJK>t?DT4{Pl4OnOQy?kZPiF_^+Nn^F^_HyyPZ9|Cb*8+r*rKd0ey3) z5*iok0)=AtF;^x#Z?i?rc?x!%c5#D^mT!z#4r^F>y07k3IF7_pRFD&+1K!n1k$8h@ z02Gk3jCwpVP#zQLDVKNO45I}Id#*cRkS^fip9>C_>$6=IJ!ty_0G_=t1YbOh*iP_v5adGXXvswjWPsF&&^jZ#%A$Y zmKwLV%Iik&M6VTORXlweIRHhzmnxd7wDVYYr?Y~=;WjU_B;6JbT6k?=o@Fq=P<|P` zeeF1a&GNt@O4t_*1VQe7qm)}1CKO-Gz?lm`(Wr@ru)-eAh0*V0ulP!I9RP9E0hd$c zqHA|-%Vt&7A1*=tkE2aY2^~Ou-LB!}nJ*iiqtOSL4otmK6*IUV?w&e zAi&ggi2rWf;@Bzoo>F+}clbfCxqYL)@sr4_-S@J0Mx-uhm3wUJdFab1DId&xsE-JJ zxTIqrz^VGgm+uS#AV=<<&S&b8Cgx|mN# zRlx&1<7QMm;Gb!{x8;96l<$udwDhd$9RK15FpR@~`)ALUc$Z z9P+Yu7a3zlbmZlq3t#`XuTbe(xmVH{N5L09%5BhqKOf7Om%it@DKq7Z8L-opfR|~O zP1C5N2~O%_$V{xPM6itNubJ(@=psTxL*uW2rS<1}v30#tmvN`J&VRcAShCtw);V|! z^(p+P%)c)T5CyEIVQ$Lh%uUbk`sUhrBercg=;6`>jp60Z^?7YkBCd+FpQp}7T5Cz>&%3*wXs$*{vY+gR&Fy^@ zU}^NfUv1Z?hq=ro#&a7!8mei<36WfLZF{f(!F|)gj}!YkM|_1T652`VH;)T!;WxXS zKUJ6gP<16+&;eIF_S$bs*^O;q+0ByDdfaqRw>WLzTHeim9n&GjUN+CYy1hg-56diH z_ZV4M<&Ej}l$`aRtj(T$IRwyki{G2eMd0ZI?{7g-GCWbInU=u2D<~}eZThbKP8E__9EJJ!jwjwX8DPA7(1|&`kB0MM5fF^fFr- zgH^_?R_P*+D|80LmXwtDrn@LsxEh9=TxToQb{w+TMU__yVc-EYrI@oX@_KHmbO*HQ zBs@C*eXb_nP8?o`TfN$*hq+b*eS6#+yoy7K0=(|o&rB^&i|ouw-j!c%EwUS&F2Yi( zhkj_@US)pt+bH8;^;ZkmMHD6}}yFy5eCYTSyiJbO@G9>DzJ z0~wp!#7tfJ1KBKr@>3@F(Y6D-ev<{T+@bxbO#Kw+$3*2xKOGQ&d$Tlu{*{uD5$QeVrO*U zr5sd>@c3GOaNA^A^#D23Flu^HJ8F>=6<-aTC{ePNWp<&aTC@_>0sY%ujFaE{+n#*t zCy~x|z7LLFEeoQ2Dz07bKr|@$^Kef)FfsfH>gX8Ew+tKN`qxw7!+D*iw8;L3Z?k~L z@%4;NziCoP$*0Z+BHa|OoWqG7Vod?kCd>247d3#ugRMiN;nvFp18P9B_{bLMg(swmquCBgx zY26g#DY`$5e8r)WhYyECY9-p>DzDp^bH|=l_P<9u1h;+R1NWMkV){SfLx_|sgy7>R9x=uWol5g^VLl_Sv^bV&Wlm_2aQO`>SU8(?Cv6RH5=m^+`RjWC# z6Cs;R(f&ctDspoS*YX=TZjP))iWS7%&K$Z7kQBMrNG2@%`!|l?CTM4CQ|nR^Aok{%AiIB1Y7)z zwXiCcorU0$w#s>jGOs!U$&mG_Qy!0bfjs}R_2X|2Zv;V{xy&-`TKpCDt-b5vue~XD zbv!yw>s}LHfq$aoT=0Bokd~Fc`J^#aS~|Dhct81kMx$Y&`tX|4Mfd3$gGR5O(0q7| zi|LCjMu_K|Sc9n$N zme>MNaD8FHnu4_pj4tD6rU*ZfrfJ7&+`1k8<(`Pv!&1kLJ}3By$IAy{k%K)Mxo6Rh zsrSz{vcIb_tN%*H1Ye^y^cVazF!7U8jgs9Te5ZHE2kG`v=X2e zQMD~8J6j;#WyA%=p}W5l=Hc;%S=FjtUl;b20$gI_j3>|iR<~o=!yyw4ni!{@NM4r3 zAU*r7$AS7wcvyA8TVjp!o3}Lw6tie%JTv;&Iy8+VDtGN(w{bxsK0;>}Md6o)TkVUB z7o!TeGPf&fy?cf#Lc}-jK%+!d<+HNRfpei^e2@;}%F5cTHox8Js4>g)X$Dl6o;LhO zr^g@}BWyl4ay_L&NK`ZuoFw13Ra2M~3cvyO&e;}J`TUYq8K%m^6U+^Y3dA82R4{Zt z=jaEgwQ!pX+fQ?rq62RdLPP<6wN0o(|8XtnKMRg`MdDbf}m0M>MV*Zg-H*z>Hi{cchNKOy?5=PN9&yo?;% z!a2x7?#$)6mMIUNia&fl8JWY)#l^0ht95tD1;Gz=tQrfhrUnhQKFw{3Gy7XQj$*D) z9_G7_;Xy`<#J{g!)T|s@w5u7Ahi6G%(#_WILZi{70X=#ueIt?*Ei>K+OYw|~tCDq% z#dH0q(7@}5laZv}8eOhq6itftbiK~F2uzw~nv3PK~ft7NRX@ z=IA}88{BtFoSIyu!yoO>rKZRymdqW68Bg}+I#xqXSs0D>U$c>+NoI=;q#s&*%4S&-Q|s8XsllP^Ps#e+mxKGXlz|e@PvjK!yn$ zeIY*&qME<`yD0TOm5z9DL`ccWCsz=TZ8-}(dcrp*$0zXKGtRHcV`lKX|| zw*iou$A(2>Y@TUUA!o=c?hOZUA~5e+;Uyj6kS|}Vk%Yz{{)k?B_k$osisTqcz87Z) zvwKPzttwlHenQ7Ty87dYc?5pzMPPb`=wV2STmuZ?D&;ip?_ROS{dZfzFx5$5lLc~( znr6vjd4_q|9wCw<7~l|?KdrQ}+kYD{I^!Bh-~!ls1&oMz4C|ktNH8SdSGf7FxSbBT1KxW94$2Uj z?$n6%NC?QTKM)k;hdn}w`<)A;Cc&Y(eDB6FRrJ-z>m|ghXq`mUlfRVa9}!f> z-ig*H7)phqsNVX2f+h%@muJJ~NN^~5|G$WZ{{L^<(Et5uU-IY7_1tp>FAnr?n3|dj zY;+6`TCACxnVIbrRR;~7vGPKw_)=J<;tfg+O)iLp6&9Coh)k*PFM8HU_@+AM$cI?o zO>j-qu%yuwB?yPyzkUbymyQAjECDgHlv9%!dSEA_7@Urx%ichN)BU-Pa}7kKzksxk zO$P-t5msUeGIa_+3B%T6P#%ko70--DZqticAhU6LxRnl*tNivPI1>{h3hEVBc21EE z1B1iO>t*J)*W@5C@6~}KMH@vbQWViQ_uw#>Wyvd}Xr*5Q5h0Y~akX~GL z<_0LuggOudc`arTNPEI*wsU44CsrD+Uq^Ts7x6lQ0#0?9rvv?DavGe}G+F$SAXz!Z zH49}QM4G9}j}GY-0Vvv31eT!5n)G|(%?@!KF~y?`#Kd%%H^U|gd(qHf<^(&_K9Do7 zkISxwhI5XQ1k#Dy-_xg5ysh!*y7aHhg6!`LBZ@iBUCRYPH^3v|54!tec zcb@pUFf6aIHh_UMq1^9kAiZdcQh0;cosqHJN=_g-wpA86R5~xexgaO+QhEpjjXZefg2zg))cXkw2nwd>7Y*(Xf6WO`XenK6ULw#pt*Mc7 z`Xes=^N)SZ@12+1<0ZfnH?>(dFHA05c`njH#A}f$xx6)AZn$IkO~h#8_Zvjpz{>_S z9~Az0)z4AlCqpLxZj6ZHV< z!oYBeh1rCVHv==y8#eF%Z0xHvn{yQ|7N8*(ZzAKe5r6&VKv+eA??s^09^sr6UBR#U zf`4K&X-^FMSJMebnA~U{F0w)RpDX9Mns8eB24dNh3N8Y^&R;Q~=%XX}GC87hns#CZ zWC?O3YWz4|aNjL11he-zbYycMQ>P*K-xCtaAn6w^Ml>$ z<%F020XF5*<+Wls(GbBW{{uiPQW#`b&!O(L`aMoUx{=~WxP#T1lq)IpoC!%pr@Wfo za3}Fq>oNrZ40`yCpkrqMHVY!?R=o2hKCRiJ)K07R)+CEf z%eS|1UTXzEp~94Ljsftnia{+=S`{J$^{-qZL{EBd z&Ls;_2$|JV(MezI+hS%8{YZWUW<{omYo+r|aw9^3fq@xuT~2=E7MB8WA>To1wO^Vy zI!}cYx<;o&iH%Xc-D_sF&yzN}TupeS6|vxR#Jy1>%~F}PW6^T*)`fTzs}mB(w(v{` z@0w!>98==(PPFYC+Y&=8A-p}R8X6f(|$OU z9GYB}Ezl@n-p)u7m7D?sYo+)=z&HvV8)VW$nHAX>vO!1h4M zIzsFDlyY6nWciQ`W_~b&W+_-HOaFGs)w2Il%Q@ zBfR$@*ca~$Rp6#u@aW~9Z<^-kj{*td06?sOJ3QF8Bgt_<($JMKzGW(E*m(dAhqwlF z;G8<;7|j1oEbF;X#VQLTmXY?6V){|A7`+e~lF_ZDZ&2KXF*HHp^Wp@qp?*UMXF`?V z3GFH0YmZu7o_^X4ZT({M-kbQ}^I!vjYo?L^2b?DV7UI+h-9-^~-h95WmkI#7_^5tb z3>;e1-tqV<6BxpHWOz;HvO@9lD}-J$4P3wYamwn1?c!yZvXy-vOOzmtGU_tUC3X_G za%5Fex5i2r-}kDMM3kHD zxJyTX32TUcX;7PNp;p)!0SO@i+fF(0kz!pOp1v=whIsEnrOHcut;xF~Bv;HS%0sP* zW=9Jp0{bRcOIV~?5EWNcQSq%zg5T%Nzt`r+(mY=McDYU@sbxiq8Xa()hJ8sNw#EE; zlavr4n|k&J9YI6NSX4{SnK3C%D=6(wtIajCcRcXmi328mJeH#ZCn8M7Y8|9nJGtP} zH`R>H_6}qr!gwl&AWpl}kl>kCP0qRuOm%~QCm}~HrqIFNh! zhUaAb>fs#W5=-zrBhJ^`?nhgX&cb0QZrRgcP^8^wx^h7JhK3CH=vqk$2Ro^=6{1hW zm$r6&*%v-C92FS};_2o=yt z@&8@I0HBxNLgsNAVz#VeuHAtsAfh(D+Ar$ccNMOWY`r>;g)`FMlfw-e@367kNRJRi z3BkVNiKaTIGT)mWJxPi^6^&QoypxL^qjn`<)gEXZ*s58DM_~@ev2uN^%H_C5F@gqh@ z&q7)cPdQ9vh&1;rHL3Z@o(bFKWHFD>02Da7ReaTN;i>W13R3fG8P>jvZDgdDet&rM za&>yG%=-C#vb09_MwJ54w{T&LzW{<;m5pafji#SZyQDGTykv}Y5z)aYjqFDPt|L2s zjBd$H#-(7zQWTiNwgehMaCBcFW7X5IF7Ux-0y~l_7X=LfffkHSF~VrFMb|_v{ekJd zI}TV#B>Zn@<-Pa6=OJv2bV`eA`t-qeox{cRY;TfhA`~g}^hBS(9(Xm~aLuMTFN9O)#99&ubI3_7Xox9R;)w1bIg2dqDxW1Sh(!Da1ll-`Zq@0Bla8#CK4=@rZ@DP%>okYYJZKR=ShyDnned^Y zRPG6W%|G5+ToW!``F1toD(T->Nl^dG5{E^thP*1xf=sl9e@^FA1r;{$%kAm`@lqdAlm7zTfEW*%yo^gxDVM6;hp!h@ z+4!;qV8h5|I*9EEkhMW8j0wUk>nwcsHb7xU>&m;7IORcu1ys#~+E-YtNT9QUKR$M1lK(zt`$ zG`9(|vCQREKdzK%dmi3XpUi)j3I0#sY~{KP))fPyI4uavkWy?81Wl=8HRzXAcia1lB3{uogQ`WKX}+ot!B)> zfSQvF!%@SLtIuc!8L*CM6qhR7Y1d-)Fbm~;MuA86ZdDH*QYa`D5P$2&F>g{r4!%Nw z+j9_wI|ZTuHe}aZ$P&d5E33A_oeFxR^8Oj|z~vXgh&#S#AJ`H6{9P<2a(QxNcu?A6 zRDMe0CM?5f7@1w&IqWb>Y5yPR8|DREQYYY`FJ}t)a&{EkK=gUTMft5-`C;N>2&-%c z9DhVW_W84>aF5SH$QR-oY*_E8qqD4n68}mwqAHu7+*tv0O&B(Q5`ZdAzxZ(?LT?;a z?%{)=LLyVL{(?I4HN>{>TOF|@(fLT;qYgJjv8t&9pl5?ZZIU>bvHq^Ch8GMJIXe01 zp2$l{NtxEp&%=A+dGyPiTUEj^WTB=(ZPQ!^cKA2B2<$2cy?U8U7vcCV_>`(>gpWe* z(ZwY@4)8}4JDH?plT=THLW(+4&U238Uj^s$iw-b9o<{bGBf9oGz4JHAh0p9w_wkvA0tb5%-ASi7m5-JYrTj=1@{M1M7ernu#mr} z!J!re@2N$^@%~ZoUu(~C8$>U8;+rpl5O(pd=}{!7GB=1`=3mf!=PCe8#d~A+>%(7b zbL==F3xEZ@_i`@vFdA^g60o?Noglm9EiWDCCo}hK$Q4sOhnw4JNkqS z(`8lpjn)E`S{NS?qm)nnUalWHl!*PT#y3S(wTz^efCQcs6tr=c{M%N<@W$3G*%d;0VCQ{!~&HjB# zdD~-iLC$6TFd&$`Dn~)ie*}j?JT|P`@hDr}FlSkbL0Gbr=}0B#CRp+UrAF7VJW zSXfQGeO4{r*-ILRSd{7h?v!-omBq4L%L5E|Rye5L=q#G(zn?Xd@8^e)Wu!?kb^)y7 zhYX0I(!i`exjz!%N@y=Xj&m9HKH13NG^h`lGF7loHAe`WcXuW#ay|XS(#cQ)6;a`E zcti`Og#*|>l2Or#+tc=Tgcw^+(NrG9kz*M(AbeyaUb?x^eZX;d(Kz5n|u1 zYb!UYZ#=e?x}WD;?7)D<%C0Aa4nwM|*;_OZ*>~{#sapFr0*I-heLASP{WcZ`VfUF0 zv|SiSDDe&~U@2BWhLh1O053lm0PG^Uv&z~5i+rBNp6rQ*3iyuI>g!kT7u6yGNEd{l znogw#+5ICQKnedG6%H8HPDG~f9U(YsM``ud)2z<*)o(swO}dloqJ?)VTih)>sf@zZ zgLr8KwNJ%*aElnHCY?3Abp@yVE*5_H2|}L!cDcC4BXgcA?(S)EVEEzBV{gUYY$=$E zaf<+CPlcTZRN5VLH;khl)UKcI(&@?6PJ`S^N>+9MQzB&uz)F$v-xLevq|n1i^mMsf zEzuecZKLlHcbuHW6*QlhSd~_V8#}s9^w!j)e8dEq;woXy4zqHt&W{Krz*~cFCqDs* zoGFO}d`ZTxhLAlx+OeOr^YQmr2j5AtNzqp0)I!eHUV~Rpr4Xlsd9_Qz?V82vqMX0J zFal{eQV-scNPt6}wkxK_J{;fb`f=fu?sp%t)keVq9YnubTE_8))IosP9WoR1`&051 zfo1K)GhgTWge2q_Bbuy(Gh46mH$>2VeZ$&J%w zt-GAA+I2y$**oPM{S6Y};YjqmckiY-rvOnTAa1711<={;1?;N?fs=`Z{Qxa#ZdJbC z?JpgHsNHB<0O+xAap-=XEB*S<7~Cg>shh3gI|BtTJcsDlHR0?e5hI_v=NDR}58Ml# zN0$L%K85olfW_(WZ}(JgU*^>+YTf-xT}d$Bo1rNR(mLB!j+X&h#6MS1Z!>Jd_Uvc6 zE}+#`7@>mn^fT+2)aVMM(5=R~q>twXR3DlThOi!|yY!WgOuRceJcRqUxfY@Wk-)a(+_9=E6|vxQEuC6<9I~;6$}Y>IE*=AqhobB(4dis8Xx9 z4~I$$mL87nq?=tS>`sUC?T%SxFs6$JUP^29r-{9vkv7D2>%8>HQp8q$6)sVh02SMX zpv#ZYhEKH`CAS_W9@M5w0wCL?&BQN=3ozI?5plTZsacrdtC96WKr zp<9WaVC%~8DUGL}|5sI49uIZb_LY>hxKW9eLY5>MTNF}KGDxySX0p{-C&s@0ig1(V zCXAsXLe?QmO_sS+qOp!`vWqa*v5jTM@|@{?pC|d-ALsL%bI$d>uJc_SCs8_cMKhaB z+DgJ82(oPa`R(~<7b#UdM7}t%yxi}F)NVLrIK1z7Rk>Woda6o6B}{z=Tg8qmv`$I( zgj2Nlq7$ak0;ybA=~GC4Gzb4ZKvDx&$*}C|4}m81h@y%( zFkLbq@YBQ}_Mw3U(1xno9-^?HlNBPnhI(WrL&bU6$=tfH3RwsCqtlBslKXz`q5tod zpO}F{Wc?!-vV!AI8flN0ig{XDTgvDjUy?eTP&M-`EGaf>BqB)3X^nb7*PMU0dpg7* zg)bCwU;pgUa}4)mzOmg8TXjMhT)NK8$-YM}B|B1KTj(W&#+t0!YxIvu1QJ%`)UISM z-s9FiTO~C9?6C>g!nxkcK`4-U+Qt3r2iFmQzU4`JZjm1Tq%$}?*LK%|VlZDc{A7I3 zK_N4D;{Ld2veg%g^7VZsxVrM-dV2HX?9jqDi2&!o8As$kXOLg=8)E%Ml>|3bG;jX= zMiR^laPt;hXb;tw7kD1r8Cgx|Jb+Zsy8pq+tj3oHX-Xt1hEP(IDa!8y%+*nHL?7Cd znuRWAyf^*r{oVAzc7MC?wIP%=lOvtZM3k{))PTLbr$}UC@k()v@DqNdKl$O#KA?37 zXLp??aH#odzpezF|IhMb1{4$~$>DJJhh9+7{poMH+q3zJy9M4ONZTnvCnEt&I*NPxqAotC zK&pKhCp^|HzJ0vigL-nFDOE@<9 zhs|ewJ@xJ|LELJ2!Ho_O1OsL8NP>jithLP*B6{hgUZ1IZ#F?16OprcWt?tm7?bgfk zDZ8%0AgB9Pc+NPaH%eoGyZ#yis|upXuco{Ju5E@FVYj2z8PwJVD}LK*@2HajTMfuf zUeA5w+Z&VCQvh`wuQ6q&fTs}$66&e`CwBrG>U#b}B&o4SNnMm_&k(%?omL`FVk`xE-J_L7zVg1=@m_n=Fu`u0wN$I z4ZH2D90Is`{#DDS1OPK*BjZrbJRVTG9E*EeCHe4H>4DI+ zjj%k6-WLTSelS2ds!i#xa%>nWV7VkUYKhT$Dokj2B$G$mRVhl#4c9Yr%;m!=eZ}}c zK%6c3oUw);`kHWDPcrNEfGED z>>9t|BBAmg`b3LdxQBzWXoDn*2y`~M+YS1%W<_Z;ov+gTwwAIrJgBDBOe|u7J_8_a z;oD~A0q@T!otY-(!9LT6w+8z$!XQScsU>i^q#kbvggDYg2L$8=_lk~ubzwLkS9O2e zBKZ+W4+1=>LVt8#4w^tJmv!V$o|!}z{GA>yc!271L`i1(+9jZR8QbZ~H<30XnMXJK z8+=^4cyV($pG2rzyI2_r4JyBJW#t#adUGi|fGz~B&%a*LB0QQdu47Eb6L`J+*5~W4 z9=KT0_=bEzkdB$J@`GqT)9DhN_15g zaMk=8wqLYqMwGp_!v0`7SYDal&gq$8c#0&xMh1u~cj?`lE@)wH$fvGF-u>vF;{%!+ z5a~j(^zx}7{dbP=3&GrB@xF}DcNOx&abTU6jo8q@&k6-Ave)`ad-`jc3rQrNixX;KiyA>9wxI zV$_z+2;zi;+p%i|1OWM+rv-t^fM)hReu9Wq*?Ku-eD^`YOSGr=#9WOSu^Yi_!RX*p z9?+sNHvro)eCfIo-~*%LraGRMBTT|h_@cy2TwVj2WQ%Ewo^t=sBjN7rpiN{>u1%T} z1t$>iTSu|T*}QR33f-T@t0BsraO4*-gt}|u&#t$SKmp193(xhWSu5F$LQS0-aKJ8%Ny*dfS%JDvIr^W>z zRIN8{0h))y*~#VaG&5||L5_t|7SCA(Fi@WL>K7@FrZbEPr$5^beQh3TSf1TBcVJ2B3RJtmO;@_RTQJz*`J}olGYT^xR1Qq1+c`XEB$r++7 zUNzL=d3$PoJ_fpH%l0=eu{OGbBkB_a!`73qVuY4WyRqvQ#R=ualj#`?S z`uM!{oa|Q%oyHSqZjJV|dC*-!WR8r(BIp^Oxk=moZ;r(}Fg##Q5k;LeaX5~V3^YVE z%@Un0H7?z|wBrjCw?9-v*fr|E>`gY9EuJ$^(b1daQ06{SD+R%<4vEsZLze$cfSfOb zl9d4tmk`@PRy6g^SBgOyaRs1YaO>pD*TY$|9cxj5^m`*Bch#n$2diVJSe&<1Mn|^4 z2QU~Bb30x>1mJ!E9pyv2S)Qij#jUYEcQZG_y#*w(KqFIr9Xh$9ikDCQZmD)~dV_80 z{a9>9Ity-pRkUN;J5Xb>7#njwL$HoN#C>(4=1Xadhx4)8HjmcutkK}E^r;yB$VAcI zsaDbci$a6rNy;sX{hU3!-50YeCTkC8+uYkF3;@R*JS(MuVz?gDw$GO#(ZW#)9q=Kp_v#{Z! zSsMtfz85KOA{FsbjX}+*W_oqoVQ=IK~!36r()Ie4jd za*^IWm8R*nNq!NTkSM8k!=COBNIY{_)Y))r>vcLFQcV6^Dc6-p3yxRuq0t7a{BDu! z$AiSFo$>>24KlHlt+_hLHIk|SMvr^DUK5p^!9JCw=I42`4rnr3peLjK&-oXV}^{7HJM;Yi#7S z{PmAvdidjD1V=k9C{bY0`k9RXiv6glz#&7W&MGinVN4!X_xFzPy~>IZEJf{gpe(7- zKp+L&#>R$Pm7yI4W6oM6iS^36T^|HEVZD{<{v$%VaIRlMbR5jllpMSA=li9jq4g1A zcC3fSXuOgCsLGD*cc}x5U9ChuLjnE|1gVmdhU>|DLt=sRpXW6z-Zt*>cvg!xn;8*J zN#SmMQMRwqxgDr5EETSZe|6N2jL+fp5l6S>sSac&6-X5W?fx+t_5un9NCW#HbnMb2 zRQZU!8oe;{l*_>UqHWhkSdd3_w?3vexy!+V0?mA-2KAylD_b z?*O{C+wWxlc*RK*1e-NivpCcP6b%Q`G`iex{?=lJ05=Xg>z}!S2{SQmyWJTQ{gTW#*p$#niZ|Kd^?`RJr$`072_3crmI62UQZt4 zX{9EDdswnntmvy2VFM^%1=qp>UBCZXl*b!JE0MrHAqK zvVvyu81^>`h5-Hgauw^uJ#!D4xlj5cf8mUxw(4RvSLP>Y0r9ki#|JOX{rfH}sPSkM z7WT0Dg_(jv_On@fvY6=gP+9tkyd4Hs8_{Y&mp#@f-=fg#R1$@^L~AT@#UZ-6QaUI` z0aOY=G8~0NKb;LQ-}|7g4ebX9f5Si!$hT`!2b{21rP8Q2k-@7O8@`> delta 48491 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 Date: Wed, 18 Dec 2024 07:43:26 -0800 Subject: [PATCH 41/54] always set isDefaultPM to true or false --- .../SavedPaymentOptionsViewController.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index b9800fc0316..4ea9863054a 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -520,11 +520,13 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle } cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, showDefaultPMBadge: hasDefault) cell.delegate = self - if hasDefault, - let savedPMId = viewModel.savedPaymentMethod?.stripeId, - let defaultPMId = elementsSession.customer?.defaultPaymentMethod { - cell.isDefaultPM = savedPMId == defaultPMId - } + let isDefaultPM: Bool = { + guard self.hasDefault, + let savedPMId = viewModel.savedPaymentMethod?.stripeId, + let defaultPMId = self.elementsSession.customer?.defaultPaymentMethod else { return false } + return savedPMId == defaultPMId + }() + cell.isDefaultPM = isDefaultPM cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance From 063fcb1cf8ac5d738da2f78933149c0793036b9a Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 18 Dec 2024 09:06:00 -0800 Subject: [PATCH 42/54] condense activation deactivation code --- .../SavedPaymentMethodCollectionView.swift | 27 +++++++++---------- .../Vertical Main Screen/RowButton.swift | 5 +--- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index de63e672c81..67de4312090 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -121,12 +121,11 @@ extension SavedPaymentMethodCollectionView { didSet { if showDefaultPMBadge { if isRemovingPaymentMethods { - deactivateBottomConstraint() activateDefaultBadge() defaultBadge.isHidden = !isDefaultPM } else { - reactivateBottomConstraint() + deactivateDefaultBadge() defaultBadge.isHidden = true } } @@ -249,6 +248,7 @@ extension SavedPaymentMethodCollectionView { private var labelBottomConstraint: NSLayoutConstraint? private var labelHeightConstraint: NSLayoutConstraint? + private var defaultBadgeConstraints: [NSLayoutConstraint] = [] // MARK: - Internal Methods func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool, showDefaultPMBadge: Bool) { @@ -414,7 +414,7 @@ extension SavedPaymentMethodCollectionView { } } - private func deactivateBottomConstraint() { + private func activateDefaultBadge() { labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) guard let labelBottomConstraint, let labelHeightConstraint else { return } NSLayoutConstraint.deactivate([ @@ -423,10 +423,19 @@ extension SavedPaymentMethodCollectionView { NSLayoutConstraint.activate([ labelHeightConstraint ]) + defaultBadgeConstraints = [ + defaultBadge.topAnchor.constraint( + equalTo: label.bottomAnchor, constant: 4), + defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), + defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) + ] + NSLayoutConstraint.activate(defaultBadgeConstraints) } - private func reactivateBottomConstraint() { + private func deactivateDefaultBadge() { guard let labelHeightConstraint, let labelBottomConstraint else { return } + NSLayoutConstraint.deactivate(defaultBadgeConstraints) NSLayoutConstraint.deactivate([ labelHeightConstraint ]) @@ -435,16 +444,6 @@ extension SavedPaymentMethodCollectionView { ]) } - private func activateDefaultBadge() { - NSLayoutConstraint.activate([ - defaultBadge.topAnchor.constraint( - equalTo: label.bottomAnchor, constant: 4), - defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), - defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), - defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) - ]) - } - } // A circle with an image in the middle diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index 17633e11041..03a8e740ff3 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -106,9 +106,6 @@ class RowButton: UIView { defaultBadge.text = String.Localized.default_text self.defaultBadge = defaultBadge } - else { - self.defaultBadge = nil - } if let promoText { self.promoBadge = PromoBadgeView( @@ -239,7 +236,7 @@ class RowButton: UIView { radioButton?.centerYAnchor.constraint(equalTo: centerYAnchor), radioButton?.heightAnchor.constraint(equalToConstant: 18), radioButton?.widthAnchor.constraint(equalToConstant: 18), - + labelsStackView.leadingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: 12), labelsStackView.trailingAnchor.constraint(equalTo: promoBadge?.leadingAnchor ?? labelTrailingConstant, constant: -12), labelsStackView.centerYAnchor.constraint(equalTo: centerYAnchor), From 38674175fcf6b2d457cf4f1dee03c216bcdb35c9 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 18 Dec 2024 09:09:18 -0800 Subject: [PATCH 43/54] remove num lines on label --- .../SavedPaymentMethodCollectionView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 67de4312090..9a4837ac7e8 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -84,7 +84,6 @@ extension SavedPaymentMethodCollectionView { label.font = appearance.scaledFont(for: appearance.font.base.medium, style: .footnote, maximumPointSize: 20) label.textColor = appearance.colors.text label.adjustsFontForContentSizeCategory = true - label.numberOfLines = 0 return label }() let paymentMethodLogo: UIImageView = UIImageView() From 667083417fcddd8076b29c12415dedf2378955b1 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 18 Dec 2024 09:14:05 -0800 Subject: [PATCH 44/54] fix build --- .../Source/PaymentSheet/Vertical Main Screen/RowButton.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index 03a8e740ff3..bf0ce377579 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -106,6 +106,9 @@ class RowButton: UIView { defaultBadge.text = String.Localized.default_text self.defaultBadge = defaultBadge } + else { + self.defaultBadge = nil + } if let promoText { self.promoBadge = PromoBadgeView( From ff08f77bd89c55e73dd02080072286da3da76600 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 18 Dec 2024 10:25:14 -0800 Subject: [PATCH 45/54] revert spacing --- .../SavedPaymentMethodCollectionView.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 9a4837ac7e8..640e217652f 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -366,6 +366,7 @@ extension SavedPaymentMethodCollectionView { selectedIcon.isHidden = true layer.shadowOpacity = 0 } + if isRemovingPaymentMethods { if case .saved = viewModel, showEditIcon { accessoryButton.isHidden = false @@ -381,6 +382,7 @@ extension SavedPaymentMethodCollectionView { plus.alpha = 0.6 label.textColor = appearance.colors.text.disabledColor } + } else if isSelected { accessoryButton.isHidden = true shadowRoundedRectangle.isEnabled = true From 8382a9358875f8aeef4c6f711e1211d849312873 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Wed, 18 Dec 2024 11:21:34 -0800 Subject: [PATCH 46/54] cleaned up elementscustomer functions, nonoptional constraints to activate and deactivate, change isHidden to setHiddenIfNecessary --- .../v1-elements-sessions/ElementsCustomer.swift | 9 ++------- ...edPaymentMethodsCollectionViewController.swift | 4 +--- .../SavedPaymentMethodCollectionView.swift | 15 ++++++--------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift index a6710e46def..3419430cb97 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/Internal/API Bindings/v1-elements-sessions/ElementsCustomer.swift @@ -41,17 +41,12 @@ struct ElementsCustomer: Equatable, Hashable { } func getDefaultPaymentMethod() -> STPPaymentMethod? { - let defaultSavedPaymentMethod = paymentMethods.first { $0.stripeId == defaultPaymentMethod } - return defaultSavedPaymentMethod + return paymentMethods.first { $0.stripeId == defaultPaymentMethod } } func getDefaultOrFirstPaymentMethod() -> STPPaymentMethod? { // if customer has a default payment method from the elements session, return the default payment method - let defaultSavedPaymentMethod = getDefaultPaymentMethod() - if let defaultSavedPaymentMethod = defaultSavedPaymentMethod { - return defaultSavedPaymentMethod - } // otherwise, return the first payment method from the customer's list of saved payment methods - return paymentMethods.first + return getDefaultPaymentMethod() ?? paymentMethods.first } } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift index 442dbeef902..e6b20c7b5fd 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/CustomerSheet/CustomerSavedPaymentMethodsCollectionViewController.swift @@ -386,9 +386,7 @@ extension CustomerSavedPaymentMethodsCollectionViewController: UICollectionViewD cell.setViewModel(viewModel.toSavedPaymentOptionsViewControllerSelection(), cbcEligible: cbcEligible, - allowsPaymentMethodRemoval: configuration.paymentMethodRemove, - allowsSetAsDefaultPM: false, - showDefaultPMBadge: false) + allowsPaymentMethodRemoval: configuration.paymentMethodRemove) cell.delegate = self cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 640e217652f..47a2c67a840 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -121,11 +121,11 @@ extension SavedPaymentMethodCollectionView { if showDefaultPMBadge { if isRemovingPaymentMethods { activateDefaultBadge() - defaultBadge.isHidden = !isDefaultPM + defaultBadge.setHiddenIfNecessary(!isDefaultPM) } else { deactivateDefaultBadge() - defaultBadge.isHidden = true + defaultBadge.setHiddenIfNecessary(true) } } update() @@ -183,7 +183,7 @@ extension SavedPaymentMethodCollectionView { contentView.addSubview($0) } labelBottomConstraint = label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) - guard let labelBottomConstraint else { return } + labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) NSLayoutConstraint.activate([ shadowRoundedRectangle.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 6), shadowRoundedRectangle.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), @@ -245,12 +245,12 @@ extension SavedPaymentMethodCollectionView { } } - private var labelBottomConstraint: NSLayoutConstraint? - private var labelHeightConstraint: NSLayoutConstraint? + private var labelBottomConstraint: NSLayoutConstraint = NSLayoutConstraint() + private var labelHeightConstraint: NSLayoutConstraint = NSLayoutConstraint() private var defaultBadgeConstraints: [NSLayoutConstraint] = [] // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool, showDefaultPMBadge: Bool) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool = false, showDefaultPMBadge: Bool = false) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false @@ -416,8 +416,6 @@ extension SavedPaymentMethodCollectionView { } private func activateDefaultBadge() { - labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) - guard let labelBottomConstraint, let labelHeightConstraint else { return } NSLayoutConstraint.deactivate([ labelBottomConstraint ]) @@ -435,7 +433,6 @@ extension SavedPaymentMethodCollectionView { } private func deactivateDefaultBadge() { - guard let labelHeightConstraint, let labelBottomConstraint else { return } NSLayoutConstraint.deactivate(defaultBadgeConstraints) NSLayoutConstraint.deactivate([ labelHeightConstraint From 22e2b0267a27fbf41f6824cbb57b0f59736b6990 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 07:33:10 -0800 Subject: [PATCH 47/54] refactored names and defined isDefaultPaymentMethod functions --- .../SavedPaymentMethodCollectionView.swift | 49 ++++++++++--------- .../SavedPaymentOptionsViewController.swift | 18 +++---- ...calSavedPaymentMethodsViewController.swift | 9 +++- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 47a2c67a840..48f6d52268f 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -25,13 +25,13 @@ private let paymentMethodLogoSize: CGSize = CGSize(width: 54, height: 40) /// For internal SDK use only @objc(STP_Internal_SavedPaymentMethodCollectionView) class SavedPaymentMethodCollectionView: UICollectionView { - init(appearance: PaymentSheet.Appearance, showDefaultPMBadge: Bool = false) { + init(appearance: PaymentSheet.Appearance, needsVerticalPaddingForBadge: Bool = false) { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .horizontal layout.sectionInset = UIEdgeInsets( top: -6, left: PaymentSheetUI.defaultPadding, bottom: 0, right: PaymentSheetUI.defaultPadding) - self.showDefaultPMBadge = showDefaultPMBadge + self.needsVerticalPaddingForBadge = needsVerticalPaddingForBadge layout.itemSize = cellSize layout.minimumInteritemSpacing = 12 layout.minimumLineSpacing = 4 @@ -45,21 +45,21 @@ class SavedPaymentMethodCollectionView: UICollectionView { } var isRemovingPaymentMethods: Bool = false - let showDefaultPMBadge: Bool + let needsVerticalPaddingForBadge: Bool required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override var intrinsicContentSize: CGSize { - return showDefaultPMBadge && isRemovingPaymentMethods ? CGSize(width: UIView.noIntrinsicMetric, height: 118) : CGSize(width: UIView.noIntrinsicMetric, height: 100) + return needsVerticalPaddingForBadge && isRemovingPaymentMethods ? CGSize(width: UIView.noIntrinsicMetric, height: 118) : CGSize(width: UIView.noIntrinsicMetric, height: 100) } func updateLayout() { guard let layout = collectionViewLayout as? UICollectionViewFlowLayout else { return } - let newItemSize = showDefaultPMBadge && isRemovingPaymentMethods ? cellSizeWithDefaultBadge : cellSize - guard newItemSize != layout.itemSize else { return } - layout.itemSize = newItemSize + let newCellSize = needsVerticalPaddingForBadge && isRemovingPaymentMethods ? cellSizeWithDefaultBadge : cellSize + guard newCellSize != layout.itemSize else { return } + layout.itemSize = newCellSize collectionViewLayout.invalidateLayout() invalidateIntrinsicContentSize() } @@ -120,11 +120,11 @@ extension SavedPaymentMethodCollectionView { didSet { if showDefaultPMBadge { if isRemovingPaymentMethods { - activateDefaultBadge() + activateDefaultBadgeConstraints() defaultBadge.setHiddenIfNecessary(!isDefaultPM) } else { - deactivateDefaultBadge() + deactivateDefaultBadgeConstraints() defaultBadge.setHiddenIfNecessary(true) } } @@ -182,8 +182,6 @@ extension SavedPaymentMethodCollectionView { $0.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview($0) } - labelBottomConstraint = label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) - labelHeightConstraint = label.heightAnchor.constraint(equalToConstant: 20) NSLayoutConstraint.activate([ shadowRoundedRectangle.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 6), shadowRoundedRectangle.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), @@ -245,9 +243,21 @@ extension SavedPaymentMethodCollectionView { } } - private var labelBottomConstraint: NSLayoutConstraint = NSLayoutConstraint() - private var labelHeightConstraint: NSLayoutConstraint = NSLayoutConstraint() - private var defaultBadgeConstraints: [NSLayoutConstraint] = [] + private lazy var labelBottomConstraint: NSLayoutConstraint = { + return label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) + }() + private lazy var labelHeightConstraint: NSLayoutConstraint = { + return label.heightAnchor.constraint(equalToConstant: 20) + }() + private lazy var defaultBadgeConstraints: [NSLayoutConstraint] = { + return [ + defaultBadge.topAnchor.constraint( + equalTo: label.bottomAnchor, constant: 4), + defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), + defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) + ] + }() // MARK: - Internal Methods func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool = false, showDefaultPMBadge: Bool = false) { @@ -415,24 +425,17 @@ extension SavedPaymentMethodCollectionView { } } - private func activateDefaultBadge() { + private func activateDefaultBadgeConstraints() { NSLayoutConstraint.deactivate([ labelBottomConstraint ]) NSLayoutConstraint.activate([ labelHeightConstraint ]) - defaultBadgeConstraints = [ - defaultBadge.topAnchor.constraint( - equalTo: label.bottomAnchor, constant: 4), - defaultBadge.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), - defaultBadge.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 2), - defaultBadge.trailingAnchor.constraint(equalTo: contentView.trailingAnchor) - ] NSLayoutConstraint.activate(defaultBadgeConstraints) } - private func deactivateDefaultBadge() { + private func deactivateDefaultBadgeConstraints() { NSLayoutConstraint.deactivate(defaultBadgeConstraints) NSLayoutConstraint.deactivate([ labelHeightConstraint diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 4ea9863054a..3d17d993c93 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -153,8 +153,7 @@ class SavedPaymentOptionsViewController: UIViewController { } var hasDefault: Bool { - guard configuration.allowsSetAsDefaultPM, let defaultPaymentMethod = elementsSession.customer?.getDefaultPaymentMethod() else { return false } - return viewModels.contains(where: { $0.savedPaymentMethod?.stripeId == defaultPaymentMethod.stripeId }) + return viewModels.contains(where: { isDefaultPaymentMethod(savedPaymentMethodId: $0.savedPaymentMethod?.stripeId) }) } var bottomNoticeAttributedString: NSAttributedString? { @@ -277,7 +276,7 @@ class SavedPaymentOptionsViewController: UIViewController { // MARK: - Views private lazy var collectionView: SavedPaymentMethodCollectionView = { - let collectionView = SavedPaymentMethodCollectionView(appearance: appearance, showDefaultPMBadge: hasDefault) + let collectionView = SavedPaymentMethodCollectionView(appearance: appearance, needsVerticalPaddingForBadge: hasDefault) collectionView.delegate = self collectionView.dataSource = self return collectionView @@ -449,6 +448,11 @@ class SavedPaymentOptionsViewController: UIViewController { collectionView.reloadItems(at: [selectedIndexPath]) } + private func isDefaultPaymentMethod(savedPaymentMethodId: String?) -> Bool { + guard configuration.allowsSetAsDefaultPM, let savedPaymentMethodId, let defaultPaymentMethod = elementsSession.customer?.getDefaultPaymentMethod() else { return false } + return savedPaymentMethodId == defaultPaymentMethod.stripeId + } + // MARK: - Helpers /// Creates the list of viewmodels to display in the "saved payment methods" carousel e.g. `["+ Add", "Apple Pay", "Link", "Visa 4242"]` @@ -520,13 +524,7 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle } cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, showDefaultPMBadge: hasDefault) cell.delegate = self - let isDefaultPM: Bool = { - guard self.hasDefault, - let savedPMId = viewModel.savedPaymentMethod?.stripeId, - let defaultPMId = self.elementsSession.customer?.defaultPaymentMethod else { return false } - return savedPMId == defaultPMId - }() - cell.isDefaultPM = isDefaultPM + cell.isDefaultPM = isDefaultPaymentMethod(savedPaymentMethodId: viewModel.savedPaymentMethod?.stripeId) cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift index ba092ffd6d2..14ba5ee3327 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/VerticalSavedPaymentMethodsViewController.swift @@ -174,11 +174,16 @@ class VerticalSavedPaymentMethodsViewController: UIViewController { setInitialState(selectedPaymentMethod: selectedPaymentMethod) } + private func isDefaultPaymentMethod(paymentMethodId: String) -> Bool { + guard configuration.allowsSetAsDefaultPM, let defaultPaymentMethod = elementsSession.customer?.getDefaultPaymentMethod() else { return false } + return configuration.allowsSetAsDefaultPM && paymentMethodId == defaultPaymentMethod.stripeId + } + private func buildPaymentMethodRows(paymentMethods: [STPPaymentMethod]) -> [SavedPaymentMethodRowButton] { return paymentMethods.map { paymentMethod in let button = SavedPaymentMethodRowButton(paymentMethod: paymentMethod, appearance: configuration.appearance, - showDefaultPMBadge: configuration.allowsSetAsDefaultPM && paymentMethod.stripeId == elementsSession.customer?.defaultPaymentMethod) + showDefaultPMBadge: isDefaultPaymentMethod(paymentMethodId: paymentMethod.stripeId)) button.delegate = self return button } @@ -364,7 +369,7 @@ extension VerticalSavedPaymentMethodsViewController: UpdatePaymentMethodViewCont } // Create the new button - let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance, showDefaultPMBadge: configuration.allowsSetAsDefaultPM && updatedPaymentMethod.stripeId == elementsSession.customer?.defaultPaymentMethod) + let newButton = SavedPaymentMethodRowButton(paymentMethod: updatedPaymentMethod, appearance: configuration.appearance, showDefaultPMBadge: isDefaultPaymentMethod(paymentMethodId: updatedPaymentMethod.stripeId)) newButton.delegate = self newButton.previousSelectedState = oldButton.previousSelectedState From 304aa41ed4de2c9f2b21950d4dd338f103fe94d6 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 08:12:10 -0800 Subject: [PATCH 48/54] fix vertical default badge snapshot; --- ...aymentMethodsViewControllerSnapshotTests.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift index b1732d91326..5f5ac32cc9a 100644 --- a/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift +++ b/StripePaymentSheet/StripePaymentSheetTests/PaymentSheet/VerticalSavedPaymentMethodsViewControllerSnapshotTests.swift @@ -53,7 +53,7 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT let sut = VerticalSavedPaymentMethodsViewController(configuration: configuration, selectedPaymentMethod: paymentMethods.first, paymentMethods: paymentMethods, - elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first?.stripeId ?? STPPaymentMethod._testCard().stripeId) : ._testCardValue(), + elementsSession: showDefaultPMBadge ? ._testDefaultCardValue(defaultPaymentMethod: paymentMethods.first?.stripeId ?? STPPaymentMethod._testCard().stripeId, paymentMethods: [testCardJSON]) : ._testCardValue(), analyticsHelper: ._testValue() ) let bottomSheet: BottomSheetViewController @@ -89,6 +89,19 @@ final class VerticalSavedPaymentMethodsViewControllerSnapshotTests: STPSnapshotT STPFixtures.usBankAccountPaymentMethod(bankName: "STRIPE"), STPFixtures.sepaDebitPaymentMethod(), ] } + + private let testCardJSON = [ + "id": "pm_123card", + "type": "card", + "card": [ + "last4": "4242", + "brand": "visa", + "fingerprint": "B8XXs2y2JsVBtB9f", + "networks": ["available": ["visa"]], + "exp_month": "01", + "exp_year": Calendar.current.component(.year, from: Date()) + 1 + ] + ] as [AnyHashable : Any] } final class StubBottomSheetContentViewController: UIViewController, BottomSheetContentViewController { From 9dd0cfb996ff42fd6f2bfe7e2fa45d4652a1d202 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 09:58:31 -0800 Subject: [PATCH 49/54] adjust default badge font weight when selected vs not --- .../SavedPaymentMethodCollectionView.swift | 9 ++++---- .../SavedPaymentOptionsViewController.swift | 3 +-- .../SavedPaymentMethodRowButton.swift | 21 ++++++++++++++++++- .../Vertical Main Screen/RowButton.swift | 18 ++++------------ 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 48f6d52268f..24e30d42af5 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -105,7 +105,7 @@ extension SavedPaymentMethodCollectionView { }() lazy var defaultBadge: UILabel = { let label = UILabel() - label.font = appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) + label.font = appearance.scaledFont(for: appearance.font.base.medium, style: .caption1, maximumPointSize: 20) label.textColor = appearance.colors.textSecondary label.adjustsFontForContentSizeCategory = true label.text = String.Localized.default_text @@ -114,14 +114,13 @@ extension SavedPaymentMethodCollectionView { }() fileprivate var viewModel: SavedPaymentOptionsViewController.Selection? - var isDefaultPM: Bool = false var isRemovingPaymentMethods: Bool = false { didSet { if showDefaultPMBadge { if isRemovingPaymentMethods { activateDefaultBadgeConstraints() - defaultBadge.setHiddenIfNecessary(!isDefaultPM) + defaultBadge.setHiddenIfNecessary(!showDefaultPMBadge) } else { deactivateDefaultBadgeConstraints() @@ -143,6 +142,7 @@ extension SavedPaymentMethodCollectionView { var cbcEligible: Bool = false var allowsPaymentMethodRemoval: Bool = true var allowsSetAsDefaultPM: Bool = false + var needsVerticalPaddingForBadge: Bool = false var showDefaultPMBadge: Bool = false /// Indicates whether the cell for a saved payment method should display the edit icon. @@ -260,7 +260,7 @@ extension SavedPaymentMethodCollectionView { }() // MARK: - Internal Methods - func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool = false, showDefaultPMBadge: Bool = false) { + func setViewModel(_ viewModel: SavedPaymentOptionsViewController.Selection, cbcEligible: Bool, allowsPaymentMethodRemoval: Bool, allowsSetAsDefaultPM: Bool = false, needsVerticalPaddingForBadge: Bool = false, showDefaultPMBadge: Bool = false) { paymentMethodLogo.isHidden = false plus.isHidden = true shadowRoundedRectangle.isHidden = false @@ -268,6 +268,7 @@ extension SavedPaymentMethodCollectionView { self.cbcEligible = cbcEligible self.allowsPaymentMethodRemoval = allowsPaymentMethodRemoval self.allowsSetAsDefaultPM = allowsSetAsDefaultPM + self.needsVerticalPaddingForBadge = needsVerticalPaddingForBadge self.showDefaultPMBadge = showDefaultPMBadge update() } diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift index 3d17d993c93..b9254d80d95 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentOptionsViewController.swift @@ -522,9 +522,8 @@ extension SavedPaymentOptionsViewController: UICollectionViewDataSource, UIColle stpAssertionFailure() return UICollectionViewCell() } - cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, showDefaultPMBadge: hasDefault) + cell.setViewModel(viewModel, cbcEligible: cbcEligible, allowsPaymentMethodRemoval: self.configuration.allowsRemovalOfPaymentMethods, allowsSetAsDefaultPM: configuration.allowsSetAsDefaultPM, needsVerticalPaddingForBadge: hasDefault, showDefaultPMBadge: isDefaultPaymentMethod(savedPaymentMethodId: viewModel.savedPaymentMethod?.stripeId)) cell.delegate = self - cell.isDefaultPM = isDefaultPaymentMethod(savedPaymentMethodId: viewModel.savedPaymentMethod?.stripeId) cell.isRemovingPaymentMethods = self.collectionView.isRemovingPaymentMethods cell.appearance = appearance diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 8ae2c0965e2..6e67b21caa1 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -33,6 +33,7 @@ final class SavedPaymentMethodRowButton: UIView { rowButton.isSelected = isSelected chevronButton.isHidden = !canUpdate && !canRemove + defaultBadge?.font = state == .selected ? selectedDefaultBadgeFont : unselectedDefaultBadgeFont } } @@ -49,6 +50,14 @@ final class SavedPaymentMethodRowButton: UIView { let showDefaultPMBadge: Bool + private lazy var selectedDefaultBadgeFont: UIFont = { + appearance.scaledFont(for: appearance.font.base.medium, style: .caption1, maximumPointSize: 20) + }() + + private lazy var unselectedDefaultBadgeFont: UIFont = { + appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) + }() + private var isEditing: Bool { switch state { case .selected, .unselected: @@ -91,8 +100,18 @@ final class SavedPaymentMethodRowButton: UIView { return chevronButton }() + private lazy var defaultBadge: UILabel? = { + guard showDefaultPMBadge else { return nil } + let defaultBadge = UILabel() + defaultBadge.font = selectedDefaultBadgeFont + defaultBadge.textColor = appearance.colors.textSecondary + defaultBadge.adjustsFontForContentSizeCategory = true + defaultBadge.text = String.Localized.default_text + return defaultBadge + }() + private lazy var rowButton: RowButton = { - let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, showDefaultPMBadge: showDefaultPMBadge, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) + let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, defaultBadge: defaultBadge, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) return button }() diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index bf0ce377579..d693fd5ea87 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -70,7 +70,7 @@ class RowButton: UIView { imageView: UIImageView, text: String, subtext: String? = nil, - showDefaultPMBadge: Bool = false, + defaultBadge: UILabel? = nil, promoText: String? = nil, rightAccessoryView: UIView? = nil, shouldAnimateOnPress: Bool = false, @@ -98,17 +98,7 @@ class RowButton: UIView { self.sublabel = nil } - if showDefaultPMBadge { - let defaultBadge = UILabel() - defaultBadge.font = appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) - defaultBadge.textColor = appearance.colors.textSecondary - defaultBadge.adjustsFontForContentSizeCategory = true - defaultBadge.text = String.Localized.default_text - self.defaultBadge = defaultBadge - } - else { - self.defaultBadge = nil - } + self.defaultBadge = defaultBadge if let promoText { self.promoBadge = PromoBadgeView( @@ -453,10 +443,10 @@ extension RowButton { return button } - static func makeForSavedPaymentMethod(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, subtext: String? = nil, showDefaultPMBadge: Bool = false, rightAccessoryView: UIView? = nil, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) -> RowButton { + static func makeForSavedPaymentMethod(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, subtext: String? = nil, defaultBadge: UILabel? = nil, rightAccessoryView: UIView? = nil, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) -> RowButton { let imageView = UIImageView(image: paymentMethod.makeSavedPaymentMethodRowImage()) imageView.contentMode = .scaleAspectFit - let button = RowButton(appearance: appearance, imageView: imageView, text: paymentMethod.paymentSheetLabel, subtext: subtext, showDefaultPMBadge: showDefaultPMBadge, rightAccessoryView: rightAccessoryView, isEmbedded: isEmbedded, didTap: didTap) + let button = RowButton(appearance: appearance, imageView: imageView, text: paymentMethod.paymentSheetLabel, subtext: subtext, defaultBadge: defaultBadge, rightAccessoryView: rightAccessoryView, isEmbedded: isEmbedded, didTap: didTap) button.shadowRoundedRect.accessibilityLabel = paymentMethod.paymentSheetAccessibilityLabel return button } From 10de2e9dfb8cb496708ca0ce709bcce76ff02501 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 10:07:14 -0800 Subject: [PATCH 50/54] clean up activate and deactivate default badge constraints code --- .../SavedPaymentMethodCollectionView.swift | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 24e30d42af5..8dc1ff95d7c 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -427,23 +427,13 @@ extension SavedPaymentMethodCollectionView { } private func activateDefaultBadgeConstraints() { - NSLayoutConstraint.deactivate([ - labelBottomConstraint - ]) - NSLayoutConstraint.activate([ - labelHeightConstraint - ]) - NSLayoutConstraint.activate(defaultBadgeConstraints) + NSLayoutConstraint.deactivate([labelBottomConstraint]) + NSLayoutConstraint.activate([labelHeightConstraint] + defaultBadgeConstraints) } private func deactivateDefaultBadgeConstraints() { - NSLayoutConstraint.deactivate(defaultBadgeConstraints) - NSLayoutConstraint.deactivate([ - labelHeightConstraint - ]) - NSLayoutConstraint.activate([ - labelBottomConstraint - ]) + NSLayoutConstraint.deactivate(defaultBadgeConstraints + [labelHeightConstraint]) + NSLayoutConstraint.activate([labelBottomConstraint]) } } From 9d16dec0211200e545907a89c2a2ad4c5023bfee Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 10:33:32 -0800 Subject: [PATCH 51/54] fix if condition --- .../SavedPaymentMethodCollectionView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 8dc1ff95d7c..407701c5168 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -117,7 +117,7 @@ extension SavedPaymentMethodCollectionView { var isRemovingPaymentMethods: Bool = false { didSet { - if showDefaultPMBadge { + if needsVerticalPaddingForBadge { if isRemovingPaymentMethods { activateDefaultBadgeConstraints() defaultBadge.setHiddenIfNecessary(!showDefaultPMBadge) From 9048ed00fdc9f905b2911078217f36bc21d746ab Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 11:45:07 -0800 Subject: [PATCH 52/54] pass badgeText into RowButton instead of defaultBadge label --- .../SavedPaymentMethodCollectionView.swift | 24 +++++++------ .../SavedPaymentMethodRowButton.swift | 21 +---------- .../Vertical Main Screen/RowButton.swift | 36 +++++++++++++++---- 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift index 407701c5168..1b531c5d527 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/SavedPaymentMethodCollectionView.swift @@ -117,20 +117,24 @@ extension SavedPaymentMethodCollectionView { var isRemovingPaymentMethods: Bool = false { didSet { - if needsVerticalPaddingForBadge { - if isRemovingPaymentMethods { - activateDefaultBadgeConstraints() - defaultBadge.setHiddenIfNecessary(!showDefaultPMBadge) - } - else { - deactivateDefaultBadgeConstraints() - defaultBadge.setHiddenIfNecessary(true) - } - } + updateVerticalConstraintsIfNeeded() update() } } + func updateVerticalConstraintsIfNeeded() { + guard needsVerticalPaddingForBadge else { + return + } + if isRemovingPaymentMethods { + activateDefaultBadgeConstraints() + defaultBadge.setHiddenIfNecessary(!showDefaultPMBadge) + } else { + deactivateDefaultBadgeConstraints() + defaultBadge.setHiddenIfNecessary(true) + } + } + weak var delegate: PaymentOptionCellDelegate? var appearance = PaymentSheet.Appearance.default { didSet { diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 6e67b21caa1..927d7647848 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -33,7 +33,6 @@ final class SavedPaymentMethodRowButton: UIView { rowButton.isSelected = isSelected chevronButton.isHidden = !canUpdate && !canRemove - defaultBadge?.font = state == .selected ? selectedDefaultBadgeFont : unselectedDefaultBadgeFont } } @@ -50,14 +49,6 @@ final class SavedPaymentMethodRowButton: UIView { let showDefaultPMBadge: Bool - private lazy var selectedDefaultBadgeFont: UIFont = { - appearance.scaledFont(for: appearance.font.base.medium, style: .caption1, maximumPointSize: 20) - }() - - private lazy var unselectedDefaultBadgeFont: UIFont = { - appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) - }() - private var isEditing: Bool { switch state { case .selected, .unselected: @@ -100,18 +91,8 @@ final class SavedPaymentMethodRowButton: UIView { return chevronButton }() - private lazy var defaultBadge: UILabel? = { - guard showDefaultPMBadge else { return nil } - let defaultBadge = UILabel() - defaultBadge.font = selectedDefaultBadgeFont - defaultBadge.textColor = appearance.colors.textSecondary - defaultBadge.adjustsFontForContentSizeCategory = true - defaultBadge.text = String.Localized.default_text - return defaultBadge - }() - private lazy var rowButton: RowButton = { - let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, defaultBadge: defaultBadge, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) + let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, badgeText: showDefaultPMBadge ? String.Localized.default_text : nil, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) return button }() diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift index d693fd5ea87..1ad36304c9c 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Vertical Main Screen/RowButton.swift @@ -48,6 +48,7 @@ class RowButton: UIView { radioButton?.isOn = isSelected checkmarkImageView?.isHidden = !isSelected updateAccessibilityTraits() + updateDefaultBadgeFont() if isFlatWithCheckmarkStyle { alignBadgeAndCheckmark() } @@ -64,13 +65,22 @@ class RowButton: UIView { } var heightConstraint: NSLayoutConstraint? + + private var selectedDefaultBadgeFont: UIFont { + return appearance.scaledFont(for: appearance.font.base.medium, style: .caption1, maximumPointSize: 20) + } + + private var defaultBadgeFont: UIFont { + return appearance.scaledFont(for: appearance.font.base.regular, style: .caption1, maximumPointSize: 20) + } + init( appearance: PaymentSheet.Appearance, originalCornerRadius: CGFloat? = nil, imageView: UIImageView, text: String, subtext: String? = nil, - defaultBadge: UILabel? = nil, + badgeText: String? = nil, promoText: String? = nil, rightAccessoryView: UIView? = nil, shouldAnimateOnPress: Bool = false, @@ -97,9 +107,16 @@ class RowButton: UIView { } else { self.sublabel = nil } - - self.defaultBadge = defaultBadge - + if let badgeText { + let defaultBadge = UILabel() + defaultBadge.font = appearance.scaledFont(for: appearance.font.base.medium, style: .caption1, maximumPointSize: 20) + defaultBadge.textColor = appearance.colors.textSecondary + defaultBadge.adjustsFontForContentSizeCategory = true + defaultBadge.text = badgeText + self.defaultBadge = defaultBadge + } else { + self.defaultBadge = nil + } if let promoText { self.promoBadge = PromoBadgeView( appearance: appearance, @@ -279,6 +296,13 @@ class RowButton: UIView { promoBadgeConstraintToCheckmark?.isActive = isSelected } + private func updateDefaultBadgeFont() { + guard let defaultBadge else { + return + } + defaultBadge.font = isSelected ? selectedDefaultBadgeFont : defaultBadgeFont + } + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -443,10 +467,10 @@ extension RowButton { return button } - static func makeForSavedPaymentMethod(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, subtext: String? = nil, defaultBadge: UILabel? = nil, rightAccessoryView: UIView? = nil, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) -> RowButton { + static func makeForSavedPaymentMethod(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, subtext: String? = nil, badgeText: String? = nil, rightAccessoryView: UIView? = nil, isEmbedded: Bool = false, didTap: @escaping DidTapClosure) -> RowButton { let imageView = UIImageView(image: paymentMethod.makeSavedPaymentMethodRowImage()) imageView.contentMode = .scaleAspectFit - let button = RowButton(appearance: appearance, imageView: imageView, text: paymentMethod.paymentSheetLabel, subtext: subtext, defaultBadge: defaultBadge, rightAccessoryView: rightAccessoryView, isEmbedded: isEmbedded, didTap: didTap) + let button = RowButton(appearance: appearance, imageView: imageView, text: paymentMethod.paymentSheetLabel, subtext: subtext, badgeText: badgeText, rightAccessoryView: rightAccessoryView, isEmbedded: isEmbedded, didTap: didTap) button.shadowRoundedRect.accessibilityLabel = paymentMethod.paymentSheetAccessibilityLabel return button } From dd6dedbe0f48949acb53f377ddd21f917ce4c7ee Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 12:05:27 -0800 Subject: [PATCH 53/54] reran snapshots --- ...nd_apple_pay_and_link_default_badge@3x.png | Bin 90750 -> 90723 bytes ...ControllerSnapshotTestsDefaultBadge@3x.png | Bin 103793 -> 103781 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.SavedPaymentOptionsViewControllerSnapshotTests/test_all_saved_pms_and_apple_pay_and_link_default_badge@3x.png index 65d8430b62a24980d7e057ebecb989436029184b..544ef3c282dac1ba768ed3f9793a7dcb9c4a62da 100644 GIT binary patch delta 25078 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%0A^PZod>>L8il5$+BvA+4!4twbc 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 Ubn3&au&Yb<=^N{1>YfVyZ_7U}6aWAK delta 25139 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 diff --git a/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge@3x.png b/Tests/ReferenceImages_64/StripePaymentSheetTests.VerticalSavedPaymentMethodsViewControllerSnapshotTests/test_VerticalSavedPaymentOptionsViewControllerSnapshotTestsDefaultBadge@3x.png index 497301b45fe83b21922df2a672371a0be2fce83b..acfe09785f717e360e87bb151b5395ccbf143634 100644 GIT binary patch delta 39601 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 From 9b76fa943397576de3d998561d3aad244c531611 Mon Sep 17 00:00:00 2001 From: Joyce Qin Date: Thu, 19 Dec 2024 15:16:57 -0800 Subject: [PATCH 54/54] separated var for badgetext --- .../SavedPaymentMethodRowButton.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift index 927d7647848..695cbdc5728 100644 --- a/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift +++ b/StripePaymentSheet/StripePaymentSheet/Source/PaymentSheet/Saved Payment Method Screen/Vertical Saved Payment Method Screen/SavedPaymentMethodRowButton.swift @@ -92,11 +92,15 @@ final class SavedPaymentMethodRowButton: UIView { }() private lazy var rowButton: RowButton = { - let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, badgeText: showDefaultPMBadge ? String.Localized.default_text : nil, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) + let button: RowButton = .makeForSavedPaymentMethod(paymentMethod: paymentMethod, appearance: appearance, badgeText: badgeText, rightAccessoryView: chevronButton, didTap: handleRowButtonTapped) return button }() + private lazy var badgeText: String? = { + return showDefaultPMBadge ? String.Localized.default_text : nil + }() + init(paymentMethod: STPPaymentMethod, appearance: PaymentSheet.Appearance, showDefaultPMBadge: Bool = false) {