import SwiftUI /// Der allererste Bildschirm: Wo steht dein Certain? /// /// Die Adresse wird nicht blind übernommen, sondern mit `GET /api/version` /// geprüft. Das erspart die Sorte Fehlersuche, bei der man sich eine Stunde /// fragt, warum die Anmeldung nicht geht, und am Ende ein Buchstabe fehlte. struct ServerAnsicht: View { @Environment(AppZustand.self) private var zustand @State private var eingabe = "" @FocusState private var imFeld: Bool var body: some View { NavigationStack { Form { Section { TextField(String(localized: "server.platzhalter"), text: $eingabe) .textContentType(.URL) .keyboardType(.URL) .textInputAutocapitalization(.never) .autocorrectionDisabled() .focused($imFeld) .submitLabel(.go) .onSubmit { pruefe() } } header: { Text(String(localized: "server.ueberschrift")) } footer: { Text(String(localized: "server.erklaerung")) } if let meldung = zustand.meldung { Section { Label(meldung, systemImage: "exclamationmark.triangle") .foregroundStyle(.red) } } Section { Button(action: pruefe) { if zustand.beschaeftigt { ProgressView() } else { Text(String(localized: "server.verbinden")) } } .disabled(eingabe.trimmingCharacters(in: .whitespaces).isEmpty || zustand.beschaeftigt) } } .navigationTitle(String(localized: "server.titel")) .onAppear { imFeld = true } } } private func pruefe() { Task { _ = await zustand.pruefeUndMerkeServer(eingabe) } } }