65 lines
2.2 KiB
Swift
65 lines
2.2 KiB
Swift
import SwiftUI
|
||
|
||
struct RouteSelectionView: View {
|
||
@EnvironmentObject var appState: AppState
|
||
@Environment(\.dismiss) private var dismiss
|
||
|
||
@State private var routes: [Route] = []
|
||
@State private var isLoading = true
|
||
|
||
var body: some View {
|
||
VStack {
|
||
if isLoading {
|
||
ProgressView(
|
||
appState.selectedLanguage == "ru" ? "Загрузка маршрутов..." :
|
||
appState.selectedLanguage == "zh" ? "正在加载路线..." :
|
||
"Loading routes..."
|
||
)
|
||
.padding()
|
||
} else {
|
||
List(routes, id: \.id) { route in
|
||
Button(action: {
|
||
appState.selectedRoute = route
|
||
dismiss()
|
||
}) {
|
||
HStack {
|
||
Text("\(route.routeNumber)")
|
||
.font(.headline)
|
||
}
|
||
.padding(.vertical, 8)
|
||
}
|
||
}
|
||
.listStyle(PlainListStyle())
|
||
}
|
||
}
|
||
.navigationTitle(
|
||
appState.selectedLanguage == "ru" ? "Выберите маршрут" :
|
||
appState.selectedLanguage == "zh" ? "选择路线" :
|
||
"Select route"
|
||
)
|
||
.onAppear {
|
||
Task {
|
||
await fetchRoutes()
|
||
}
|
||
}
|
||
.onChange(of: appState.selectedLanguage) { _ in
|
||
// просто перерисовываем view, navigationTitle автоматически обновится
|
||
}
|
||
}
|
||
|
||
private func fetchRoutes() async {
|
||
isLoading = true
|
||
defer { isLoading = false }
|
||
|
||
guard let url = URL(string: "https://white-nights.krbl.ru/services/content/route") else { return }
|
||
|
||
do {
|
||
let (data, _) = try await URLSession.shared.data(from: url)
|
||
let fetchedRoutes = try JSONDecoder().decode([Route].self, from: data)
|
||
routes = fetchedRoutes
|
||
} catch {
|
||
print("Ошибка загрузки маршрутов: \(error)")
|
||
}
|
||
}
|
||
}
|