Selector-UI: Anlegen und Öffnen #8
Notifications
Due Date
No due date set.
Depends on
#2 Nativer Ordner-Dialog unter Dioxus 0.7 Desktop
RDietermann/dionotes-client
#4 Dateiformate: App-Konfiguration und .dionotes-Marker
RDietermann/dionotes-client
Reference: RDietermann/dionotes-client#8
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #1
Question
Wie sehen die beiden Selector-Screens konkret aus?
layout.cssgibt den Rahmen bereits vor: zentriert,.workspace-selector-linksals Reiterleiste, darunter.workspace-selector-viewals Karte mit max. 34rem Breite. Die beiden RoutenNewWorkspaceundOpenWorkspacesind heute leeredivs.Zu klären ist, was in die Karte gehört:
Als HITL-Prototyp gedacht: eine grobe, wegwerfbare Fassung über das
/prototype-Skill, an der sich entscheiden lässt, wie es sich anfühlt. Die vorhandenen KomponentenCustomButton,CustomInputundCustomLinksind da.Zielgröße: ein Prototyp, verlinkt an diesem Ticket, plus die daran getroffenen Entscheidungen.
Antwort
Variante B gewinnt: ein Bildschirm, die Liste führt, das Hinzufügen ist Nebenaktion.
Drei Varianten standen zur Wahl — A (Reiter, wie der heutige Code sie anlegt), B (eine Ansicht, Liste dominiert), C (zweispaltiger Startbildschirm nach Art von JetBrains/VS Code). Prototyp und Umschalter liegen auf dem Branch
prototype/selector-ui.Der Aufbau
Maximal 40rem breit, zentriert. Die Liste scrollt, Kopf- und Fußzeile stehen fest.
Listeneintrag: Name (der Ordnername) in der ersten Zeile, vollständiger Pfad darunter in der Code-Schrift und gedämpft, rechts bei Bedarf das Statusabzeichen. Der Pfad wird bei Überlänge links gekürzt (
direction: rtl), weil das Ende eines Pfades mehr aussagt als sein Anfang.Statusabzeichen in den drei Farben des Design-Systems:
nicht erreichbarin Warnfarbe,kein Workspace mehrgedämpft,beschädigtin Gefahrfarbe. Der Name betroffener Einträge wird abgeschwächt, der Eintrag bleibt anklickbar — ein Klick versucht es erneut (siehe #6).Leerer Erststart: Die Liste weicht einem
.empty-state(„Hier ist noch nichts / Der erste Workspace ist ein Ordner deiner Wahl"), und der Fußzeilenknopf wird zur Primäraktion (.btn-primary). Sonst bleibt er ein normaler.btn. Das ist der einzige Unterschied zwischen den beiden Zuständen — kein eigener Bildschirm.Rückfrage bei nicht-leerem Ordner als modaler Dialog, wie in #6 festgelegt. Er nennt die Zahl der vorhandenen Dateien und sagt ausdrücklich, dass nur
.dionotes/angelegt und nichts Vorhandenes verändert wird — die Rückfrage soll informieren, nicht beunruhigen.Warum B
Öffnen ist der Alltagsfall, Hinzufügen passiert pro Workspace genau einmal. Reiter stellen beide gleichrangig nebeneinander und verlangen bei jedem Start eine Entscheidung, die in 95 % der Fälle dieselbe ist. C hat denselben Vorzug wie B, kauft ihn aber mit einer festen zweiten Spalte, die außer einem Knopf und dem Markennamen nichts trägt — viel Fläche für wenig Inhalt bei einem Bildschirm, der laut
layout.css„genau eine Aufgabe" hat.Die Beschriftung
„Workspace hinzufügen…", nicht „Ordner wählen…" oder „Neuen anlegen…".
Der Knopf ist der einzige Weg zu einem Ordner-Dialog und deckt zwei Fälle zugleich ab: einen neuen Workspace anlegen und einen bestehenden wieder aufnehmen, der nicht mehr in der Liste steht — möglich geworden durch #6, wo ein bereits vorhandener Workspace geöffnet statt abgelehnt wird. „Neuen anlegen…" wäre für den zweiten Fall falsch. Gegen „Ordner wählen…" spricht, dass es den mechanischen Zwischenschritt beschreibt statt das Ziel des Nutzers.
Folge für #5: der Selector wird eine einzige Route
Ohne Reiter gibt es keinen Grund mehr für zwei Selector-Routen.
NewWorkspace {}undOpenWorkspace {}verschmelzen zu einer Route; die in #5 vorgeschlagene KonstanteSELECTOR_TABSentfällt ersatzlos, ebenso die CSS-Klasse.workspace-selector-linksund die Tab-Komponente.Das Routen-Enum aus #5 wird damit zu:
Nebeneffekt: Der Pflegepunkt, den ich in #5 offen ausweisen musste — dass der Compiler nicht erzwingt, eine neue Route ins passende Tab-Array einzutragen — löst sich für den Selector auf.
EDITOR_TABSbleibt bestehen und behält den Vorbehalt.Der Selector braucht auch kein
#[layout]mehr: Er ist der Bildschirm, es gibt keinen Outlet-Inhalt, der umschaltet.