Files
2022-04-25 07:28:13 +00:00

74 lines
2.0 KiB
Swift

//
// 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)
}
}