Files
RouterOS/RouterOSAssistant/Features/Wizard/Steps/Setup/WanStepView.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

75 lines
3.4 KiB
Swift

import SwiftUI
struct WanStepView: View {
@ObservedObject var viewModel: SetupViewModel
let availableInterfaces: [NetworkInterface]
var body: some View {
Form {
Section("Internet-Anschluss") {
Picker("Anschluss (Port)", selection: $viewModel.wanConfig.interfaceName) {
ForEach(availableInterfaces) { interface in
Text(interface.name).tag(interface.name)
}
}
.help("Der Netzwerkport, über den dein Router mit dem Internet verbunden ist (z.B. das Kabel zu deinem Modem oder deiner Anschlussdose).")
Picker("Verbindungsart", selection: $viewModel.wanConfig.mode) {
ForEach(WanConnectionMode.allCases) { mode in
Text(mode.label).tag(mode)
}
}
.pickerStyle(.inline)
.help("Wie sich der Router beim Internetanbieter anmeldet. \"Automatisch (DHCP)\" passt für die meisten Kabel-/Glasfaseranschlüsse.")
}
switch viewModel.wanConfig.mode {
case .dhcpClient:
Section {
Text("Der Router bezieht seine Internetadresse automatisch von deinem Anbieter. Für die meisten Kabel-/Glasfaser-Anschlüsse die richtige Wahl.")
.foregroundStyle(.secondary)
}
case .staticIP:
Section("Statische Adresse") {
TextField("IP-Adresse (z.B. 203.0.113.5/24)", text: $viewModel.wanConfig.staticAddress)
.help("Die feste IP-Adresse, die dir dein Anbieter zugewiesen hat, inklusive Netzmaske (die Zahl nach dem /, z.B. /24).")
TextField("Gateway (z.B. 203.0.113.1)", text: $viewModel.wanConfig.staticGateway)
.help("Die Adresse des nächsten Geräts Richtung Internet — steht meist in den Unterlagen deines Anbieters.")
}
case .pppoe:
Section("PPPoE-Zugangsdaten") {
TextField("Benutzername", text: $viewModel.wanConfig.pppoeUsername)
.help("Zugangsdaten von deinem Internetanbieter für die Einwahl (z.B. bei DSL-Anschlüssen).")
SecureField("Passwort", text: $viewModel.wanConfig.pppoePassword)
.help("Das zum Benutzernamen gehörende Passwort von deinem Internetanbieter.")
Text("Diese Zugangsdaten bekommst du von deinem Internetanbieter (z.B. Telekom, Vodafone).")
.font(.caption)
.foregroundStyle(.secondary)
}
}
Section {
HStack {
Spacer()
Button("Weiter") { viewModel.goNext() }
.disabled(!isStepValid)
}
}
}
.formStyle(.grouped)
.navigationTitle("Internet einrichten")
}
private var isStepValid: Bool {
guard !viewModel.wanConfig.interfaceName.isEmpty else { return false }
switch viewModel.wanConfig.mode {
case .dhcpClient:
return true
case .staticIP:
return !viewModel.wanConfig.staticAddress.isEmpty
case .pppoe:
return !viewModel.wanConfig.pppoeUsername.isEmpty && !viewModel.wanConfig.pppoePassword.isEmpty
}
}
}