Vom Space zum Item
Это содержимое пока не доступно на вашем языке.
Eine App auf Real Life Stack hat drei Ebenen, und jede beantwortet eine andere Frage. Der Rahmen fragt: Wer bist du, in welchem Space Der gemeinsame Arbeits-, Mitgliedschafts- und Sichtbarkeitskontext. Im Datenvertrag heißt er Group. GlossarSpace The shared context for work, membership and visibility. In the data contract it is called Group. Glossary bist du, welches Modul schaust du an? Der Space fragt: Was gehört hierher, wer gehört dazu? Das Item ist das Ding selbst, ein Termin, ein Ort, eine Aufgabe, ein Beitrag. Die Module dazwischen sind Blickwinkel auf dieselben Items, keine Besitzer.
Probier es am Garten aus: Öffne das Erntefest, wechsle in den Kalender, dann auf die Karte. Es ist dieselbe Adresse, dasselbe Item, dreimal gezeigt.
Ein Gemeinschaftsgarten: Space wählen, Modul wechseln, Item öffnen. Die Beispieldaten sind fiktiv. Änderungen bleiben nur für diese Sitzung.
Der Rahmen
Der Rahmen (AppFrame, in einer App mit Router RoutedAppFrame) ist überall gleich: links der Space-Wechsler, in der Mitte die Tabs der Module, rechts Benachrichtigungen und das Nutzer-Menü; darunter die Fläche des aktiven Moduls und das eine geteilte Panel für Detail, Erstellen und Verlauf. Eine App baut ihn nicht, sie stellt ihn (Spec 01, „Was bei der App bleibt“). Deshalb sieht jede App auf dem Stack an dieser Stelle gleich aus, und deshalb kann das Storybook denselben Rahmen zeigen wie die Apps.
Hell und dunkel entscheidet der Mensch, nicht der Space. Der Knopf dafür rechts in der Kopfzeile ist ColorSchemeToggle aus dem Toolkit. Er setzt die Klasse dark und data-theme am Wurzelelement, merkt eine Wahl je Browser und folgt ohne Wahl der Systemeinstellung, auch wenn die sich später ändert. Damit schon Anmeldung und Ladezeit im richtigen Schema stehen, ruft die App vor allem anderen applyInitialColorScheme() auf. Das Stück, bevor ihr Skript läuft, deckt nur ein Skript im <head> der App ab.
Der Rahmen hält den Fokus: welcher Space, welches Modul, welches Item offen ist, ob es bearbeitet wird. In einer App mit Router steht das in der Adresse (/{space}/{modul}/{item}), in einer Story im Speicher, mit demselben Vertrag. Zurück im Browser schließt das Detail, ein Link auf die Adresse öffnet es.
Der Space
Ein Space ist der Arbeitskontext: eine Gruppe (im Datenmodell Group) mit Mitglied Vorgeschlagen: wer zu einem Space gehört. Die Anwendungsschicht liest Mitgliedschaft über den Connector und konstruiert sie nicht selbst; wie sie gespeichert und belegt wird, entscheidet der jeweilige Connector (der lokale Connector hält sie in groupMembers, der RLTP-Connector leitet sie aus Gruppen-Log und Schlüssel ab). GlossarMember Proposed: who belongs to a space. The application layer reads membership through the connector and does not construct it; how it is stored and proven is decided by the connector in use (the local connector keeps it in groupMembers, the RLTP connector derives it from the group log and key). Glossary, Items und der Liste ihrer Module in Tab-Reihenfolge. Der Space wählt aus dem Register, was er zeigt; er erweitert es nicht (Spec 01). Ein Space „Gemeinschaftsgarten“ kann Kalender, Karte und Liste führen, ein Space „Offene Werkstatt“ nur die Liste. Der persönliche Space ist ein Space wie jeder andere, nur mit einem Mitglied.
Was alle Module eines Space teilen, gehört der Fläche, nicht dem Modul: die Suche, das Vokabular der Tags und Typen, die Filterkarte, die Chips. Deshalb überlebt ein gesetzter Filter den Modulwechsel, und deshalb bietet kein Modul eine eigene Auswahl an, die ein anderes nicht kennt (Spec 01, Regel 2a).
Eine Fläche, die kein Modul unter dem Host ist, etwa ein app-eigenes Brett, filtert genauso, ohne den Filter selbst zusammenzusetzen: In <ModuleSurfaceScope items={…}> gewickelt liest sie useSurfaceItems(); ohne diese Hülle gibt useModuleFilteredItems(items) ihre Liste nach Suche, Tags und Typen gefiltert zurück.
Das Item, zweimal dargestellt
Die Vorschau (ItemPreview) ist die Karte im Feed, in der Liste, im Kanban: erkennen und auswählen. Die Detailansicht ist das ganze Item mit seinen Aktionen und der Diskussion; sie öffnet im geteilten Panel, und es gibt nur dieses eine Panel. Ein zweiter Klick auf ein anderes Item tauscht den Inhalt, er stapelt nicht.
Das eine Panel: Detail, Erstellen und Verlauf tauschen den Inhalt, statt sich zu stapeln. Die Beispieldaten sind fiktiv. Änderungen bleiben nur für diese Sitzung.
Ein Personenprofil Die fachliche Darstellung einer Person als Item nach Profilvertrag. Die User-Identität ist ein eigener Begriff. GlossarPerson profile The domain representation of a person as an item under the profile contract. The user identity is a separate term. Glossary ist dabei kein zweites UI-System. Es ist die Detailansicht eines Items vom Typ Person (Spec 12); „Profil“ nennt den fachlichen Inhalt, nicht eine andere Fläche.
Welche Ebene macht was
- Rahmen: Space, Modul und Fokus halten; Panel, Kopfzeile, Benachrichtigungen, Space-Verwaltung; die drei Navigationsregeln (ein Feld führt in sein Modul, ein Kommentar in seine Diskussion, ein Tag in den Filter).
- Host des Moduls: aus dem Registereintrag herstellen, was das Modul braucht: die Items nach
presents, gefiltert nach Suche und Filter; Mitglieder, Autoren, Farben; Detail, Erstellen, Plusknopf. Ein Modul lädt nichts davon selbst (Spec 01, Regel 2). - Modul: seine Darstellung und seine eigenen Interaktionen, mehr nicht.
- Detailinhalt: Titel, Fakten, Inhalt, passende Aktionen, Kommentare.
- Connector Die Implementierung des DataInterface für eine konkrete Datenquelle, ergänzt um unterstützte Capabilities. Die Steckstelle des Stacks nach unten. GlossarConnector The implementation of the DataInterface for one data source, plus the capabilities it supports. The stack's socket downward. Glossary: lesen, beobachten, erlaubtes Schreiben.
Wer etwas aus einer unteren Ebene in einer oberen wiederfindet, hat einen Fehler gegen die Spec vor sich; das ist die Regel, die alle Apps zusammenhält.
Wo es weitergeht
Im Storybook zeigen RLS → App Register, Host, Ladevertrag, Fokus und Erstellen einzeln, RLS → App shell den Rahmen und seine Teile. Die nächste Seite folgt einem Klick bis in den Connector: Vom Klick zur gemeinsamen Änderung.