|
//
// GroupCoordinator.swift
// Paiai_iOS
//
// Created by FFIB on 2019/1/29.
// Copyright © 2019 FFIB. All rights reserved.
//
import UIKit
import RxSwift
import RxCocoa
import PaiaiDataKit
extension NavigationSource {
enum Group {
case scan /// 扫码
case mineGroup /// 侧边栏 照片群
case createGroup /// 创建群
case photoDetail /// 照片详情页
case recentGroup /// 最近访问的照片群
}
}
class GroupCoordinator: BaseCoordinator<Void> {
let groupViewController: GroupViewController
let source: NavigationSource.Group
init(_ viewController: GroupViewController,
navigationController: UINavigationController,
navigationSource: NavigationSource.Group) {
self.groupViewController = viewController
self.source = navigationSource
super.init(navigationController: navigationController, viewController: viewController)
}
override func start() -> Observable<Void> {
groupViewController.viewModel.delegate = self
return didCancel
}
}
extension GroupCoordinator: GroupViewModelDelegate {
func navigateToGroupDetail(_ item: GroupItem) {
let coordinator = GroupDetailCoordinator(makeGroupDetailViewController(item),
navigationController: navigationController,
navigationSource: source)
coordinate(to: coordinator).subscribe(onNext: {[weak self] res in
switch res {
case .quit:
self?.didCancel.onNext(())
case .cancel:
break
}
}).disposed(by: disposeBag)
navigationController.pushViewController(coordinator.groupDetailViewController)
}
func didSelect(_ items: [PhotoItem], currIndex: Int) {
let vc = PhotoDetailViewController.instantiate()
let viewModel = PhotoDetailViewModel(items: items, currIndex: currIndex)
viewModel.isHiddenEnterGroupBtn.accept(true)
let coordinator = PhotoDetailCoordinator(vc, nav: navigationController,
viewModel: viewModel)
coordinate(to: coordinator).subscribe().disposed(by: disposeBag)
navigationController.pushViewController(vc)
}
}
fileprivate extension GroupCoordinator {
func makeGroupDetailViewController(_ item: GroupItem) -> GroupDetailViewController {
let vc = GroupDetailViewController.instantiate()
vc.viewModel = GroupDetailViewModel(item: item)
return vc
}
}
extension UIStoryboard {
static var group: UIStoryboard {
return UIStoryboard(name: "Group", bundle: Bundle(identifier: "com.Paiai-iOS"))
}
}
|