Last active
January 20, 2018 01:22
-
-
Save twittemb/0f302a086b311750a59b8714fd8e58f3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import RxFlow | |
import UIKit | |
class WatchedFlow: Flow { | |
var root: UIViewController { | |
return self.rootViewController | |
} | |
private let rootViewController = UINavigationController() | |
private let service: MoviesService | |
init(withService service: MoviesService) { | |
self.service = service | |
} | |
func navigate(to step: Step) -> [NextFlowItem] { | |
guard let step = step as? DemoStep else { return NextFlowItem.noNavigation } | |
switch step { | |
case .movieList: | |
return navigateToMovieListScreen() | |
case .moviePicked(let movieId): | |
return navigateToMovieDetailScreen(with: movieId) | |
case .castPicked(let castId): | |
return navigateToCastDetailScreen(with: castId) | |
default: | |
return NextFlowItem.noNavigation | |
} | |
} | |
private func navigateToMovieListScreen () -> [NextFlowItem] { | |
let viewModel = WatchedViewModel(with: self.service) | |
let viewController = WatchedViewController.instantiate(with: viewModel) | |
viewController.title = "Watched" | |
self.rootViewController.pushViewController(viewController, animated: true) | |
return [NextFlowItem(nextPresentable: viewController, nextStepper: viewModel)] | |
} | |
private func navigateToMovieDetailScreen (with movieId: Int) -> [NextFlowItem] { | |
let viewModel = MovieDetailViewModel(withService: self.service, | |
andMovieId: movieId) | |
let viewController = MovieDetailViewController.instantiate(with: viewModel) | |
viewController.title = viewModel.title | |
self.rootViewController.pushViewController(viewController, animated: true) | |
return [NextFlowItem(nextPresentable: viewController, nextStepper: viewModel)] | |
} | |
private func navigateToCastDetailScreen (with castId: Int) -> [NextFlowItem] { | |
let viewModel = CastDetailViewModel(withService: self.service, | |
andCastId: castId) | |
let viewController = CastDetailViewController.instantiate(with: viewModel) | |
viewController.title = viewModel.name | |
self.rootViewController.pushViewController(viewController, animated: true) | |
return NextFlowItem.noNavigation | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment