Skip to content

Commit 9380bed

Browse files
committed
Update CardPresentModalError dismiss action handling to completion so that the dismiss implementation detail is within the modal class.
1 parent d2f23c3 commit 9380bed

File tree

8 files changed

+23
-23
lines changed

8 files changed

+23
-23
lines changed

WooCommerce/Classes/ViewModels/CardPresentPayments/CardPresentModalError.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ final class CardPresentModalError: CardPresentPaymentsModalViewModel {
55
/// A closure to execute when the primary button is tapped
66
private let primaryAction: () -> Void
77

8-
/// A closure to execute when the secondary button is tapped
9-
private let secondaryAction: (UIViewController?) -> Void
8+
/// A closure to execute when the secondary button is tapped to dismiss the modal
9+
private let dismissCompletion: () -> Void
1010

1111
let textMode: PaymentsModalTextMode = .reducedBottomInfo
1212
let actionsMode: PaymentsModalActionsMode = .twoAction
@@ -37,21 +37,23 @@ final class CardPresentModalError: CardPresentPaymentsModalViewModel {
3737
init(errorDescription: String?,
3838
transactionType: CardPresentTransactionType,
3939
primaryAction: @escaping () -> Void,
40-
secondaryAction: @escaping (_ viewController: UIViewController?) -> Void) {
40+
dismissCompletion: @escaping () -> Void) {
4141
self.topTitle = Localization.paymentFailed(transactionType: transactionType)
4242
self.bottomTitle = errorDescription
4343
self.primaryButtonTitle = Localization.tryAgain(transactionType: transactionType)
4444
self.secondaryButtonTitle = Localization.noThanks(transactionType: transactionType)
4545
self.primaryAction = primaryAction
46-
self.secondaryAction = secondaryAction
46+
self.dismissCompletion = dismissCompletion
4747
}
4848

4949
func didTapPrimaryButton(in viewController: UIViewController?) {
5050
primaryAction()
5151
}
5252

5353
func didTapSecondaryButton(in viewController: UIViewController?) {
54-
secondaryAction(viewController)
54+
viewController?.dismiss(animated: true) { [weak self] in
55+
self?.dismissCompletion()
56+
}
5557
}
5658

5759
func didTapAuxiliaryButton(in viewController: UIViewController?) { }

WooCommerce/Classes/ViewModels/Order Details/OrderDetailsPaymentAlerts.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ final class OrderDetailsPaymentAlerts: OrderDetailsPaymentAlertsProtocol {
7777
presentViewModel(viewModel: viewModel)
7878
}
7979

80-
func error(error: Error, tryAgain: @escaping () -> Void, dismissError: @escaping (UIViewController?) -> Void) {
81-
let viewModel = errorViewModel(error: error, tryAgain: tryAgain, dismissError: dismissError)
80+
func error(error: Error, tryAgain: @escaping () -> Void, dismissCompletion: @escaping () -> Void) {
81+
let viewModel = errorViewModel(error: error, tryAgain: tryAgain, dismissCompletion: dismissCompletion)
8282
presentViewModel(viewModel: viewModel)
8383
}
8484

@@ -129,7 +129,7 @@ private extension OrderDetailsPaymentAlerts {
129129

130130
func errorViewModel(error: Error,
131131
tryAgain: @escaping () -> Void,
132-
dismissError: @escaping (_ viewController: UIViewController?) -> Void) -> CardPresentPaymentsModalViewModel {
132+
dismissCompletion: @escaping () -> Void) -> CardPresentPaymentsModalViewModel {
133133
let errorDescription: String?
134134
if let error = error as? CardReaderServiceError {
135135
switch error {
@@ -154,7 +154,7 @@ private extension OrderDetailsPaymentAlerts {
154154
return CardPresentModalError(errorDescription: errorDescription,
155155
transactionType: transactionType,
156156
primaryAction: tryAgain,
157-
secondaryAction: dismissError)
157+
dismissCompletion: dismissCompletion)
158158
}
159159

160160
func retryableErrorViewModel(tryAgain: @escaping () -> Void) -> CardPresentPaymentsModalViewModel {

WooCommerce/Classes/ViewModels/Order Details/OrderDetailsPaymentAlertsProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ protocol OrderDetailsPaymentAlertsProtocol {
1414

1515
func success(printReceipt: @escaping () -> Void, emailReceipt: @escaping () -> Void, noReceiptTitle: String, noReceiptAction: @escaping () -> Void)
1616

17-
func error(error: Error, tryAgain: @escaping () -> Void, dismissError: @escaping (_ viewController: UIViewController?) -> Void)
17+
func error(error: Error, tryAgain: @escaping () -> Void, dismissCompletion: @escaping () -> Void)
1818

1919
func nonRetryableError(from: UIViewController?, error: Error)
2020

WooCommerce/Classes/ViewRelated/Orders/Collect Payments/CollectOrderPaymentUseCase.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,7 @@ private extension CollectOrderPaymentUseCase {
289289
onCompletion(.failure(error))
290290
}
291291
}
292-
}, dismissError: { viewController in
293-
viewController?.dismiss(animated: true)
292+
}, dismissCompletion: {
294293
onCompletion(.failure(error))
295294
})
296295
}

WooCommerce/Classes/ViewRelated/Orders/Refund/RefundSubmissionUseCase.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,7 @@ private extension RefundSubmissionUseCase {
305305
onCompletion(.failure(error))
306306
}
307307
}
308-
}, dismissError: { viewController in
309-
viewController?.dismiss(animated: true)
308+
}, dismissCompletion: {
310309
onCompletion(.failure(error))
311310
})
312311
}

WooCommerce/WooCommerceTests/Mocks/MockOrderDetailsPaymentAlerts.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ final class MockOrderDetailsPaymentAlerts: OrderDetailsPaymentAlertsProtocol {
77

88
var error: Error?
99
var retryFromError: (() -> Void)?
10-
var dismissError: ((UIViewController?) -> Void)?
10+
var dismissErrorCompletion: (() -> Void)?
1111

1212
func presentViewModel(viewModel: CardPresentPaymentsModalViewModel) {
1313
// no-op
@@ -33,10 +33,10 @@ final class MockOrderDetailsPaymentAlerts: OrderDetailsPaymentAlertsProtocol {
3333
// no-op
3434
}
3535

36-
func error(error: Error, tryAgain: @escaping () -> Void, dismissError: @escaping (UIViewController?) -> Void) {
36+
func error(error: Error, tryAgain: @escaping () -> Void, dismissCompletion: @escaping () -> Void) {
3737
self.error = error
3838
retryFromError = tryAgain
39-
self.dismissError = dismissError
39+
dismissErrorCompletion = dismissCompletion
4040
}
4141

4242
func nonRetryableError(from: UIViewController?, error: Error) {

WooCommerce/WooCommerceTests/ViewModels/CardPresentPayments/CardPresentModalErrorTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ final class CardPresentModalErrorTests: XCTestCase {
1111
viewModel = CardPresentModalError(errorDescription: Expectations.error.localizedDescription,
1212
transactionType: .collectPayment,
1313
primaryAction: closures.primaryAction(),
14-
secondaryAction: closures.secondaryAction())
14+
dismissCompletion: closures.dismissCompletion())
1515
}
1616

1717
override func tearDown() {
@@ -66,17 +66,17 @@ private extension CardPresentModalErrorTests {
6666

6767
private final class Closures {
6868
var didTapPrimary = false
69-
var didTapSecondary = false
69+
var didDismiss = false
7070

7171
func primaryAction() -> () -> Void {
7272
return {[weak self] in
7373
self?.didTapPrimary = true
7474
}
7575
}
7676

77-
func secondaryAction() -> (UIViewController?) -> Void {
78-
return { [weak self] _ in
79-
self?.didTapSecondary = true
77+
func dismissCompletion() -> () -> Void {
78+
return { [weak self] in
79+
self?.didDismiss = true
8080
}
8181
}
8282
}

WooCommerce/WooCommerceTests/ViewModels/CardPresentPayments/CollectOrderPaymentUseCaseTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ final class CollectOrderPaymentUseCaseTests: XCTestCase {
114114
promise(())
115115
})
116116
// Dismisses error to complete the payment flow for `onCollect` to be triggered.
117-
self?.alerts.dismissError?(UIViewController())
117+
self?.alerts.dismissErrorCompletion?()
118118
}
119119

120120
// Then

0 commit comments

Comments
 (0)