Simpl-Resultat/src/components/reports
le king fu 48adb3db77
All checks were successful
PR Check / rust (pull_request) Successful in 23m0s
PR Check / frontend (pull_request) Successful in 2m30s
feat(reports): collapse category hierarchy at every level (socle + 3 reports)
Generalize the report category collapse from level-1-only to every hierarchy
level, on the three hierarchical report tables (real-vs-real Compare,
real-vs-budget Compare, Trends by category). Visibility is now decided by an
ancestor walk, not by row adjacency, so it is independent of row order (the
level-ordered budget grid emits a non-DFS order).

- collapsibleRows: rewrite visibleRows as an ancestor walk (a row is hidden iff
  any ancestor is collapsed); add parentKeyOf + injective `p:` keys;
  collapsibleKeys returns all parents (any depth); extract the pure, tested
  isCollapsedFor polarity helper; MAX_TREE_DEPTH cycle guard.
- useCollapsibleGroups: persist in user_preferences (per-profile, destroyed with
  the profile) instead of localStorage; storageKey nullable (no persistence);
  options.defaultExpanded; async hydration (no flash); collapseAll(rows).
- 3 tables: fix BOTH gates (collapsed flag + button) isTopParent -> isParent, add
  parentKeyOf accessors, aria-level on parent rows.
- Delete dead CategoryTable.tsx (0 imports).
- Tests: rewrite collapsibleRows.test.ts (BFS==DFS masking, cycle guard,
  cross-section ancestor, "(direct)" leaf, polarity); extend overTimeTableModel
  fixture to 3 levels with cascade assertions.

Collapse stays purely visual: subtotals and result lines are computed from raw
rows, never from visible rows.

Resolves #288

Generated autonomously by /autopilot run of 2026-07-15

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 20:58:18 -04:00
..
cards feat(reports/cartes): Mensuel/YTD toggle on KPI cards + user guide section (#102) 2026-04-19 09:49:21 -04:00
budgetVsActualResults.test.ts feat(reports): BVA (actual vs budget) income-first + result lines 2026-07-11 16:59:16 -04:00
budgetVsActualResults.ts feat(reports): BVA (actual vs budget) income-first + result lines 2026-07-11 16:59:16 -04:00
BudgetVsActualTable.tsx feat(reports): collapse category hierarchy at every level (socle + 3 reports) 2026-07-15 20:58:18 -04:00
CategoryBarChart.tsx Add box-shadow and z-index to chart tooltips for better visibility (#19) 2026-03-08 12:06:16 -04:00
CategoryDonutChart.tsx feat: category zoom + secure AddKeywordDialog with context menu (#74) 2026-04-14 15:09:17 -04:00
CategoryEvolutionChart.tsx feat: category zoom + secure AddKeywordDialog with context menu (#74) 2026-04-14 15:09:17 -04:00
CategoryOverTimeChart.tsx feat(reports): getCategoryOverTime -> id-keyed trends tree (sidecar) + tree-based results 2026-07-07 19:30:50 -04:00
CategoryOverTimeTable.tsx feat(reports): collapse category hierarchy at every level (socle + 3 reports) 2026-07-15 20:58:18 -04:00
CategoryTransactionsTable.tsx feat: category zoom + secure AddKeywordDialog with context menu (#74) 2026-04-14 15:09:17 -04:00
CategoryZoomHeader.tsx feat(reports/category): replace select with searchable combobox (#103) 2026-04-18 21:07:47 -04:00
CompareBudgetView.tsx feat(reports): adopt shared FilterPanel on Compare and Budget 2026-07-11 15:52:21 -04:00
CompareModeTabs.tsx refactor(reports/compare): unify MoM/YoY under one Actual-vs-actual mode with reference month picker (#96) 2026-04-15 14:24:11 -04:00
ComparePeriodChart.tsx fix(reports): StrictMode-safe period sync + review polish (#253) 2026-07-05 19:37:22 -04:00
ComparePeriodTable.tsx feat(reports): collapse category hierarchy at every level (socle + 3 reports) 2026-07-15 20:58:18 -04:00
CompareReferenceMonthPicker.tsx refactor(reports/compare): unify MoM/YoY under one Actual-vs-actual mode with reference month picker (#96) 2026-04-15 14:24:11 -04:00
compareResults.test.ts feat(reports): real-vs-real compare as an income statement + previous-month default 2026-07-05 18:36:57 -04:00
compareResults.ts feat(reports): real-vs-real compare as an income statement + previous-month default 2026-07-05 18:36:57 -04:00
CompareSubModeToggle.tsx refactor(reports/compare): unify MoM/YoY under one Actual-vs-actual mode with reference month picker (#96) 2026-04-15 14:24:11 -04:00
FilterPanel.test.tsx feat(reports): shared FilterPanel component (temporal slot + account multi-select) 2026-07-11 15:31:58 -04:00
FilterPanel.tsx feat(reports): shared FilterPanel component (temporal slot + account multi-select) 2026-07-11 15:31:58 -04:00
HighlightsTopMoversChart.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
HighlightsTopMoversTable.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
HighlightsTopTransactionsList.tsx feat: propagate right-click "add as keyword" to transactions page and highlights list (#75) 2026-04-14 15:15:33 -04:00
HubHighlightsPanel.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
HubNetBalanceTile.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
HubReportNavCard.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
HubTopMoversTile.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
HubTopTransactionsTile.tsx feat: reports hub with highlights panel and detailed highlights page (#71) 2026-04-14 14:47:55 -04:00
MonthlyTrendsChart.tsx Bump version to 0.6.0 — Reports enhancements and comment visibility fix 2026-03-04 21:01:13 -05:00
MonthlyTrendsTable.tsx refactor: remove pivot report, add sub-route skeletons and shared components (#69) 2026-04-14 14:25:38 -04:00
overTimeResults.test.ts feat(reports): getCategoryOverTime -> id-keyed trends tree (sidecar) + tree-based results 2026-07-07 19:30:50 -04:00
overTimeResults.ts feat(reports): getCategoryOverTime -> id-keyed trends tree (sidecar) + tree-based results 2026-07-07 19:30:50 -04:00
overTimeTableModel.test.ts feat(reports): collapse category hierarchy at every level (socle + 3 reports) 2026-07-15 20:58:18 -04:00
overTimeTableModel.ts feat(reports): collapse category hierarchy at every level (socle + 3 reports) 2026-07-15 20:58:18 -04:00
Sparkline.tsx refactor: remove pivot report, add sub-route skeletons and shared components (#69) 2026-04-14 14:25:38 -04:00
TrendsChartTypeToggle.test.ts refactor(reports/trends): rename chart type from 'line' to 'bar' to match actual rendering 2026-04-19 07:26:22 -04:00
TrendsChartTypeToggle.tsx refactor(reports/trends): rename chart type from 'line' to 'bar' to match actual rendering 2026-04-19 07:26:22 -04:00
ViewModeToggle.test.ts refactor: remove pivot report, add sub-route skeletons and shared components (#69) 2026-04-14 14:25:38 -04:00
ViewModeToggle.tsx refactor: remove pivot report, add sub-route skeletons and shared components (#69) 2026-04-14 14:25:38 -04:00