|
//
// HomeCoordinator.swift
// PaiAi
//
// Created by ffib on 2018/12/6.
// Copyright © 2018 yb. All rights reserved.
//
import Foundation
import PaiaiDataKit
import PaiaiUIKit
class HomeCoordinator: Coordinator {
fileprivate var coordinators = [CoordinatorKey: Coordinator]()
var homeViewController: HomeViewController
var navigationController: UINavigationController
var shareUserInfoViewModel: UserInfoViewModel
init(_ homeVC: HomeViewController,
navigationController: UINavigationController,
userInfoViewModel: UserInfoViewModel) {
homeViewController = homeVC
self.navigationController = navigationController
shareUserInfoViewModel = userInfoViewModel
homeViewController.viewModel.delegate = self
}
func start() {
}
}
extension HomeCoordinator: HomeViewModelDelegate {
func didSelect(_ items: [PhotoItem], currIndex: Int) {
let ctl = UIStoryboard.photoDetail.instantiateController(PhotoDetailViewController.self)
let coordinator = PhotoDetailCoordinator(ctl, nav: navigationController,
viewModel: PhotoDetailViewModel(item: items[currIndex]),
listViewModel: PhotoDetailListViewModel(items: items, currIndex: currIndex))
coordinators[.photoDetail] = coordinator
coordinator.start()
navigationController.pushViewController(coordinator.photoDetailViewController)
}
func createGroup() {
let ctl = UIStoryboard.main.instantiateCreateGroupViewController()
ctl.delegate = self
homeViewController.presentController(ctl)
}
func scanQR() {
let ctl = UIStoryboard.main.instantiateScanQRViewController()
ctl.viewModel.delegate = self
navigationController.pushViewController(ctl)
}
}
extension HomeCoordinator: CreateGroupViewControllerDelegate {
func didSelect(_ item: GroupItem) {
let ctl = UIStoryboard.group.instantiateController(GroupViewController.self)
ctl.viewModel = GroupViewModel(groupItem: item)
let coordinator = GroupCoordinator(ctl,
navigationController: navigationController)
coordinators[.group] = coordinator
navigationController.pushViewController(ctl)
}
func navigateToCreateGroupConfirm() {
let ctl = UIStoryboard.main.instantiateCreateGroupConfirmViewController()
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()
let ctl = UIStoryboard.group.instantiateController(GroupViewController.self)
ctl.viewModel = GroupViewModel(groupItem: item)
let coordinator = GroupCoordinator(ctl,
navigationController: navigationController)
coordinators[.group] = coordinator
navigationController.pushViewController(ctl)
}
}
extension HomeCoordinator: ScanQRViewModelDelegate {
func navigateToGroupFromScanQR(_ item: GroupItem) {
let ctl = UIStoryboard.group.instantiateController(GroupViewController.self)
ctl.viewModel = GroupViewModel(groupItem: item)
let coordinator = GroupCoordinator(ctl,
navigationController: navigationController)
coordinators[.group] = coordinator
navigationController.pushViewController(ctl)
}
}
extension UIStoryboard {
fileprivate func instantiateCreateGroupViewController() -> CreateGroupViewController {
let createGroupVC = instantiateController(CreateGroupViewController.self)
return createGroupVC
}
fileprivate func instantiateCreateGroupConfirmViewController() -> CreateGroupConfirmViewController {
let createGroupConfirmVC = instantiateController(CreateGroupConfirmViewController.self)
return createGroupConfirmVC
}
fileprivate func instantiateScanQRViewController() -> ScanQRViewController {
let scanQRVC = instantiateController(ScanQRViewController.self)
return scanQRVC
}
}
extension UIStoryboard {
static var main: UIStoryboard {
return UIStoryboard(name: "Main", bundle: Bundle(identifier: "com.Paiai-iOS"))
}
}
|