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

46 lines
1023 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 {
switch router.route {
case .loading:
ProgressView()
case .roomList(let server):
LoggedInView(server: server)
case .serverList:
ServerListView()
.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)
}
}
}