Files
RouterOS/RouterOSAssistant/Features/Wizard/Steps/Setup/SetupView.swift
T
KayandClaude Sonnet 5 16706d5c6b M21: Zweisprachigkeit (DE/EN) auf alle fünf Tabs ausgerollt
Einrichten-Wizard (alle sieben Schritte), Übersicht, LAN-Scanner,
Sicherungen laufen jetzt über L10n.t statt fester deutscher
String-Literale — Experte- und Verbinden-Tab waren bereits vorher
umgestellt (M16/M17). Model-Layer-Strings werden am Verwendungsort
gewrappt, ViewModel-generierte Laufzeitstrings (Fehlermeldungen,
CLI-Zeilen, Log) bleiben bewusst unübersetzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 08:31:08 +02:00

59 lines
2.5 KiB
Swift

import SwiftUI
struct SetupView: View {
@ObservedObject var connectionService: ConnectionService
@StateObject private var viewModel: SetupViewModel
@AppStorage("appLanguage") private var appLanguage: String = "de"
init(connectionService: ConnectionService) {
self.connectionService = connectionService
_viewModel = StateObject(wrappedValue: SetupViewModel(connectionService: connectionService))
}
var body: some View {
NavigationStack {
Group {
if connectionService.credentials == nil {
ContentUnavailableView(
LocalizedStringKey(L10n.t("Nicht verbunden", appLanguage)),
systemImage: "network.slash",
description: Text(L10n.t("Verbinde dich zuerst im Tab \"Verbinden\" mit deinem Router.", appLanguage))
)
} else {
switch viewModel.step {
case .mode:
ModeStepView(viewModel: viewModel)
case .wan:
WanStepView(viewModel: viewModel, availableInterfaces: configurableInterfaces)
case .lan:
LanStepView(viewModel: viewModel, availableInterfaces: configurableInterfaces)
case .vlan:
VlanStepView(viewModel: viewModel, availableInterfaces: configurableInterfaces)
case .wifi:
WifiStepView(viewModel: viewModel)
case .firewall:
FirewallStepView(viewModel: viewModel)
case .review:
ReviewApplyView(viewModel: viewModel, credentials: connectionService.credentials)
}
}
}
}
.onAppear {
viewModel.prepareDefaults(from: configurableInterfaces)
}
}
/// Loopback is never something a person should pick as WAN/LAN/VLAN base interface —
/// excluded here (not just via defaults) so a parsing hiccup elsewhere can't offer it as
/// a selectable option, which on a real hEX device caused every WAN/firewall command to
/// silently reference "lo" instead of the real WAN port. Found via live testing.
private var configurableInterfaces: [NetworkInterface] {
connectionService.interfaces.filter { $0.type.lowercased() != "loopback" }
}
}
#Preview {
SetupView(connectionService: ConnectionService())
}