feat: trends report — global flow + by category (#72) #91

Merged
maximus merged 1 commit from issue-72-trends into main 2026-04-14 18:53:25 +00:00
Owner

Fixes #72

Implémentation du rapport /reports/trends avec deux sous-vues accessibles via un toggle interne.

Changements

  • ReportsTrendsPage complète : PeriodSelector, sous-toggle global/byCategory, ViewModeToggle (storage key reports-viewmode-trends), back arrow vers le hub qui préserve la query string
  • Réutilisation sans modification des composants existants (MonthlyTrendsChart, MonthlyTrendsTable, CategoryOverTimeChart, CategoryOverTimeTable)
  • Câblage sur useTrends + useReportsPeriod → la période est partagée via query string avec le hub
  • Nouvelles clés i18n reports.trends.subviewGlobal / subviewByCategory en FR et EN

Tests

  • npm run build
  • npm test 42/42 (aucun nouveau test, réutilisation des composants déjà couverts)
  • cargo check
  • Parité i18n FR/EN
Fixes #72 Implémentation du rapport `/reports/trends` avec deux sous-vues accessibles via un toggle interne. ## Changements - `ReportsTrendsPage` complète : `PeriodSelector`, sous-toggle global/byCategory, `ViewModeToggle` (storage key `reports-viewmode-trends`), back arrow vers le hub qui préserve la query string - Réutilisation sans modification des composants existants (`MonthlyTrendsChart`, `MonthlyTrendsTable`, `CategoryOverTimeChart`, `CategoryOverTimeTable`) - Câblage sur `useTrends` + `useReportsPeriod` → la période est partagée via query string avec le hub - Nouvelles clés i18n `reports.trends.subviewGlobal` / `subviewByCategory` en FR et EN ## Tests - `npm run build` ✅ - `npm test` ✅ 42/42 (aucun nouveau test, réutilisation des composants déjà couverts) - `cargo check` ✅ - Parité i18n FR/EN ✅
maximus added 1 commit 2026-04-14 18:52:48 +00:00
feat: trends report — global flow + by category with view toggle (#72)
All checks were successful
PR Check / rust (push) Successful in 23m52s
PR Check / frontend (push) Successful in 2m20s
PR Check / rust (pull_request) Successful in 23m55s
PR Check / frontend (pull_request) Successful in 2m15s
d06dd7a858
- Flesh out ReportsTrendsPage with internal subview toggle
  (global / byCategory) and ViewModeToggle (storage key reports-viewmode-trends)
- Reuse existing MonthlyTrendsChart/Table and CategoryOverTimeChart/Table
  without modification; wire them through useTrends + useReportsPeriod so the
  URL period is respected
- Add reports.trends.subviewGlobal / subviewByCategory keys in FR + EN

Fixes #72

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Author
Owner

Review — APPROVE

Réutilisation pure des composants existants, aucune duplication de logique. Le câblage sur useTrends + useReportsPeriod est cohérent avec #71, la query string est préservée au retour vers le hub, et le toggle chart/table persiste via storageKey.

Sécurité

  • Aucun nouveau code SQL (délégué à reportService déjà paramétré)
  • Aucun nouveau rendu de chaîne utilisateur

Correctness

  • Subview par défaut = global (conforme spec)
  • noOpDetails est explicite pour désactiver la navigation de détails dans ce contexte (détails accessibles depuis /category en #74)
  • Les hiddenCategories sont local-state de la page — cohérent avec l`ancien comportement

Qualité

  • npm run build
  • npm test 42/42
  • cargo check
  • Parité i18n FR/EN

Non-bloquant

  • noOpDetails (_item: CategoryBreakdownItem → {}) est OK mais pourrait devenir un prop optional dans CategoryOverTimeChart — amélioration ultérieure, pas bloquant

Ready to merge.

## Review — APPROVE Réutilisation pure des composants existants, aucune duplication de logique. Le câblage sur `useTrends` + `useReportsPeriod` est cohérent avec #71, la query string est préservée au retour vers le hub, et le toggle chart/table persiste via `storageKey`. ### Sécurité ✅ - Aucun nouveau code SQL (délégué à `reportService` déjà paramétré) - Aucun nouveau rendu de chaîne utilisateur ### Correctness ✅ - Subview par défaut = global (conforme spec) - `noOpDetails` est explicite pour désactiver la navigation de détails dans ce contexte (détails accessibles depuis /category en #74) - Les `hiddenCategories` sont local-state de la page — cohérent avec l`ancien comportement ### Qualité ✅ - `npm run build` ✅ - `npm test` ✅ 42/42 - `cargo check` ✅ - Parité i18n FR/EN ✅ ### Non-bloquant - `noOpDetails` (`_item: CategoryBreakdownItem` → {}) est OK mais pourrait devenir un prop optional dans `CategoryOverTimeChart` — amélioration ultérieure, pas bloquant Ready to merge.
maximus merged commit fae76a6b82 into main 2026-04-14 18:53:25 +00:00
maximus deleted branch issue-72-trends 2026-04-14 18:53:25 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#91
No description provided.