Skip to content

Commit 94a97e7

Browse files
committed
Change logic when setting auxiliary content
Rather than checking the viewModel’s actionsMode to populate the modal, we directly set the values from the viewModel, regardless if these are populated or not.
1 parent 73438f7 commit 94a97e7

File tree

3 files changed

+23
-19
lines changed

3 files changed

+23
-19
lines changed

WooCommerce/Classes/ViewModels/CardPresentPayments/CardPresentModalScanningForReader.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ final class CardPresentModalScanningForReader: CardPresentPaymentsModalViewModel
77
private let cancelAction: () -> Void
88

99
let textMode: PaymentsModalTextMode = .reducedBottomInfo
10-
let actionsMode: PaymentsModalActionsMode = .secondaryActionAndAttributedAuxiliaryButton
10+
let actionsMode: PaymentsModalActionsMode = .secondaryActionAndAuxiliaryButton
1111

1212
let topTitle: String = Localization.title
1313

@@ -21,6 +21,8 @@ final class CardPresentModalScanningForReader: CardPresentPaymentsModalViewModel
2121

2222
let auxiliaryButtonTitle: String? = nil
2323

24+
let auxiliaryButtonimage: UIImage? = .infoOutlineImage
25+
2426
var auxiliaryAttributedButtonTitle: NSAttributedString? {
2527
let result = NSMutableAttributedString(
2628
string: .localizedStringWithFormat(

WooCommerce/Classes/ViewModels/CardPresentPayments/CardPresentPaymentsModalViewModel.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ protocol CardPresentPaymentsModalViewModel {
3030
/// Provides a title as a NSAttributedString for an auxiliary button
3131
var auxiliaryAttributedButtonTitle: NSAttributedString? { get }
3232

33+
/// Provides an image for the auxiliary button
34+
var auxiliaryButtonimage: UIImage? { get }
35+
3336
/// The title in the bottom section of the modal. Right below the image
3437
var bottomTitle: String? { get }
3538

@@ -86,8 +89,8 @@ enum PaymentsModalActionsMode {
8689
/// One secondary action button
8790
case secondaryOnlyAction
8891

89-
/// One secondary action button and an auxiliary button that uses NSAttributedString
90-
case secondaryActionAndAttributedAuxiliaryButton
92+
/// One secondary action button and an auxiliary button
93+
case secondaryActionAndAuxiliaryButton
9194

9295
/// Two action buttons
9396
case twoAction
@@ -103,4 +106,8 @@ extension CardPresentPaymentsModalViewModel {
103106
var auxiliaryAttributedButtonTitle: NSAttributedString? {
104107
get { return nil }
105108
}
109+
110+
var auxiliaryButtonimage: UIImage? {
111+
get { return nil }
112+
}
106113
}

WooCommerce/Classes/ViewRelated/CardPresentPayments/CardPresentPaymentsModalViewController.swift

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ private extension CardPresentPaymentsModalViewController {
158158
}
159159

160160
func styleAuxiliaryButton() {
161-
if viewModel.actionsMode != .secondaryActionAndAttributedAuxiliaryButton {
161+
if viewModel.actionsMode != .secondaryActionAndAuxiliaryButton {
162162
auxiliaryButton.applyLinkButtonStyle()
163163
}
164164
auxiliaryButton.titleLabel?.minimumScaleFactor = 0.5
@@ -279,31 +279,26 @@ private extension CardPresentPaymentsModalViewController {
279279
}
280280

281281
func configureAuxiliaryButton() {
282-
clearAuxiliaryButton()
283282

284283
guard shouldShowAuxiliaryButton() else {
285284
auxiliaryButton.isHidden = true
286285
return
287286
}
288287

289288
auxiliaryButton.isHidden = false
290-
auxiliaryButton.setTitleWithoutAnimation(viewModel.auxiliaryButtonTitle, for: .normal)
291289
auxiliaryButton.accessibilityIdentifier = Accessibility.auxiliaryButton
292-
293-
if viewModel.actionsMode == .secondaryActionAndAttributedAuxiliaryButton {
294-
auxiliaryButton.setImage(.infoOutlineImage, for: .normal)
290+
// Prevents UI flicker when loading different content
291+
UIView.performWithoutAnimation {
292+
auxiliaryButton.setTitle(viewModel.auxiliaryButtonTitle, for: .normal)
295293
auxiliaryButton.setAttributedTitle(viewModel.auxiliaryAttributedButtonTitle, for: .normal)
296-
auxiliaryButton.distributeTitleAndImage(spacing: 12.0)
294+
auxiliaryButton.setImage(viewModel.auxiliaryButtonimage, for: .normal)
295+
if viewModel.auxiliaryButtonimage != nil {
296+
auxiliaryButton.distributeTitleAndImage(spacing: 8.0)
297+
}
298+
view.layoutIfNeeded()
297299
}
298300
}
299301

300-
func clearAuxiliaryButton() {
301-
auxiliaryButton.setImage(nil, for: .normal)
302-
auxiliaryButton.setAttributedTitle(nil, for: .normal)
303-
auxiliaryButton.setTitle(nil, for: .normal)
304-
auxiliaryButton.accessibilityIdentifier = nil
305-
}
306-
307302
func configureSpacer() {
308303
let enabled = !shouldShowActionButtons()
309304

@@ -355,12 +350,12 @@ private extension CardPresentPaymentsModalViewController {
355350
}
356351

357352
func shouldShowBottomActionButton() -> Bool {
358-
[.secondaryOnlyAction, .twoAction, .twoActionAndAuxiliary, .secondaryActionAndAttributedAuxiliaryButton]
353+
[.secondaryOnlyAction, .twoAction, .twoActionAndAuxiliary, .secondaryActionAndAuxiliaryButton]
359354
.contains(viewModel.actionsMode)
360355
}
361356

362357
func shouldShowAuxiliaryButton() -> Bool {
363-
[.twoActionAndAuxiliary, .secondaryActionAndAttributedAuxiliaryButton].contains(viewModel.actionsMode)
358+
[.twoActionAndAuxiliary, .secondaryActionAndAuxiliaryButton].contains(viewModel.actionsMode)
364359
}
365360
}
366361

0 commit comments

Comments
 (0)