From 0238442b33c83dbcda53aeff5fc5510a2d4d4b8d Mon Sep 17 00:00:00 2001 From: nfebe Date: Sun, 21 Jun 2026 15:01:38 +0100 Subject: [PATCH] feat: Stream the transactions spreadsheet and speed up reports Reports now load noticeably faster and no longer hide charts while data is still arriving. - Report transaction pages are fetched concurrently instead of one at a time, so wide date ranges render much sooner. - Per-category spending trends are built in a single pass rather than rescanning every transaction once per category. - The charts and other report tabs stay visible whenever chart data exists, with a loading state instead of a flash of the empty screen. - A notice appears when a period has more transactions than can be charted at once, so partial figures are not mistaken for complete ones. - Amounts that could not be converted to the default currency are now flagged, so cross-currency totals are no longer silently understated. The transactions spreadsheet streams rows in chunks: the first rows and running totals appear immediately and grow as the rest load. Columns can be sorted, the current view can be exported to a CSV file, and search is debounced so typing stays smooth on large sets. --- .../transactions/TransactionsSpreadsheet.vue | 260 +++++++++++++++++- composables/useReportData.ts | 123 ++++++--- pages/reports.vue | 53 +++- services/api/statsApi.ts | 4 + 4 files changed, 392 insertions(+), 48 deletions(-) diff --git a/components/transactions/TransactionsSpreadsheet.vue b/components/transactions/TransactionsSpreadsheet.vue index 407a961..40b5ea5 100644 --- a/components/transactions/TransactionsSpreadsheet.vue +++ b/components/transactions/TransactionsSpreadsheet.vue @@ -7,10 +7,26 @@

{{ t('Transactions spreadsheet') }}

{{ t('{count} rows', { count: filteredRows.length }) }} + · {{ t('loading…') }}
- + + @@ -31,18 +47,31 @@ # - {{ t('Date') }} - {{ t('Type') }} - {{ t('Amount') }} - {{ t('Currency') }} - {{ t('Description') }} - {{ t('Categories') }} - {{ t('Wallet') }} - {{ t('Party') }} + + + {{ col.label }} + + + + - + {{ i + 1 }} {{ formatDate(row.datetime) }} @@ -85,8 +114,14 @@