50 lines
2.0 KiB
Swift
50 lines
2.0 KiB
Swift
//
|
|
// MainModuleBuilder.swift
|
|
// PrivadoVPN
|
|
//
|
|
// Created by Juraldinio on 1/27/21.
|
|
// Copyright © 2021 Privado LLC. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import AppKit
|
|
|
|
final class MainModuleBuilder {
|
|
|
|
static func build(output: MainModuleOutput, type: Route.Main) -> (MainPresenterInput, NSViewController) {
|
|
|
|
let interactor = MainInteractor(with: Environment.router, tokenResolver: {
|
|
guard let session = try? Session.instance() else { return "" }
|
|
return session.currentRecord?.token ?? "" })
|
|
let presenter = MainPresenter(interactor: interactor, output: output, type: type)
|
|
let controller = MainController(output: presenter,
|
|
headerCreation: Self.creator(output: output),
|
|
componentCreation: Self.createComponent(with: presenter))
|
|
|
|
presenter.viewInput = controller
|
|
|
|
return (presenter, controller)
|
|
}
|
|
|
|
private static func creator(output: HeaderControllerModuleOutput?) -> MainController.HeaderCreationClosure {
|
|
return { () -> NSViewController in HeaderControllerBuilder.build(icon: .none, output: output) }
|
|
}
|
|
|
|
private static func createComponent(with presenter: MainPresenter) -> MainController.ComponentCreationClosure {
|
|
|
|
return { (component: MainControllerComponent) -> NSView in
|
|
|
|
switch component {
|
|
case .notification: return NotificationPanelBuilder.build(output: presenter)
|
|
case .connection: return ConnectionPanelBuilder.build(output: presenter)
|
|
case .servers: return ServerPanelBuilder.build(output: presenter)
|
|
case .killswitch: return KilSwitchPanelBuilder.build(output: presenter)
|
|
case .remaining: return TrafficPanelBuilder.build(output: presenter)
|
|
}
|
|
|
|
// .notification
|
|
}
|
|
}
|
|
|
|
}
|