40 lines
900 B
Swift
40 lines
900 B
Swift
import SwiftUI
|
|
|
|
struct AppView: View {
|
|
@Storage(.currentServer) private var currentURL: URL?
|
|
|
|
@Dependency private var database: ServersDatabase
|
|
|
|
@StateObject private var router: AppRouter
|
|
|
|
init(router: AppRouter) {
|
|
_router = StateObject(wrappedValue: router)
|
|
}
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
ServerListView()
|
|
.environmentObject(router)
|
|
.environment(\.managedObjectContext, database.viewContext)
|
|
}
|
|
.onAppear {
|
|
loadRoute()
|
|
}
|
|
.sheet(item: $router.error) { error in
|
|
Text(error.error)
|
|
.multilineTextAlignment(.center)
|
|
.padding()
|
|
}
|
|
}
|
|
|
|
private func loadRoute() {
|
|
if let currentURL, let server = database.server(url: currentURL) {
|
|
router.route(to: .roomList(server))
|
|
} else if database.servers().count == 1, let server = database.servers().first {
|
|
router.route(to: .roomList(server))
|
|
} else {
|
|
router.route(to: .serverList)
|
|
}
|
|
}
|
|
}
|