Rocket.Chat.ReactNative/ios/RocketChat Watch App/RocketChatAppRouter.swift

49 lines
958 B
Swift

import Foundation
protocol RocketChatAppRouting {
func route(to route: Route)
}
final class RocketChatAppRouter: ObservableObject, RocketChatAppRouting {
@Storage(.currentServer) private var currentServer: URL?
@Published var route: Route = .serverList {
didSet {
switch route {
case .roomList(let server):
currentServer = server.url
case .serverList:
break
}
}
}
private let database: ServersDatabase
init(database: ServersDatabase) {
self.database = database
loadRoute()
}
private func loadRoute() {
if let currentServer, let server = database.server(url: currentServer) {
route = .roomList(server)
} else if database.servers().count == 1, let server = database.servers().first {
route = .roomList(server)
} else {
route = .serverList
}
}
func route(to route: Route) {
DispatchQueue.main.async {
self.route = route
}
}
}
enum Route {
case roomList(Server)
case serverList
}