Live presence moves into the top navigation (signed-in users only) #102
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#102
Loading…
Reference in New Issue
Block a user
No description provided.
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?
Context
The avatars showing who is live on a page (PresenceStrip) render inside the editor shell above the content. They belong in the top navigation next to the other page-scoped indicators — and must only ever be visible to signed-in users.
Scope
Move the PresenceStrip into the TopBar's page-actions area (only while a page route is active), keeping its behavior: initials avatars with colors, max 5 + "+N" overflow, read-only viewer badge, hidden when empty. Note the current state: presence already exists only behind sign-in (the page route is auth-gated and the public view has no awareness connection) — encode that as a pinned guarantee, not a new mechanism: the public/anonymous read path must stay free of any awareness/presence data, and the component must render nothing without an authenticated session.
Acceptance criteria
Technical notes
collab.provider), mounted at PageEditorPage.tsx:252; the provider lives inside PageEditor, so the TopBar needs the presence data via the same page-actions slot/context as the icon actions.Dependencies
Depends on #101 (the icon-actions TopBar slot).
Size: ~0.5 days
Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add
deanden), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.Umgesetzt in
e740ea6(CI komplett grün).Was drin ist
topbar__presencedirekt neben dem Page-Actions-Slot aus #101 — wie dieser nur für eingeloggte Nutzer überhaupt gerendert.PageEditor(wo der Hocuspocus-Provider lebt) portalt die unverändertePresenceStriphinein: Initialen-Avatare mit Farben, max. 5 + „+N"-Overflow, Viewer-Badge für Read-only-Teilnehmer,nullwenn niemand da ist. Sichtbar in View- UND Edit-Modus (der Provider verbindet in beiden), verschwindet mit dem Seiten-Unmount auf Nicht-Seiten-Routen./collab-WebSocket geöffnet wird (page.on('websocket')) und (b) keinerlei.presence-strip/.presence-avatarrendert.PublicPageViewverbindet weiterhin nie zu collab.Verifiziert: collab.spec (2-Nutzer-Presence: beide Avatare in beiden TopBars, Disconnect entfernt prompt) läuft unverändert grün — die
.presence-avatar-Selektoren greifen am neuen Ort; public.spec mit dem neuen Pin grün; visuell im Browser: eigener Avatar in der TopBar neben den Icons.Damit ist der Milestone „M10 — UI polish" (#99–#102) komplett. Hinweis: Die M10-Änderungen sind noch in keinem Release — das nächste
v*-Tag nimmt sie mit.