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

49 lines
1.1 KiB
Swift

import SwiftUI
struct AppView: View {
@Dependency private var database: Database
@Dependency private var serversDB: ServersDatabase
@Dependency private var stateProvider: StateProviding
@StateObject private var router: AppRouter
init(router: AppRouter) {
_router = StateObject(wrappedValue: router)
}
var body: some View {
NavigationStack {
switch router.route {
case .loading:
ProgressView()
case .roomList(let server):
RoomListView(server: server)
.environment(\.managedObjectContext, database.viewContext)
case .serverList:
ServerListView()
.environment(\.managedObjectContext, serversDB.viewContext)
}
}
.onChange(of: router.route) { newValue in
switch newValue {
case .roomList(let server):
stateProvider.update(to: .loggedIn(server))
case .serverList, .loading:
stateProvider.update(to: .loggedOut)
}
}
.onAppear {
loadRoute()
}
}
private func loadRoute() {
switch stateProvider.state {
case .loggedIn(let server):
router.route(to: .roomList(server))
case .loggedOut:
router.route(to: .serverList)
}
}
}