74 lines
2.0 KiB
Swift
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)
|
|
}
|
|
}
|