Favoriten: Stern in der Aktionsleiste, goldene Baum-Icons, sys-fav-Label, Favoriten-Filterknopf #132

Closed
opened 2026-07-15 16:29:16 +02:00 by fable-5 · 2 comments
Collaborator

Feature (Stefans Wunsch per Chat, 15.07.2026)

Seiten sollen als Favoriten markiert werden können:

  1. Stern-Icon im Lesemodus in der TopBar-Aktionsleiste, zwischen Labels- und Historie-Icon (PageActions.tsx): Nicht-Favorit = normale Icon-Farbe (Outline), Favorit = golden gefüllt (lucide Star mit fill).
  2. Seitenbaum: Bei Favoriten wird das Seiten-/Ordner-Icon (FileText/Folder(Open) aus #122) ebenfalls farblich hervorgehoben (gold).
  3. Speicherung als Label mit Namen sys-fav — bewusst, damit die normale Labelfilterung Favoriten ebenfalls filtern kann. Das Label wird beim ersten Favorisieren je Teich automatisch angelegt (goldene Labelfarbe).
  4. Sidebar-Filterknopf „Favoriten": neben den Ansichts-Buttons „Ordner"/„Labels" ein einrastender Pushbutton (aria-pressed, Muster .sidebar__view-btn), der den Seitenbaum auf Favoriten filtert — zusätzlich zur weiterhin möglichen normalen Labelfilterung.

Konsequenzen/Hinweise für die Planung (aus dem gewählten Label-Ansatz):

  • Labels sind teich-weit: Favoriten sind damit GEMEINSAME Favoriten je Teich, nicht persönliche je Nutzer — und Markieren erfordert Schreibrecht auf die Seite (POST /pages/:id/labels = write). Bewusst so gewünscht (Filter-Wiederverwendung); bei der Planung kurz bestätigen, dass das die gewollte Semantik ist.
  • Das automatische Anlegen des sys-fav-Labels braucht pond_admin (POST /ponds/:id/labels) — ein Editor, der als Erster favorisiert, könnte das Label nicht anlegen. Lösungsoptionen: Anlegen serverseitig im Favoriten-Endpoint/Toggle-Pfad (systemseitig, nicht über die Label-Permission), oder Stern für Nicht-Admins erst aktiv, wenn das Label existiert.
  • Anzeige-Politik für sys-fav entscheiden: Soll das Label als Chip an jeder Favoriten-Zeile und im LabelPicker auftauchen (redundant zum goldenen Icon, potenziell Rausch), oder blenden wir sys--Labels aus Chips/Picker aus und lassen es nur in der Filter-Liste zu? Auch: umbenennen/löschen über die Label-Verwaltung möglich — schützen oder bewusst zulassen?
  • Öffentliche API/MCP: Favoriten erscheinen dort automatisch als Label sys-fav (list_labels, set_page_labels) — Parität gratis, in den Handbüchern kurz erwähnen.
  • i18n de+en (Icon-Hint z. B. „Als Favorit markieren"/„Favorit entfernen", Button „Favoriten"); e2e: Stern-Toggle + goldenes Baum-Icon + Favoriten-Filter in einem Pack (page-tree oder eigener kleiner Pack).
**Feature** (Stefans Wunsch per Chat, 15.07.2026) Seiten sollen als **Favoriten** markiert werden können: 1. **Stern-Icon im Lesemodus** in der TopBar-Aktionsleiste, **zwischen Labels- und Historie-Icon** (`PageActions.tsx`): Nicht-Favorit = normale Icon-Farbe (Outline), Favorit = **golden gefüllt** (lucide `Star` mit fill). 2. **Seitenbaum**: Bei Favoriten wird das Seiten-/Ordner-Icon (`FileText`/`Folder(Open)` aus #122) ebenfalls farblich hervorgehoben (gold). 3. **Speicherung als Label** mit Namen **`sys-fav`** — bewusst, damit die normale Labelfilterung Favoriten ebenfalls filtern kann. Das Label wird beim ersten Favorisieren je Teich automatisch angelegt (goldene Labelfarbe). 4. **Sidebar-Filterknopf „Favoriten"**: neben den Ansichts-Buttons „Ordner"/„Labels" ein **einrastender Pushbutton** (aria-pressed, Muster `.sidebar__view-btn`), der den Seitenbaum auf Favoriten filtert — zusätzlich zur weiterhin möglichen normalen Labelfilterung. **Konsequenzen/Hinweise für die Planung (aus dem gewählten Label-Ansatz):** - Labels sind **teich-weit**: Favoriten sind damit GEMEINSAME Favoriten je Teich, nicht persönliche je Nutzer — und Markieren erfordert Schreibrecht auf die Seite (`POST /pages/:id/labels` = write). Bewusst so gewünscht (Filter-Wiederverwendung); bei der Planung kurz bestätigen, dass das die gewollte Semantik ist. - Das automatische Anlegen des `sys-fav`-Labels braucht `pond_admin` (`POST /ponds/:id/labels`) — ein Editor, der als Erster favorisiert, könnte das Label nicht anlegen. Lösungsoptionen: Anlegen serverseitig im Favoriten-Endpoint/Toggle-Pfad (systemseitig, nicht über die Label-Permission), oder Stern für Nicht-Admins erst aktiv, wenn das Label existiert. - **Anzeige-Politik für `sys-fav`** entscheiden: Soll das Label als Chip an jeder Favoriten-Zeile und im LabelPicker auftauchen (redundant zum goldenen Icon, potenziell Rausch), oder blenden wir `sys-`-Labels aus Chips/Picker aus und lassen es nur in der Filter-Liste zu? Auch: umbenennen/löschen über die Label-Verwaltung möglich — schützen oder bewusst zulassen? - Öffentliche API/MCP: Favoriten erscheinen dort automatisch als Label `sys-fav` (list_labels, set_page_labels) — Parität gratis, in den Handbüchern kurz erwähnen. - i18n de+en (Icon-Hint z. B. „Als Favorit markieren"/„Favorit entfernen", Button „Favoriten"); e2e: Stern-Toggle + goldenes Baum-Icon + Favoriten-Filter in einem Pack (page-tree oder eigener kleiner Pack).
fable-5 added this to the M16 — Papierkorb: Mehrfachauswahl milestone 2026-07-15 16:29:16 +02:00
fable-5 added the
backend
frontend
labels 2026-07-15 16:29:16 +02:00
Author
Collaborator

Planungs-Update (16.07.2026, mit Stefan geklärt): Die Semantik ändert sich gegenüber der Issue-Beschreibung — Favoriten sind persönlich je Nutzer, nicht teich-weit. Der sys-fav-Label-Ansatz entfällt damit komplett (kein Label, keine Chips/Picker-Fragen, kein Schutz nötig, keine Label-Filter-Wiederverwendung).

Neuer Plan:

  • Serverseitige Speicherung je Nutzer (neue Tabelle page_favorites, userId+pageId), Toggle-Endpoint am Seiten-Pfad; Anlage passiert implizit im Toggle (Stefans Wahl „serverseitig im Toggle" aus der Rückfrage, sinngemäß übertragen).
  • UI unverändert wie beschrieben: Stern in PageActions zwischen Labels und Historie (golden gefüllt bei Favorit), goldene Icons im Seitenbaum, einrastender „Favoriten"-Filterknopf neben Ordner/Labels — nur eben pro Nutzer.
  • Öffentliche API/MCP: keine automatische Parität mehr über Labels; persönliche Favoriten bleiben vorerst UI-only (PAT-gebundene Exposition ggf. später).
**Planungs-Update (16.07.2026, mit Stefan geklärt):** Die Semantik ändert sich gegenüber der Issue-Beschreibung — Favoriten sind **persönlich je Nutzer**, nicht teich-weit. Der `sys-fav`-Label-Ansatz entfällt damit komplett (kein Label, keine Chips/Picker-Fragen, kein Schutz nötig, keine Label-Filter-Wiederverwendung). Neuer Plan: - Serverseitige Speicherung je Nutzer (neue Tabelle `page_favorites`, `userId`+`pageId`), Toggle-Endpoint am Seiten-Pfad; Anlage passiert implizit im Toggle (Stefans Wahl „serverseitig im Toggle" aus der Rückfrage, sinngemäß übertragen). - UI unverändert wie beschrieben: Stern in `PageActions` zwischen Labels und Historie (golden gefüllt bei Favorit), goldene Icons im Seitenbaum, einrastender „Favoriten"-Filterknopf neben Ordner/Labels — nur eben pro Nutzer. - Öffentliche API/MCP: keine automatische Parität mehr über Labels; persönliche Favoriten bleiben vorerst UI-only (PAT-gebundene Exposition ggf. später).
Author
Collaborator

Umgesetzt in 6c98a71, mit dem in Kommentar 1192 dokumentierten Semantik-Pivot: Favoriten sind persönlich je Nutzer, der sys-fav-Label-Ansatz ist komplett entfallen (damit auch alle Label-Folgefragen: Anlage-Permission, Chip-Ausblendung, Schutz).

  • Server: Tabelle page_favorites (userId+pageId, FK-Cascade; Migration 20260716000000_page_favorites), PUT/DELETE /pages/:id/favorite (idempotent, braucht nur LESE-Recht — der Stern ist eine Notiz an sich selbst, keine Seitenänderung; 404-Semantik nach #60), GET /ponds/:id/favorites (eigene Sterne, auf noch lesbare Seiten gesliced). Papierkorb behält die Rows → Restore behält den Stern; Purge kaskadiert sie weg.
  • Web: eine geteilte Query ['favorites', pondId] für den TopBar-Stern (zwischen Labels und Verlauf, golden gefüllt via neuem Token --color-favorite), goldene Icons im Seitenbaum und den einrastenden „Favoriten“-Knopf neben Ordner/Labels (aria-pressed; filtert beide Ansichten, kombinierbar mit dem Label-Filter → flacher Fallback wie gehabt).
  • Keine Public-API/MCP-Exposition — die Label-Parität entfiel mit dem Pivot; Favoriten bleiben vorerst UI-only (in den Handbüchern entsprechend beschrieben).
  • Tests: DB-Suite favorites.e2e.db.test.ts (Round-Trip/Isolation, Read-Gating, Trash-Lifecycle) + neuer CI-Pack favorites.spec.ts (Stern, goldenes Icon, Filter, 2-Nutzer-Isolation). CI grün auf 4f79a81.
Umgesetzt in `6c98a71`, mit dem in Kommentar 1192 dokumentierten Semantik-Pivot: Favoriten sind **persönlich je Nutzer**, der sys-fav-Label-Ansatz ist komplett entfallen (damit auch alle Label-Folgefragen: Anlage-Permission, Chip-Ausblendung, Schutz). - **Server**: Tabelle `page_favorites` (userId+pageId, FK-Cascade; Migration `20260716000000_page_favorites`), `PUT/DELETE /pages/:id/favorite` (idempotent, braucht nur LESE-Recht — der Stern ist eine Notiz an sich selbst, keine Seitenänderung; 404-Semantik nach #60), `GET /ponds/:id/favorites` (eigene Sterne, auf noch lesbare Seiten gesliced). Papierkorb behält die Rows → Restore behält den Stern; Purge kaskadiert sie weg. - **Web**: eine geteilte Query `['favorites', pondId]` für den TopBar-Stern (zwischen Labels und Verlauf, golden gefüllt via neuem Token `--color-favorite`), goldene Icons im Seitenbaum und den einrastenden „Favoriten“-Knopf neben Ordner/Labels (aria-pressed; filtert beide Ansichten, kombinierbar mit dem Label-Filter → flacher Fallback wie gehabt). - **Keine Public-API/MCP-Exposition** — die Label-Parität entfiel mit dem Pivot; Favoriten bleiben vorerst UI-only (in den Handbüchern entsprechend beschrieben). - **Tests**: DB-Suite favorites.e2e.db.test.ts (Round-Trip/Isolation, Read-Gating, Trash-Lifecycle) + neuer CI-Pack favorites.spec.ts (Stern, goldenes Icon, Filter, 2-Nutzer-Isolation). CI grün auf `4f79a81`.
Sign in to join this conversation.
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stwaidele/dorfteich#132
No description provided.