Skip to content

Instantly share code, notes, and snippets.

@benjohnde
Last active September 13, 2018 14:03
Show Gist options
  • Save benjohnde/2ff59b7c256520809a256426c98d8099 to your computer and use it in GitHub Desktop.
Save benjohnde/2ff59b7c256520809a256426c98d8099 to your computer and use it in GitHub Desktop.
import RxFlow
public class BootstrapFlow: Flow {
// MARK: - Public properties
public var root: Presentable {
return UINavigationController()
}
public var completionStep: Step?
// MARK: - Private properties
private var rootViewController = PreventisNavigationController()
private let stepper = BootstrapStepper()
// MARK: - Step navigation switch (RxFlow)
public func navigate(to step: Step) -> NextFlowItems {
guard let step = step as? BootstrapStep else {
return NextFlowItems.none
}
switch step {
case .welcome:
return self.navigateToWelcome()
case .customize:
return self.navigateToCustomize()
case .finish:
return self.finish()
}
}
}
// MARK: - Initial welcome screen
extension BootstrapFlow {
private func navigateToWelcome() -> NextFlowItems {
let storyboard = UIStoryboard(name: "Welcome", bundle: Bundle.framework)
let viewModel = WelcomeViewModel()
let viewController = storyboard.instantiateInitialViewController() as? WelcomeViewController
viewController?.setViewModel(viewModel)
self.rootViewController.pushViewController(viewController!, animated: true)
let nextFlowItem = NextFlowItem(nextPresentable: viewController!, nextStepper: stepper)
return NextFlowItems.one(flowItem: nextFlowItem)
}
}
// MARK: - Navigate to customization screen
extension BootstrapFlow {
private func navigateToCustomization() -> NextFlowItems {
let storyboard = UIStoryboard(name: "Customize", bundle: Bundle.framework)
let viewModel = CustomizeViewModel()
let viewController = storyboard.instantiateInitialViewController() as? CustomizeViewController
viewController?.setViewModel(viewModel: self.viewModel)
self.rootViewController.pushViewController(viewController!, animated: true)
let nextFlowItem = NextFlowItem(nextPresentable: viewController!, nextStepper: stepper)
return NextFlowItems.one(flowItem: nextFlowItem)
}
}
// MARK: - Finish the bootstrap flow
extension BootstrapFlow {
public func finish() -> NextFlowItems {
self.rootViewController.dismiss(animated: true)
return NextFlowItems.end(withStepForParentFlow: self.completionStep!)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment