metatext/Shared/View Models/RootViewModel.swift

43 lines
1.3 KiB
Swift
Raw Normal View History

2020-08-03 15:20:51 +00:00
// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
import Combine
class RootViewModel: ObservableObject {
2020-08-07 01:41:59 +00:00
@Published private(set) var identityID: String?
2020-08-03 15:20:51 +00:00
private let environment: AppEnvironment
private var cancellables = Set<AnyCancellable>()
init(environment: AppEnvironment) {
self.environment = environment
2020-08-04 20:26:09 +00:00
identityID = environment.identityDatabase.mostRecentlyUsedIdentityID
2020-08-03 15:20:51 +00:00
}
}
extension RootViewModel {
2020-08-04 20:26:09 +00:00
func newIdentitySelected(id: String) {
identityID = id
2020-08-03 15:20:51 +00:00
}
2020-08-04 20:26:09 +00:00
func addIdentityViewModel() -> AddIdentityViewModel {
2020-08-07 01:41:59 +00:00
AddIdentityViewModel(environment: environment)
}
func mainNavigationViewModel(identityID: String) -> MainNavigationViewModel? {
let identifiedEnvironment: IdentifiedEnvironment
do {
identifiedEnvironment = try IdentifiedEnvironment(identityID: identityID, appEnvironment: environment)
} catch {
return nil
}
2020-08-03 15:20:51 +00:00
2020-08-07 01:41:59 +00:00
identifiedEnvironment.observationErrors
.receive(on: RunLoop.main)
.map { [weak self] _ in self?.environment.identityDatabase.mostRecentlyUsedIdentityID }
.assign(to: &$identityID)
2020-08-03 15:20:51 +00:00
2020-08-07 01:41:59 +00:00
return MainNavigationViewModel(environment: identifiedEnvironment)
2020-08-03 15:20:51 +00:00
}
}