|
//
// HomeCoordinator.swift
// Paiai_iOS
//
// Created by FFIB on 2018/12/6.
// Copyright © 2018 FFIB. All rights reserved.
//
import UIKit
import RxSwift
import PaiaiDataKit
class HomeCoordinator: BaseCoordinator<Void> {
var homeViewController: HomeViewController
var containerViewController: ContainerViewController
var shareUserInfoViewModel: UserInfoViewModel
init(_ viewController: HomeViewController,
navigationController: UINavigationController,
containerViewController: ContainerViewController,
userInfoViewModel: UserInfoViewModel) {
self.homeViewController = viewController
self.shareUserInfoViewModel = userInfoViewModel
self.containerViewController = containerViewController
super.init(navigationController: navigationController, viewController: viewController)
}
@discardableResult
override func start() -> Observable<Void> {
homeViewController.viewModel.delegate = self
return Observable.never()
}
}
extension HomeCoordinator: HomeViewModelDelegate {
func didSelect(_ items: [PhotoItem], currIndex: Int) {
let vc = PhotoDetailViewController.instantiate()
let coordinator = PhotoDetailCoordinator(vc,
nav: navigationController,
viewModel: PhotoDetailViewModel(items: items, currIndex: currIndex))
coordinate(to: coordinator).subscribe().disposed(by: disposeBag)
navigationController.pushViewController(coordinator.photoDetailViewController)
}
func createGroup() {
let ctl = CreateGroupViewController.instantiate()
ctl.delegate = self
homeViewController.presentController(ctl)
}
func scanQR() {
let ctl = ScanQRViewController.instantiate()
ctl.viewModel.delegate = self
navigationController.pushViewController(ctl)
}
}
extension HomeCoordinator: CreateGroupViewControllerDelegate {
func createGroupViewControllerDidSelect(_ item: GroupItem) {
coordinateToGroupCoordinator(item: item, navigationSource: .recentGroup)
}
func navigateToCreateGroupConfirm() {
let ctl = CreateGroupConfirmViewController.instantiate()
ctl.viewModel = CreateGroupViewModel(userInfoViewModel: shareUserInfoViewModel)
ctl.viewModel.delegate = self
homeViewController.presentController(ctl)
}
}
extension HomeCoordinator: CreateGroupViewModelDelegate {
func navigateToGroup(_ item: GroupItem) {
guard let vc = homeViewController.presentedViewController,
vc.isMember(of: CreateGroupConfirmViewController.self) else { return }
vc.dismissController()
coordinateToGroupCoordinator(item: item, navigationSource: .createGroup)
}
}
extension HomeCoordinator: ScanQRViewModelDelegate {
func navigateToGroupFromScanQR(_ item: GroupItem) {
coordinateToGroupCoordinator(item: item, navigationSource: .scan)
}
}
fileprivate extension HomeCoordinator {
func coordinateToGroupCoordinator(item: GroupItem, navigationSource: NavigationSource.Group) {
let vc = GroupViewController.instantiate()
vc.viewModel = GroupViewModel(groupItem: item)
let coordinator = GroupCoordinator(vc,
navigationController: navigationController,
navigationSource: navigationSource)
coordinate(to: coordinator).subscribe().disposed(by: disposeBag)
navigationController.pushViewController(vc)
}
}
extension UIStoryboard {
static var main: UIStoryboard {
return UIStoryboard(name: "Main", bundle: Bundle(identifier: "com.Paiai-iOS"))
}
}
|