49 lines
1.1 KiB
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)
|
|
}
|
|
}
|
|
}
|