feat: export widget data as CSV (#28) #38
Reference in New Issue
Block a user
Delete Branch "ai/issue-28-widget-csv-export"
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?
Closes #28
Was
Die ApexCharts-Toolbar bleibt (wie in
DialectThemefestgelegt) ausgeblendet — damit gab es bisher gar keinen Export. Der Einstieg ist jetzt, wie im Issue vorgeschlagen, das Per-Widget-Aktionsmenü aus #27: neuer Eintrag „Als CSV exportieren", serverseitig erzeugt aus denselben Daten, die das Widget rendert.Änderungen
export/CsvExport(neu): die Exporttabelle plus CSV-Dialekt —;als Trenner (Dezimalkomma macht,unbrauchbar), CRLF, UTF-8-BOM für Excel, Zahlen im Locale der UI, RFC-4180-Quoting. Dazu die Dateinamen-Slugs (Umlaute/ßwerden aufgelöst).GridStackItem.setActionDownload(Action, DownloadHandler): macht aus der Caption eines Menüeintrags einen Anchor über einenDownloadHandler— der Eintrag gibt eine Datei heraus, statt nur einActionEventzu melden. NeuerAction.EXPORT.WidgetRegistry:bind(...)hält jetzt die Query, nicht nur deren Ergebnis, so dassRefreshund der neueExport-Hook sie gegen den aktuellen Filter neu ausführen.DashboardView: baut den Download beim Klick. Der Request läuft ohne Session-Lock und ohne currentUI(sieheStreamRequestHandler), deshalb wird der Lock für den Lesevorgang genommen und das Locale explizit durchgereicht.gridstack.export,export.category), Bedienungs-Hinweis ergänzt;styles.cssstreckt den Link über die ganze Menüzeile.Akzeptanzkriterien
umsatz-entwicklung-halbjahr.csv.Der Bild-Export (
dataURI()) ist bewusst nicht dabei — das Issue nennt ihn optionalen Follow-up.Tests
./mvnw test→ 67/67 grün. Neu:export/CsvExportTest— CSV-Dialekt, Quoting, BOM, Slugging.views/DashboardViewTest— Export-Eintrag ist ein Download-Link (nicht bei KPI-Kacheln), Exportdaten entsprechen dem Service, folgen dem Filter, Pie-Chart exportiert die Regionen.e2e/WidgetActionMenuPlaywrightTest— echter Browser-Download: Dateinamerevenue-trend-half-year.csv, BOM, Header- und Datenzeilen.🤖 Generated with Claude Code
https://claude.ai/code/session_0124BiJikbhbiEsNfJxdWM69
The ApexCharts toolbar stays hidden (DialectTheme), so the dashboard had no export at all. Adds an "Als CSV exportieren" entry to the per-widget action menu, served server-side from the same data the widget renders. - CsvExport: the export table plus its CSV dialect (';' separator, CRLF, UTF-8 BOM, locale-formatted numbers) and file-name slugging. - GridStackItem.setActionDownload: turns a menu entry's caption into an anchor over a DownloadHandler, so an entry can hand out a file. - WidgetRegistry: keeps each widget's query, not only its result, so the Export hook re-runs it — an export always matches the current filter. - DashboardView: builds the download on click; file name is widget title + period (revenue-trend-half-year.csv). Chart image export is left as the follow-up the issue calls optional. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0124BiJikbhbiEsNfJxdWM69