This repository was archived by the owner on Jun 2, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 568
Expand file tree
/
Copy pathConfirmCoordinator.swift
More file actions
99 lines (87 loc) · 3.11 KB
/
ConfirmCoordinator.swift
File metadata and controls
99 lines (87 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright DApps Platform Inc. All rights reserved.
import Foundation
import UIKit
import TrustCore
import TrustKeystore
import Result
protocol ConfirmCoordinatorDelegate: class {
func didCancel(in coordinator: ConfirmCoordinator)
}
final class ConfirmCoordinator: RootCoordinator {
let navigationController: NavigationController
let session: WalletSession
let account: Account
let keystore: Keystore
let configurator: TransactionConfigurator
var didCompleted: ((Result<ConfirmResult, AnyError>) -> Void)?
let type: ConfirmType
let server: RPCServer
var coordinators: [Coordinator] = []
weak var delegate: ConfirmCoordinatorDelegate?
var rootViewController: UIViewController {
return controller
}
private lazy var authenticateUserCoordinator: AuthenticateUserCoordinator = {
return AuthenticateUserCoordinator(navigationController: navigationController)
}()
private lazy var controller: ConfirmPaymentViewController = {
return ConfirmPaymentViewController(
session: session,
keystore: keystore,
configurator: configurator,
confirmType: type,
server: server
)
}()
init(
navigationController: NavigationController = NavigationController(),
session: WalletSession,
configurator: TransactionConfigurator,
keystore: Keystore,
account: Account,
type: ConfirmType,
server: RPCServer
) {
self.navigationController = navigationController
self.navigationController.modalPresentationStyle = .formSheet
self.session = session
self.configurator = configurator
self.keystore = keystore
self.account = account
self.type = type
self.server = server
controller.delegate = self
controller.didComplete = { [weak self] result in
guard let `self` = self else { return }
switch result {
case .success(let data):
self.didCompleted?(.success(data))
case .failure(let error):
self.didCompleted?(.failure(error))
}
}
}
func start() {
controller.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(dismiss))
navigationController.viewControllers = [controller]
}
@objc func dismiss() {
didCompleted?(.failure(AnyError(DAppError.cancelled)))
delegate?.didCancel(in: self)
}
}
extension ConfirmCoordinator: ConfirmPaymentAuthenticationDelegate {
func confirmPaymentControllerNeedsAuthentication(_ controller: ConfirmPaymentViewController) {
let needsPasscodeCheck = Lock().shouldAuthorizeTransactions()
if needsPasscodeCheck {
authenticateUserCoordinator.start { [weak self] (success, _) in
if success {
self?.controller.sendTransaction()
self?.authenticateUserCoordinator.stop()
}
}
} else {
self.controller.sendTransaction()
}
}
}