44 lines
731 B
Swift
44 lines
731 B
Swift
import Foundation
|
|
|
|
protocol AppRouting {
|
|
func route(to route: Route)
|
|
func present(error: ErrorResponse)
|
|
}
|
|
|
|
final class AppRouter: ObservableObject {
|
|
@Published private(set) var route: Route = .loading
|
|
|
|
@Published var error: ErrorResponse?
|
|
|
|
@Storage(.currentServer) private var currentURL: URL?
|
|
}
|
|
|
|
extension AppRouter: AppRouting {
|
|
func route(to route: Route) {
|
|
self.route = route
|
|
|
|
switch route {
|
|
case .roomList(let server):
|
|
currentURL = server.url
|
|
case .serverList:
|
|
currentURL = nil
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
|
|
func present(error: ErrorResponse) {
|
|
guard self.error == nil else {
|
|
return
|
|
}
|
|
|
|
self.error = error
|
|
}
|
|
}
|
|
|
|
enum Route: Equatable {
|
|
case loading
|
|
case serverList
|
|
case roomList(Server)
|
|
}
|