// // MenuPresenter.swift // PrivadoVPN // // Created by Murad Shabanov on 21.06.2021. // Copyright © 2021 Privado LLC. All rights reserved. // import Foundation protocol MenuModuleOutput: AnyObject { func handleModuleRoute(_ route: Route?) } final class MenuPresenter { private weak var output: MenuModuleOutput? weak var viewInput: MenuControllerInput? private let menuItems: [MenuItem] = [ .preferences, .undock, .contactUs, .logout ] init(output: MenuModuleOutput?) { self.output = output UserSettings.shared.isDockedEmitter.addReaction { [weak self] _ -> ShouldContinueReceiveNotifications in self?.viewInput?.reloadData() return self.isExist } } // subscribe on dockUndockEmitter, } // MARK: - MenuControllerOutput extension MenuPresenter: MenuControllerOutput { func menuControllerClose(_ controller: MenuControllerInput) { self.output?.handleModuleRoute(nil) } func menuControllerItem(_ controller: MenuControllerInput, at index: Int) -> MenuItem? { return self.menuItems[safe: index] } func menuControllerItem(_ controller: MenuControllerInput, selected tag: Int) { guard let item = MenuItem.item(by: tag) else { return } var route: Route? switch item { case .preferences: route = .preference(tab: nil) case .undock: route = UserSettings.shared.isDocked ? .undock : .dock case .contactUs: if let url = URL(string: PrivadoConstants.Link.contactUs) { route = .navigate(url: url) } case .logout: route = .login(type: .signout) } route >>- { self.output?.handleModuleRoute($0) } } func menuControllerItemsCount(_ controller: MenuControllerInput) -> Int { return self.menuItems.count } func menuControllerQuit(_ controller: MenuControllerInput) { self.output?.handleModuleRoute(.quit) } }