// Copyright SIX DAY LLC. All rights reserved. import Foundation import UIKit protocol InCoordinatorDelegate: class { func didCancel(in coordinator: InCoordinator) func didUpdateAccounts(in coordinator: InCoordinator) } class InCoordinator: Coordinator { let navigationController: UINavigationController var coordinators: [Coordinator] = [] let account: Account var keystore: Keystore let config = Config() weak var delegate: InCoordinatorDelegate? init( navigationController: UINavigationController = NavigationController(), account: Account, keystore: Keystore ) { self.navigationController = navigationController self.account = account self.keystore = keystore } func start() { showTransactions(for: account) } func showTransactions(for account: Account) { let session = WalletSession( account: account ) let coordinator = TransactionCoordinator( session: session, rootNavigationController: navigationController, storage: TransactionsStorage( current: account, chainID: config.chainID ) ) coordinator.delegate = self navigationController.viewControllers = [ coordinator.rootViewController, ] navigationController.setNavigationBarHidden(false, animated: false) addCoordinator(coordinator) keystore.recentlyUsedAccount = account } } extension InCoordinator: TransactionCoordinatorDelegate { func didCancel(in coordinator: TransactionCoordinator) { delegate?.didCancel(in: self) coordinator.navigationController.dismiss(animated: true, completion: nil) coordinator.stop() removeCoordinator(coordinator) } func didRestart(with account: Account, in coordinator: TransactionCoordinator) { coordinator.navigationController.dismiss(animated: true, completion: nil) coordinator.stop() removeCoordinator(coordinator) showTransactions(for: account) } func didUpdateAccounts(in coordinator: TransactionCoordinator) { delegate?.didUpdateAccounts(in: self) } }