meldestelle/docs/06_Frontend/Guidelines/Editier-Formulare_Dialog-vs-Fullscreen_v1.md
Stefan Mogeritsch 52f2a54e0b feat(docs): finalize editing forms guideline and define empty state specification
- Marked `Editier-Formulare_Dialog-vs-Fullscreen_v1.md` as APPROVED with finalized mapping for all edit screens.
- Created `Empty-States_Spezifikation_v1.md` to outline design, behavior, and implementation plan for empty states across 10 screens.
- Logged session outcomes in `2026-04-03_UIUX_B1_B4_Editier-Formulare_Empty-States_Curator_Log.md`.
- Updated `UIUX_Roadmap.md` to reflect Sprint B completion and tasks for Sprint C-1.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
2026-04-03 11:54:44 +02:00

11 KiB
Raw Blame History

type status owner reviewed_by last_update related
Frontend Guideline APPROVED 🖌️ UI/UX Designer 🎨 Frontend Expert 2026-04-03
docs/06_Frontend/Navigation_V3_Screen-Baum_und_Back-Stack.md
docs/04_Agents/Roadmaps/UIUX_Roadmap.md

Entscheidungsrichtlinie — Editier-Formulare

Ziel: Klare, implementierbare Regeln, wann wir ein Edit als AlertDialog, als dedizierten Fullscreen oder als Sliding Panel (Modal Bottom/Side Sheet) umsetzen. Grundlage: Navigation V3, HighDensity Desktop UX, OfflineFirst.

Leitsatz: Kontext bewahren, kognitive Last minimieren, sichere Eingaben (Undo/Cancel) bevorzugen.


TL;DR — Entscheidungsmatrix

  • AlertDialog (modal, klein)

    • Felder: ≤ 3 (einfache Felder: Text, Toggle, Single Select)
    • Keine abhängigen Validierungen/AsyncLaden
    • Sofortige Aktion, geringe Tragweite, seltene Nutzung
    • Dauer des Vorgangs < 20 s
    • BackStack: kein Eintrag (Schließen kehrt zum UrsprungsScreen)
  • Sliding Panel (Side/Bottom Sheet)

    • Felder: 38, mittlere Komplexität, evtl. Sektionen
    • Kontext muss sichtbar bleiben (Liste/Detail im Hintergrund relevant)
    • Leichte Abhängigkeiten erlaubt (z. B. abhängige Selects), klare InlineValidierung
    • Dauer 2060 s
    • BackStack: kein Eintrag; Reopen über denselben Trigger
  • Fullscreen Edit (eigener Screen)

    • Felder: > 8 oder mehrere Sektionen/Steps
    • Starke Abhängigkeiten, Validierungen, asynchrone Daten (z. B. Lookup Reiter/Pferd)
    • Kritische Aktion mit größerer Tragweite (z. B. Stammdatenänderung)
    • Benötigt volle TastaturFokusstrecke, Hotkeys, Review/Preview
    • Dauer > 60 s
    • BackStack: eigener Eintrag; Zurück führt sicher zurück, UnsavedChangesGuard aktiv

Hinweis: Auf Desktop bevorzugen wir Side Sheet (rechts) als „KontextErhalt bei mittlerer Komplexität“.


Do/Dont (Auszug)

  • Dont: Mehr als 3 Eingabefelder in AlertDialogs stapeln → führt zu Scrollen/Übersehen.
  • Do: Kurze Bestätigungen/Umbenennen/Flag toggeln als Dialog lösen.
  • Dont: AsyncSuchfelder im Dialog (z. B. ReiterLookup) → Side Sheet oder Fullscreen.
  • Do: UnsavedChanges vor Navigation abfangen (ConfirmDialog, kein StackEintrag für Modal/Sheet; V3Regel).

Beispiel A — Reiter bearbeiten (Side Sheet empfohlen)

Kontext: Edit von Stammdaten, typ. 47 Felder (Name, Lizenzklasse, Verein, Notizen, aktiv). Liste/Detail im Blick behalten (Suche, Auswahl vergleichen).

ASCIIWireframe (Desktop, Right Side Sheet ~420520 px):

┌──────────────────────────── AppContent (z. B. ReiterListe) ────────────────────────────┐┌───────────── Side Sheet ─────────────┐
│  Suche  [__________]   Filter [v]                                                ▢ ✕   ││  Reiter bearbeiten                 ✕ │
│───────────────────────────────────────────────────────────────────────────────────────││──────────────────────────────────────│
│  ▸ Mayer, Anna   | Lizenz B  | Verein X                                            ││  Name             [ Anna Mayer     ] │
│  ▸ König, Tom    | Lizenz A  | Verein Y                                            ││  Lizenzklasse     [ A   v ]          │
│  ▸ …                                                                               ││  Verein           [ Suche… 🔎 ]       │
│                                                                                     ││  Aktiv            [ ✓ ]              │
│                                                                                     ││  Notizen          [ ............. ] │
│                                                                                     ││                                      │
│                                                                                     ││  ← Abbrechen            Speichern → │
└─────────────────────────────────────────────────────────────────────────────────────┘└──────────────────────────────────────┘

Interaktion:

  • Öffnen: Button „Bearbeiten“ in Zeile/Karte → Side Sheet schiebt von rechts ein.
  • Validierung inline; VereinLookup als SuchDropDown (debounced, OfflineCache).
  • Schließen: ESC/✕/Abbrechen; bei Änderungen ConfirmDialog (UnsavedChangesGuard).

Beispiel B — Pferd bearbeiten (Fullscreen empfohlen)

Kontext: Mehr Felder und Abhängigkeiten (Name, Jahrgang, Geschlecht, Rasse, Besitzer/Verein, RegistrierNrn., Notizen). Teilweise Lookups, ggf. Bild.

ASCIIWireframe (Dedicated Screen):

TopBar: ← Pferd bearbeiten                                [Abbrechen]   [Speichern]
Breadcrumb: Reiter & Pferde > Pferd.Detail > Edit

┌─ MeldestelleCard: Stammdaten ───────────────────────────────────────────────────────┐
│ Name             [ ....................... ]   Jahrgang [ 20__ ]  Geschlecht [v]    │
│ Rasse            [ ....................... ]   Farbe    [ ..... ]                    │
│ RegistrierNr.   [ ....................... ]   ChipNr. [ ..... ]                    │
└──────────────────────────────────────────────────────────────────────────────────────┘

┌─ MeldestelleCard: Zuordnung ────────────────────────────────────────────────────────┐
│ Besitzer         [ Suche Person/Verein 🔎 ]   Verein [ Suche Verein 🔎 ]             │
│ Lizenzzuordnung  [ None v ] (InfoBadge zu Regeln)                                   │
└──────────────────────────────────────────────────────────────────────────────────────┘

┌─ Notizen ────────────────────────────────────────────────────────────────────────────┐
│ [ Mehrzeiliges Textfeld ………………………………………… ]                                             │
└──────────────────────────────────────────────────────────────────────────────────────┘

Interaktion:

  • Eigener Screen mit vollem TastaturSupport, FokusReihenfolge, Hotkeys (Ctrl+S speichert).
  • UnsavedChangesGuard auf Back/Navi, Validierung vor Speichern, Fehler an Feldern.

Komponenten & States (für Frontend)

  • Reusable: MeldestelleCard, SectionHeader, FormRow, PrimaryButton, SecondaryButton, StatusBadge.
  • Validation: Inline (per Field), Summary oben optional; Disabled Save wenn kritisch.
  • Loading: PerField Spinner bei Lookups; Gesamtscreen nie blockieren.
  • Accessibility: TabOrder, sichtbare FokusRinge, Labels neben/über Feldern (Dichte abhängig).

Navigation & BackStack (V3Konformität)

  • Dialog/Sheet: Kein eigener StackEintrag; Schließen führt zum UrsprungsScreen zurück.
  • Fullscreen: Eigener StackEintrag. DeepLink baut synthetische Eltern auf (siehe V3).
  • Vor Navigation prüfen: UnsavedChanges → ConfirmDialog.

Entscheidung als Regel (pseudocode)

if fieldCount <= 3 and complexity == low and noAsyncLookups:
    use AlertDialog
elif 3 < fieldCount <= 8 and complexity in {low, medium} and contextRelevant:
    use SideSheet (preferred on Desktop)
else:
    use FullscreenEdit

Freigabe & Verbindlichkeit

Kriterium Entscheidung
Status APPROVED — verbindliche Design-Richtlinie ab 2026-04-03
Reviewed by 🎨 Frontend Expert (bestätigt durch Implementierung von ReiterProfilEditDialog und PferdProfilEditDialog gemäß Side-Sheet-Muster)
Gültig für Alle Edit-Formulare im Meldestelle-Desktop-MVP
Ausnahmen Müssen explizit im jeweiligen Feature-Ticket begründet und dokumentiert werden
Nächste Review Bei Einführung der Web-App / PWA (andere Interaktionsparadigmen möglich)

Anwendung auf bestehende Screens (Mapping)

Screen / Entity Felder (ca.) Async-Lookup Empfehlung Umgesetzt
Veranstalter Edit 45 Nein Side Sheet (Dialog)
Reiter Edit 57 Ja (Verein) Side Sheet
Pferd Edit 810 Ja (Besitzer) Fullscreen (Dialog — Migration zu Fullscreen empfohlen)
Verein Edit 34 Nein Side Sheet offen
Funktionär Edit 34 Nein Side Sheet offen
Bewerb Edit 68 Ja Side Sheet offen
Turnier Edit 45 Nein Side Sheet offen
Abteilung Edit 34 Nein AlertDialog offen

Hinweis Pferd: Der bestehende PferdProfilEditDialog überschreitet mit 810 Feldern und Async-Lookups die Dialog-Grenze. Migration zu Fullscreen-Edit ist für Sprint C-1 vorgesehen.