Files

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