diff --git a/.claude/handoffs/2026-10-18-ui-rework-bereichsnavigation.md b/.claude/handoffs/2026-10-18-ui-rework-bereichsnavigation.md new file mode 100644 index 0000000..d2928fd --- /dev/null +++ b/.claude/handoffs/2026-10-18-ui-rework-bereichsnavigation.md @@ -0,0 +1,72 @@ +# Session Handoff: UI-Rework Lösung A (Bereichs-Navigation) + +**Datum:** 2026-10-18 **Projekt:** `R:\CC-Projekte\Mikrotik-Installer` **Commit:** `f2dd7e7` (gepusht nach Gitea `origin`, schließt #72) + +## Aktueller Stand + +**Aufgabe:** Das Interview (lineare Schrittkette mit Bereichswahl) wurde durch eine Seitenleiste mit frei anklickbaren Bereichen ersetzt. +**Phase:** Fertig umgesetzt und gegen die Testumgebung geprüft, noch nicht am echten Router. +**Fortschritt:** 100 % Code und Doku. Die Release-Exe ist noch **nicht** neu gebaut. + +## Was gemacht wurde + +Der Nutzer hat die HTML-Vorschau (Artifact https://claude.ai/artifact/MFPPizmpZjn4LqBsLpdkz7) freigegeben („bau es als lösung a“). Daraufhin wurden `MainViewModel` und `MainWindow` neu geschrieben, die Einrichtungsschritte in einen eigenen Assistenten (`SetupWizardViewModel`) verschoben und Hilfe/Einstellungen von Fenstern zu Seiten umgebaut. README, Handbuch DE/EN und die Übersetzungen (EN/PT) sind nachgezogen. + +## Entscheidungen + +- **Bereiche statt Interview:** Start, Einrichten, Übersicht, Geräte, Backup & Wartung, Experte. Hilfe und Einstellungen stehen unten. Experte ist nur mit „Professioneller Netzwerker“ (`UserSettings.ProfessionalMode`) sichtbar. +- **Ohne Verbindung** zeigt `CurrentPage` die Verbinden-Seite. Die Bereiche sind gesperrt, Hilfe und Einstellungen gehen immer. +- **Pages werden bei jeder Verbindung neu erzeugt** (privater record `Pages` in `MainViewModel`), und `WizardSession.ResetPlan()` setzt den Plan zurück. So wird nichts vom vorherigen Gerät angewendet. +- **Zusammenfassung enthält nur besuchte, gültige Schritte**, weil Schritte jetzt übersprungen werden können. +- **Erneuter Klick auf einen Bereich lädt ihn neu** (`NavigateCommand`). +- **RouterOS-Update** steht jetzt auf der Startseite (`StartViewModel` = Gerät + Update). +- **Einrichten scrollt selbst** (`PageScrolls = false`), weil Zurück/Weiter fest unten stehen. + +## Code-Änderungen (Commit `f2dd7e7`) + +- `src/MikrotikInstaller.App/ViewModels/AppArea.cs`: enum `Start, Setup, Overview, Devices, Backup, Expert, Help, Settings` +- `ViewModels/MainViewModel.cs`: neu. `Connection`, `Area`, `CurrentPage`, `PageTitle`, `PageScrolls`, `ShowExpert`, `NavigateCommand`, `SwitchConnectionCommand`, `QuickConnectCommand`, 30-s-Herzschlag. GoNext/GoBack/Finish/CloseRequested entfernt. +- `ViewModels/SetupWizardViewModel.cs`: neu. Schritte Mode → Wan → Lan → Vlan → Wlan → Firewall → Summary, `StepNavItems` (Haken = besucht), `GoToStepCommand(int)`. +- `ViewModels/StartViewModel.cs`: neu. +- `WizardSession.cs`: `SelectedArea` entfernt, `ResetPlan()` neu. +- Step-ViewModels: `SelectedArea`-Bedingungen aus `ShouldSkip` entfernt. Mode wird ohne ProfessionalMode übersprungen, WLAN ohne WLAN-Hardware. +- `AreaSelectionStepViewModel` und seine View gelöscht. +- `SettingsViewModel`: `Saved`-Event ersetzt durch `StatusMessage` („Gespeichert.“). +- Views: `HelpView.xaml` und `SettingsView.xaml` (vorher Fenster), dazu neu `StartView.xaml` und `SetupWizardView.xaml`. DataTemplates stehen in `App.xaml`. +- `MainWindow.xaml`: `NavItem`-RadioButton-Stil mit `EnumToBooleanConverter`. **Fix:** Der Papierkorb bei bekannten Routern bindet jetzt an `DataContext.Connection.RemoveSavedRouterCommand` (vorher totes Binding). +- Übersetzungen: 12 neue Schlüssel, insgesamt 1007, alle in EN/PT übersetzt. Die alten Schlüssel der Bereichswahl sind entfernt. +- Doku: README (Abschnitt „Bedienung: Bereiche statt Interview“), `docs/Handbuch.md` und `docs/Handbook.en.md` (Kapitel 2 „Bereiche“/„Areas“). + +## Tests + +- Build: 0 Fehler, 0 Warnungen. 209 Core-Tests grün. +- WPF-Smoke-Harness: auf Deutsch alles grün, auf Englisch nur die drei bekannten Fehlschläge durch deutsche Textvergleiche (10-Minuten-Hinweis, Ping, Port-in-Bridge-Plan). +- **Achtung:** Der Harness liegt nur im Session-Scratchpad (`C:\Users\Daniel\AppData\Local\Temp\claude\R--CC-Projekte-Mikrotik-Installer\05e4763f-93ba-4c02-9f0a-a33e13b15aed\scratchpad\wpf-smoke\`) und ist nicht im Repo. Er kann jederzeit verschwinden. Er nutzt die Helfer `ConnectAsync(host)`, `OpenAsync(vm, AppArea)` und `RenderWindow(window, png)` gegen die Demo-Hosts 127.127.127.128/129. +- Der Harness schreibt in die echten AppData-Dateien. Deshalb stehen die Testrouter 127.127.127.127–129 in „Bekannte Router“. Bei Bedarf in der App entfernen. + +## Bekannte Kleinigkeiten + +- Ohne Verbindung erscheint „Start“ in der Seitenleiste gedimmt als ausgewählt (rein optisch). + +## Kontext + +- Gitea `origin` = `ssh://git@192.168.1.222:2222/admin/Mikrotik-Installer.git`, Web http://192.168.1.222:3666. **Nie** nach `github` pushen. `tea` funktioniert (`--repo admin/Mikrotik-Installer`). +- Arbeitsweise: Tests grün → committen → nach origin pushen → README und Doku aktualisieren. +- Antworten auf Deutsch mit Umlauten. +- `found.md` im Projekt-Root ist das lokale Backlog und liegt nicht in Git. +- Vorheriger Handoff: `.claude/handoffs/2026-10-16-mac-abgleich-v1.11.md` (Mac-Abgleich v1.11.4, P1–P42). + +## Nächste Schritte + +1. [ ] Release-Build neu erstellen: `build-release.ps1` → `src\MikrotikInstaller.App\bin\Release\net8.0-windows\win-x64\publish\MikroTik-Installer.exe`. Vorher eine laufende alte Instanz schließen (sperrt die exe). +2. [ ] Neue Oberfläche in EN und PT von Hand durchklicken. +3. [ ] Optional: die gedimmte „Start“-Auswahl ohne Verbindung beheben. +4. [ ] Echtgerät-Prüfung (#71, außerdem #1, #2, #17, #30, #32), wartet auf Hardware. +5. [ ] Entscheidung zu #26 und #20, v1.1-Housekeeping (#3, #4, #5), #18. + +## Dateien zum Einlesen + +- `src/MikrotikInstaller.App/ViewModels/MainViewModel.cs`: Navigation und Verbindungslebenszyklus +- `src/MikrotikInstaller.App/ViewModels/SetupWizardViewModel.cs`: Einrichtungsassistent +- `src/MikrotikInstaller.App/MainWindow.xaml`: Seitenleiste und Inhaltsbereich +- `src/MikrotikInstaller.App/WizardSession.cs`: `ResetPlan()`