meldestelle/docs/06_Frontend/Guidelines/Editier-Formulare_Dialog-vs-Fullscreen_v1.md

8.5 KiB
Raw Blame History

type status owner last_update related
Frontend Guideline DRAFT 🖌️ UI/UX Designer 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

Status: Freigabe durch 🎨 Frontend Expert ausstehend.