-
Notifications
You must be signed in to change notification settings - Fork 9
/
CreatePersonaCoordinator+Models.swift
67 lines (57 loc) · 1.59 KB
/
CreatePersonaCoordinator+Models.swift
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
import ComposableArchitecture
import SwiftUI
// MARK: - PersonaPrimacy
public enum PersonaPrimacy: Sendable, Hashable {
case first(First)
case notFirst
public enum First: Sendable, Hashable {
case onAnyNetwork
case justOnCurrentNetwork
}
public init(firstOnAnyNetwork: Bool, firstOnCurrent: Bool) {
switch (firstOnAnyNetwork, firstOnCurrent) {
case (true, false):
assertionFailure("Discrepancy")
fallthrough
case (true, true):
self = .first(.onAnyNetwork)
case (false, false):
self = .notFirst
case (false, true):
self = .first(.justOnCurrentNetwork)
}
}
public var firstPersonaOnCurrentNetwork: Bool {
switch self {
case .notFirst: false
case .first: true
}
}
public var isFirstEver: Bool {
switch self {
case .first(.onAnyNetwork): true
default: false
}
}
}
extension PersonaPrimacy {
public static let firstOnAnyNetwork = Self(firstOnAnyNetwork: true, firstOnCurrent: true)
public static let notFirstOnCurrentNetwork = Self(firstOnAnyNetwork: false, firstOnCurrent: false)
}
// MARK: - CreatePersonaConfig
public struct CreatePersonaConfig: Sendable, Hashable {
public let personaPrimacy: PersonaPrimacy
public let navigationButtonCTA: CreatePersonaNavigationButtonCTA
public init(
personaPrimacy: PersonaPrimacy,
navigationButtonCTA: CreatePersonaNavigationButtonCTA
) {
self.personaPrimacy = personaPrimacy
self.navigationButtonCTA = navigationButtonCTA
}
}
// MARK: - CreatePersonaNavigationButtonCTA
public enum CreatePersonaNavigationButtonCTA: Sendable, Equatable {
case goBackToPersonaListInSettings
case goBackToChoosePersonas
}