Darstellung
Dashboard: Diagramme aus dem Assistenten anpinnen
Kurzfassung
Jedes Diagramm im Web-Assistenten (/assistent) hat neben CSV/PNG einen Pin-Knopf. Ein Klick pinnt es dauerhaft ans Dashboard (Abschnitt „Angepinnte Diagramme“). Dort ist die Ansicht ruhig: Diagramm, Tabelle, Export. Die Einstellungen (Typ, Zeitraum, Gruppierung, Aufteilung, Kennzahl) öffnen sich erst hinter dem Stift; jede Umstellung wird gespeichert. Ein zweiter Pin-Klick (Chat) oder das Pin-aus-Symbol (Dashboard) entfernt den Pin.
Verhalten
- Anpinnen speichert die Spec so, wie sie im Chat gerade eingestellt ist (nicht den Ursprungszustand).
- Live-Daten: Trägt die Spec eine Herkunfts-Abfrage (
queryausanalytics.query), lädt das Dashboard die Zahlen beim Öffnen einmal neu und speichert den aktuellen Schnappschuss. Diagramme auschart.renderohne Abfrage bleiben statisch. - Zeitraum ist fest: „Letzte 3 Monate“ wird als konkretes von/bis gespeichert und wandert nicht mit. Wer ein rollendes Fenster will, stellt es hinter dem Stift um (Preset) — der Zeitraum steht als Untertitel am Diagramm.
- Je Nutzer und Mandant, höchstens 12 Pins, Reihenfolge = Reihenfolge des Anpinnens.
- Pins werden mit dem Nutzer gelöscht (
ON DELETE CASCADE).
Bausteine
| Ebene | Datei | Zweck |
|---|---|---|
| DB | database/migrations/110_dashboard_pinned_charts.sql | Tabelle dashboard_pinned_charts (company_id, user_id, spec JSONB, position) |
| Validierung | apps/app/src/lib/dashboard/pinned-charts.ts | parsePinnedChartSpec = Zod-Schema chartSpecSchema + validateChartSpec, Größenlimit; Test pinned-charts.test.ts (npm run test:dashboard-pins) |
| API | apps/app/src/app/api/dashboard/charts/route.ts | GET Liste, POST { spec } anpinnen (Limit 12) |
| API | apps/app/src/app/api/dashboard/charts/[id]/route.ts | PATCH { spec } nach Umstellung, DELETE Pin entfernen — immer auf Session-Nutzer begrenzt |
| UI Chat | apps/app/src/components/assistant/PinnableChartCard.tsx | Chart-Karte + Pin-Knopf, Rückmeldung „Am Dashboard angepinnt“ |
| UI Dashboard | apps/app/src/components/dashboard/PinnedCharts.tsx | Abschnitt mit Stift (Einstellungen auf/zu), Pin-aus, Auto-Speichern (600 ms gesammelt) |
| Chart-Karte | apps/app/src/components/charts/ChartCard.tsx | neue Props toolbarExtra, onSpecChange, refreshOnMount; compact blendet die Einstellungen aus |
Abnahme (Test)
/assistent: „Umsatz pro Monat dieses Jahr“ → Diagramm → Pin klicken → Hinweis „Am Dashboard angepinnt“./dashboard: Abschnitt „Angepinnte Diagramme“ zeigt es ohne Bedienelemente; Stift → Typ auf „Torte“, Zeitraum „Letzte 3 Monate“; Seite neu laden → Einstellungen bleiben.- Pin-aus am Dashboard → Abschnitt verschwindet, wenn kein Pin mehr da ist.
- Chat: Pin-Knopf ein zweites Mal → „Vom Dashboard entfernt“.
Offen / Ideen
- Reihenfolge per Drag & Drop, Pins für die ganze Firma (Rolle ≤ 2) statt nur je Nutzer.
- Rollender Zeitraum (Preset statt fester von/bis) als eigene Option in der Spec.