docs(260928-ujj): CHANGELOG und Anleitungen fuer Design Mosaik
- Unveroeffentlicht: Hintergrundwahl (Neu), neues Aussehen (Geaendert), Resize-Fehler (Behoben) - Anwender-Anleitung: App-Leiste, Seitenleiste, Anmeldeseite, Befehlsleiste, Hintergrund, Kalender - Entwickler-Anleitung: User.dashboardBackground, PATCH /users/me/dashboard-background, parseDashboardBackground Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -677,6 +677,26 @@ Fenster aus; Punkte unter „Unveröffentlicht“ erscheinen darin nie. Lokal st
|
||||
setzen. Fehlt der Abschnitt der laufenden Version in der Änderungsliste des Web-Abbilds, entsteht
|
||||
kein Fenster und nichts wird gemerkt.
|
||||
|
||||
**Dashboard-Hintergrund pro Benutzer (quick-260928-ujj):** Die Hintergrundwahl des Designs „Mosaik“
|
||||
steht in der Spalte `User.dashboardBackground` (JSONB, Migration
|
||||
`20260928120000_user_dashboard_background`): `null` = nie gewählt, sonst ein normalisiertes Objekt
|
||||
`{ kind: 'none' }`, `{ kind: 'preset', id }` oder `{ kind: 'image', imageId }`. Geschrieben wird
|
||||
nur über `PATCH /users/me/dashboard-background` mit `{ background }` — ohne Kennungsparameter,
|
||||
ausschließlich die eigene Zeile (`forTenant()`, `where: { id: currentUser.id }`); ein ungültiger
|
||||
Wert ergibt 400 und schreibt nichts. Gelesen wird der Wert mit der Sitzungsantwort (`GET /auth/me`,
|
||||
`AuthService.getMe`, neben `accentColor`) und landet über die `setUser`-Abbildung in `header.tsx`
|
||||
im Auth-Store; `useDashboardBackground()` in
|
||||
`apps/web/src/components/dashboard/dashboard-background.tsx` liest von dort und speichert über
|
||||
`updateDashboardBackgroundAction` (optimistisch, bei Fehlschlag zurückgesetzt). Einzige Prüfregel
|
||||
ist `parseDashboardBackground` in `packages/shared/src/index.ts` (Laufzeit-Import in API und Web,
|
||||
angewendet beim Schreiben UND beim Lesen): `kind` und die Preset-Kennungen
|
||||
(`DASHBOARD_BACKGROUND_PRESET_IDS`) aus einer festen Liste, `imageId` nur als UUID, weil das Web
|
||||
den Wert als CSS-Hintergrund `url("...")` rendert. Wer ein neues Preset ergänzt, trägt es dort und
|
||||
in `BACKGROUND_PRESETS` (`apps/web/src/lib/dashboard-background.ts`) ein — ein Test prüft, dass
|
||||
beide Listen deckungsgleich sind. Der frühere localStorage-Schlüssel
|
||||
`tessera.dashboardBackground.<userId>` wird von `takeLegacyDashboardBackground` einmal gelesen,
|
||||
entfernt und nur übernommen, wenn der Server-Wert noch `null` ist.
|
||||
|
||||
**i18n — Schlüsselparität zwischen de.json und en.json:** Jeder benutzersichtbare Text gehört in
|
||||
beide Sprachdateien, `apps/web/src/messages/de.json` und `apps/web/src/messages/en.json`. Ein
|
||||
strukturelle Wächter-Test, `apps/web/src/messages/tenderRadar-parity.spec.ts`, prüft für den
|
||||
|
||||
Reference in New Issue
Block a user