-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathAppCoordinator.swift
More file actions
101 lines (72 loc) · 3.08 KB
/
Copy pathAppCoordinator.swift
File metadata and controls
101 lines (72 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//
// AppCoordinator.swift
// CoordinatorExample
//
// Created by Will Townsend on 11/11/16.
// Copyright © 2016 Will Townsend. All rights reserved.
//
import Foundation
import UIKit
/// The AppCoordinator is our first coordinator
/// In this example the AppCoordinator as a rootViewController
class AppCoordinator: RootViewCoordinator {
// MARK: - Properties
let services: Services
var childCoordinators: [Coordinator] = []
var rootViewController: UIViewController {
return self.navigationController
}
/// Window to manage
let window: UIWindow
private lazy var navigationController: UINavigationController = {
let navigationController = UINavigationController()
navigationController.isNavigationBarHidden = true
return navigationController
}()
// MARK: - Init
public init(window: UIWindow, services: Services) {
self.services = services
self.window = window
self.window.rootViewController = self.rootViewController
self.window.makeKeyAndVisible()
}
// MARK: - Functions
/// Starts the coordinator
public func start() {
self.showSplashViewController()
}
/// Creates a new SplashViewController and places it into the navigation controller
private func showSplashViewController() {
let splashViewController = SplashViewController(services: self.services)
splashViewController.delegate = self
self.navigationController.viewControllers = [splashViewController]
}
}
// MARK: - SplashViewControllerDelegate
extension AppCoordinator: SplashViewControllerDelegate {
func splashViewControllerDidTapNewOrder(splashViewController: SplashViewController) {
let newOrderCoordinator = NewOrderCoordinator(with: self.services)
newOrderCoordinator.delegate = self
newOrderCoordinator.rootViewController.modalPresentationStyle = .fullScreen
newOrderCoordinator.start()
self.addChildCoordinator(newOrderCoordinator)
self.rootViewController.present(newOrderCoordinator.rootViewController, animated: true, completion: nil)
}
}
// MARK: - NewOrderCoordinatorDelegate
extension AppCoordinator: NewOrderCoordinatorDelegate {
func newOrderCoordinatorDidRequestCancel(newOrderCoordinator: NewOrderCoordinator) {
newOrderCoordinator.rootViewController.dismiss(animated: true)
self.removeChildCoordinator(newOrderCoordinator)
}
func newOrderCoordinator(newOrderCoordinator: NewOrderCoordinator, didAddOrder orderPayload: NewOrderCoordinatorPayload) {
guard let drinkType = orderPayload.selectedDrinkType,
let snackType = orderPayload.selectedSnackType else {
return
}
let order = Order(drinkType: drinkType, snackType: snackType)
self.services.dataService.orders.append(order)
newOrderCoordinator.rootViewController.dismiss(animated: true)
self.removeChildCoordinator(newOrderCoordinator)
}
}