Files
RouterOS/RouterOSAssistant/Features/Wizard/Steps/Setup/WifiStepView.swift
T
KayandClaude Sonnet 5 9d1aecc452 Tooltips für alle Konfigurationsfelder + wählbarer Backup-Ordner
.help(...)-Tooltips auf jedem Eingabefeld/Picker/Toggle in Connect-
sowie allen Einrichten-Schritten (WAN/LAN/VLAN/WLAN/Firewall) --
kurze Erklärung was der Wert bedeutet und welche Auswirkung er hat,
passend zum Laien-Anspruch der App.

Sicherungen-Tab: Speicherort jetzt änderbar (Ordner wählen über
nativen macOS-Dialog, Zurücksetzen auf Standard). BackupService hält
den gewählten Pfad in UserDefaults (BackupService.customDirectoryURL),
fällt ohne Auswahl weiter auf ~/Library/Application Support/... zurück.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HReLXMbmPvtQ23p1iWiJNW
2026-09-12 20:30:22 +02:00

58 lines
2.3 KiB
Swift

import SwiftUI
struct WifiStepView: View {
@ObservedObject var viewModel: SetupViewModel
var body: some View {
Form {
if viewModel.wifiNetworks.isEmpty && viewModel.unsupportedWifiInterfaces.isEmpty {
Section {
Text("An diesem Gerät wurde kein WLAN erkannt. Dieser Schritt wird übersprungen.")
.foregroundStyle(.secondary)
}
}
if !viewModel.unsupportedWifiInterfaces.isEmpty {
Section {
Text(
"Dein Gerät nutzt den neueren RouterOS-WiFi-Treiber (\(viewModel.unsupportedWifiInterfaces.map(\.name).joined(separator: ", "))), "
+ "den diese App noch nicht unterstützt. WLAN muss dafür vorerst manuell über Winbox eingerichtet werden."
)
.font(.caption)
.foregroundStyle(.secondary)
}
}
ForEach($viewModel.wifiNetworks) { $network in
Section("WLAN auf \(network.interfaceName)") {
Toggle("Aktivieren", isOn: $network.enabled)
.help("Schaltet WLAN auf diesem Funkmodul ein und vergibt Netzwerkname und Passwort.")
if network.enabled {
TextField("Netzwerkname (SSID)", text: $network.ssid)
.help("Der Name, den Geräte in ihrer WLAN-Liste sehen und mit dem sie sich verbinden.")
SecureField("Passwort (mind. 8 Zeichen)", text: $network.password)
.help("Das WLAN-Passwort (WPA2). Muss mindestens 8 Zeichen lang sein.")
}
}
}
Section {
HStack {
Button("Zurück") { viewModel.goBack() }
Spacer()
Button("Weiter") { viewModel.goNext() }
.disabled(!isStepValid)
}
}
}
.formStyle(.grouped)
.navigationTitle("WLAN (falls vorhanden)")
}
private var isStepValid: Bool {
viewModel.wifiNetworks.allSatisfy { network in
!network.enabled || (!network.ssid.isEmpty && network.password.count >= 8)
}
}
}