Migrate frontend navigation to V3: archive Navigation V2, implement updated screen-tree and back-stack rules, and adapt documentation for startable MVP flow.
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
---
|
||||
type: Frontend
|
||||
status: ACTIVE
|
||||
owner: 🎨 Frontend Expert & 🧹 Curator
|
||||
last_update: 2026-04-02
|
||||
sources:
|
||||
- docs/06_Frontend/Navigation_Routing_Diagramm.md
|
||||
- docs/02_Guides/Event-First-Workflow.md
|
||||
- docs/99_Journal/2026-04-02_Meldestelle_Besprechung_Session-Log.md
|
||||
replaces: docs/06_Frontend/Navigation_V2_Screen-Baum_und_Back-Stack.md
|
||||
---
|
||||
|
||||
# Navigation V3 — Screen‑Baum & Back‑Stack‑Regeln (jetzt gültig)
|
||||
|
||||
Dieses Dokument beschreibt die jetzt gültige, startfähige Fassung der Desktop‑App Navigation (Compose Multiplatform, MVP‑Stand ohne erzwungenen Login/Ping).
|
||||
|
||||
---
|
||||
|
||||
## 1. Screen‑Baum (Routen)
|
||||
|
||||
- AppRoot
|
||||
- MainShell (ohne Login/Ping)
|
||||
- Veranstaltungen (Tab‑Root)
|
||||
- Veranstaltung.Detail(eventId)
|
||||
- Turnier.Detail(tournamentId)
|
||||
- Bewerb.Detail(contestId)
|
||||
- Abteilung.Detail(divisionId)
|
||||
- Startliste(divisionId)
|
||||
- Kassa.Turnier(tournamentId)
|
||||
- Kassa.Veranstaltung(eventId)
|
||||
- StammdatenImport (Tab‑Root)
|
||||
- Reiter (Tab‑Root, Placeholder)
|
||||
- Pferde (Tab‑Root, Placeholder)
|
||||
- Funktionaere (Tab‑Root, Placeholder)
|
||||
- Meisterschaften (Tab‑Root, Placeholder)
|
||||
- Cups (Tab‑Root, Placeholder)
|
||||
|
||||
Hinweise:
|
||||
- Fachliche Struktur folgt dem Event‑First‑Workflow: Veranstaltung → Turnier → Bewerb → Abteilung. Abteilung ist kleinste ausführbare Einheit.
|
||||
- Kassen‑Screens existieren getrennt für Turnier und Veranstaltung (Terminologie gemäß Ubiquitous Language).
|
||||
|
||||
---
|
||||
|
||||
## 1a. Haupt‑Shell (Abfragen, Status & Einstieg)
|
||||
|
||||
Quellen: `frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/DesktopApp.kt`,
|
||||
`frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/screens/layout/DesktopMainLayout.kt`,
|
||||
`frontend/shells/meldestelle-desktop/src/jvmMain/kotlin/at/mocode/desktop/navigation/DesktopNavigationPort.kt`
|
||||
|
||||
- Einstieg/Startzustand
|
||||
- Start‑Screen in der Desktop‑Shell ist `AppScreen.Onboarding` (siehe `DesktopNavigationPort`, Initialwert und `DesktopApp` Login‑Gate).
|
||||
- Onboarding setzt im MVP ein Dummy‑Token via `AuthTokenManager.setToken(...)` und leitet in `VeranstaltungVerwaltung` weiter.
|
||||
- Kein erzwungener Login im MVP: `DesktopApp` erlaubt zentrale Screens ohne Auth, Login‑Route existiert weiterhin optional.
|
||||
|
||||
- TopBar (Breadcrumb)
|
||||
- Zeigt kontextabhängige Breadcrumbs (Verwaltung → Veranstalter → Veranstaltung → Turnier ...), inkl. Klick‑Navigation auf Eltern.
|
||||
- Kein Logout‑Button im MVP (auf Kundenwunsch entfernt).
|
||||
|
||||
- Content (Screens)
|
||||
- Zentrale Verwaltung: `VeranstaltungVerwaltungV2` mit Navigations‑Callbacks zu Profilen, Import, Reiter/Pferde/Funktionäre/Vereine.
|
||||
- Ping‑Screen existiert (`PingScreen`/`PingViewModel`), ist aber kein Einstiegspunkt und wird nicht automatisch abgefragt.
|
||||
|
||||
- Footer/Statusleiste (`DesktopFooterBar`)
|
||||
- Zeigt Online/Offline‑Status (MVP: Stub‑State), Geräte‑Verbindungsstatus inkl. Gerätename „Richter‑Turm“ (Stub) und Chat‑Trigger, wenn Gerät verbunden.
|
||||
- Dient rein der Anzeige; keine Navigations‑Einträge im Back‑Stack.
|
||||
|
||||
- Validierungs‑Hinweise
|
||||
- Bei inkonsistentem Kontext (z. B. IDs nicht vorhanden) wird ein `InvalidContextNotice` mit Rücksprung angeboten.
|
||||
|
||||
---
|
||||
|
||||
## 2. Navigations‑Konventionen
|
||||
|
||||
- Route IDs: stabile, serialisierbare IDs (`eventId`, `tournamentId`, `contestId`, `divisionId`).
|
||||
- SingleTop/SingleTask je Tab: erneuter Klick auf einen Tab bringt zum jeweiligen Tab‑Root, Stack bleibt je Tab erhalten.
|
||||
- Hierarchischer Drilldown (Parent → Child). „Zurück“ führt jeweils eine Ebene hoch.
|
||||
- Deep Links: `app://event/{eventId}/tournament/{tId}/contest/{cId}/division/{dId}` öffnen direkt die Abteilung; Eltern werden synthetisch für den Back‑Pfad aufgebaut.
|
||||
|
||||
---
|
||||
|
||||
## 3. Back‑Stack‑Regeln (V3)
|
||||
|
||||
1) App‑Start
|
||||
- Startet in MainShell → Tab „Veranstaltungen“.
|
||||
|
||||
2) Wechsel Tab → Tab
|
||||
- Eigener Stack je Tab; Wechsel speichert und restauriert den jeweiligen Stack (SingleTask je Tab).
|
||||
|
||||
3) Navigieren innerhalb „Veranstaltungen“
|
||||
- Veranstaltungen (Liste) → Veranstaltung.Detail → Turnier.Detail → Bewerb.Detail → Abteilung.Detail → Startliste.
|
||||
- „Zurück“ springt exakt eine Ebene zurück; beim Verlassen von Startliste zurück zur Abteilung.
|
||||
|
||||
4) Kassa öffnen
|
||||
- Von Turnier.Detail zu Kassa.Turnier: Push auf Stack, Back kehrt zu Turnier.Detail zurück.
|
||||
- Von Veranstaltung.Detail zu Kassa.Veranstaltung: Push auf Stack, Back kehrt zu Veranstaltung.Detail zurück.
|
||||
|
||||
5) Override‑Dialoge (Regelwerk)
|
||||
- Modal/Sheet, kein eigener Stack‑Eintrag. Schließen kehrt zum aktuellen Screen zurück. Override‑Events werden protokolliert.
|
||||
|
||||
6) Auth/Logout (MVP)
|
||||
- Kein erzwungener Login; Logout‑Sonderregeln aus V2 sind im MVP nicht aktiv. Bei späterer Aktivierung gelten die bisherigen Regeln (MainShell‑Stack leeren, zurück zum Entry).
|
||||
|
||||
---
|
||||
|
||||
## 4. Zustandsmanagement
|
||||
|
||||
- Screens sind UDF/MVVM‑kompatibel (Details separat dokumentiert).
|
||||
- Navigation‑State kann optional `returnTo` für spätere Login‑Flows halten; im MVP ohne Wirkung.
|
||||
|
||||
---
|
||||
|
||||
## 5. Edge‑Cases & Tests
|
||||
|
||||
- Abteilungswechsel: Beim Wechsel der Abteilung innerhalb eines Bewerbs bleibt der Stack auf Bewerb‑Ebene erhalten; nur das Abteilung‑Detail wird ersetzt.
|
||||
- Datenverlust vermeiden: Vor Navigation prüfen, ob ungespeicherte Änderungen vorliegen (z. B. Kassa‑Buchung), ggf. Confirm‑Dialog.
|
||||
- Deep‑Link Pfadaufbau: synthetische Eltern korrekt in den Back‑Pfad einhängen.
|
||||
|
||||
---
|
||||
|
||||
## 6. Querverweise
|
||||
|
||||
- Routing‑Diagramm: `docs/06_Frontend/Navigation_Routing_Diagramm.md`
|
||||
- Event‑First‑Workflow: `docs/02_Guides/Event-First-Workflow.md`
|
||||
- Begriffe: `docs/03_Domain/01_Glossary/Ubiquitous_Language.md`
|
||||
- Analyse/Begründung: `docs/06_Frontend/Reports/2026-04-02_Navigation_Versionierung_Analyse_V2_vs_V3.md`
|
||||
Reference in New Issue
Block a user