Skip to content

Instantly share code, notes, and snippets.

@twittemb
Last active January 20, 2018 01:22
Show Gist options
  • Save twittemb/0f302a086b311750a59b8714fd8e58f3 to your computer and use it in GitHub Desktop.
Save twittemb/0f302a086b311750a59b8714fd8e58f3 to your computer and use it in GitHub Desktop.
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