AmivMicroAppsNavigator.swift 1.83 KB
Newer Older
domenicw's avatar
domenicw committed
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
//
//  AmivMicroAppsNavigator.swift
//  Amiv
//
//  Created by Domenic Wüthrich on 18.09.18.
//  Copyright © 2018 Amiv an der ETH. All rights reserved.
//

import Foundation
import UIKit

public class AmivMicroAppsNavigator: Navigator {
    
    // MARK: - Variables
    
    public var rootViewController: UIViewController {
        return self.navigationController
    }
    
    private var navigationController: UINavigationController
    
    // MARK: - Initializers
    
    public init() {
        let root = AmivMicroAppsViewController(model: AmivMicroAppModel.createModels())
        self.navigationController = UINavigationController(rootViewController: root)
        self.navigationController.navigationBar.tintColor = .amivRed
        
        root.delegate = self
    }
    
    private func snapToRoot() {
        self.navigationController.dismiss(animated: true, completion: nil)
    }
    
    // MARK: - App Creation
    
    private func createApp(_ app: AmivMicroAppType) -> AmivMicroApp {
        switch app {
        case .checkin:
            return AmivMicroAppCheckin(delegate: self)
        case .barcode:
            return AmivMicroAppBarcode(delegate: self)
        }
    }
}

extension AmivMicroAppsNavigator: AmivMicroAppDelegate {
    
    public func appIsFinished() {
        self.snapToRoot()
    }
    
}

extension AmivMicroAppsNavigator: AmivMicroAppsViewControllerDelegate {
    
    public func start(app: AmivMicroAppType) {
        let microApp = self.createApp(app)
        if microApp.start() {
            microApp.rootViewController.modalTransitionStyle = .coverVertical
            self.navigationController.present(microApp.rootViewController, animated: true, completion: nil)
        } else {
            debugPrint("micro app start did not return true")
            // TODO: - Show error message.
        }
    }
    
}