Няма описание

HomeCoordinator.swift 3.7KB

    // // 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")) } }