|
//
// MineCoordinator.swift
// Paiai_iOS
//
// Created by FFIB on 2018/12/6.
// Copyright © 2018 FFIB. All rights reserved.
//
import UIKit
import RxSwift
import PaiaiUIKit
import PaiaiDataKit
class MineCoordinator: BaseCoordinator<Void> {
let mineViewController: MineViewController
init(_ viewController: MineViewController,
navigationController: UINavigationController) {
self.mineViewController = viewController
super.init(navigationController: navigationController, viewController: viewController)
}
override func start() -> Observable<Void> {
mineViewController.delegate = self
return didCancel
}
}
extension MineCoordinator: MineViewControllerDelegate {
func logout() {
mineViewController.dismissController()
didCancel.onNext(())
guard let coordinator = parentCoordinator as? AppCoordinator else { return }
let vc = coordinator.makeLoginViewController()
let loginCoordinator = LoginCoordinator(vc)
coordinator.coordinate(to: loginCoordinator).subscribe { _ in
vc.dismissController()
}.disposed(by: disposeBag)
navigationController.presentController(vc)
}
func didSelect(_ item: MineItem) {
mineViewController.dismissController()
deallocatedDispose.dispose()
let vc: UIViewController
switch item {
case .group:
vc = makeMineGroupViewController()
case .order:
vc = makeMineOrderViewController()
case .feedback:
vc = makeMineFeedbackViewController()
case .about:
vc = makeMineAboutViewController()
}
vc.rx.deallocating.subscribe(onNext: { _ in
self.didCancel.onNext(())
}).disposed(by: disposeBag)
}
}
extension MineCoordinator: MineGroupViewModelDelegate {
func didSelect(_ item: GroupItem) {
let coordinator = GroupCoordinator(makeGroupViewController(item: item),
navigationController: navigationController,
navigationSource: .mineGroup)
coordinate(to: coordinator).subscribe().disposed(by: disposeBag)
navigationController.pushViewController(coordinator.groupViewController)
}
}
fileprivate extension MineCoordinator {
func makeMineGroupViewController() -> MineGroupViewController {
let vc = MineGroupViewController.instantiate()
vc.viewModel = MineGroupViewModel()
vc.viewModel.delegate = self
navigationController.pushViewController(vc)
return vc
}
func makeMineOrderViewController() -> MineOrderViewController {
let vc = MineOrderViewController.instantiate()
vc.viewModel = MineOrderViewModel()
navigationController.pushViewController(vc)
return vc
}
func makeMineFeedbackViewController() -> MineFeedbackViewController {
let vc = MineFeedbackViewController.instantiate()
vc.feedbackAPI = FeedbackRemoteAPI()
navigationController.pushViewController(vc)
return vc
}
func makeMineAboutViewController() -> MineAboutViewController {
let vc = MineAboutViewController.instantiate()
navigationController.pushViewController(vc, animated: true)
print(navigationController)
return vc
}
func makeGroupViewController(item: GroupItem) -> GroupViewController {
let vc = GroupViewController.instantiate()
vc.viewModel = GroupViewModel(groupItem: item)
return vc
}
}
extension UIStoryboard {
static var mine: UIStoryboard {
return UIStoryboard(name: "Mine", bundle: Bundle(identifier: "com.Paiai-iOS"))
}
}
|