[#2] Refonte useReports : hooks par domaine + periode en query string #70
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#70
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Objectif
Splitter le hook monolithique
useReportsen hooks par domaine et déplacer la période vers la query string pour qu'elle soit bookmarkable et partagée entre les sous-routes. Les 4 rapports existants continuent de fonctionner pendant la transition grâce à un fallback legacy.Spec :
spec-refonte-rapports.mdDépend de #69
Contexte
useReportsaujourd'hui porte tout l'état des rapports (tab,period,monthlyTrends,categorySpending,categoryOverTime,budget*, etc.) dans un seul reducer. Avec les 4 sous-routes séparées, chaque page monte son propre hook — un god-object qui refetche tout et porte des champs hors-section devient incohérent. Cf. findings architecture du review.Tâches
Nouveau hook partagé :
useReportsPeriodsrc/hooks/useReportsPeriod.tsuseSearchParamsde react-router :?from=YYYY-MM-DD&to=YYYY-MM-DD&period=custom|monthly|yearly|ytd|all{ from, to, period, setPeriod, setCustomDates }Hooks par domaine (stubs avec fetch basique)
src/hooks/useHighlights.ts—useReducer+ fetch viareportService.getHighlights(stub vide pour l'instant, sera rempli en #71)src/hooks/useTrends.ts— stubsrc/hooks/useCompare.ts— stubsrc/hooks/useCategoryZoom.ts— stubuseReportsPeriodpour obtenir la période couranteTransition legacy
src/hooks/useReports.tsavec ses champs existants (monthlyTrends,categorySpending,categoryOverTime,budgetVsActual) mais le recâbler suruseReportsPeriodau lieu de l'état local interne// @deprecated — sera supprimé en Issue #76 une fois tous les rapports migréssrc/pages/ReportsPage.tsx(version temporaire avec tabs) pour consommeruseReportsPeriod+ les champs legacy deuseReportsViewModeToggle: s'assurer que la propstorageKeypermet la persistance par section (reports-viewmode-highlights,-trends,-compare,-category)Vérifications
npm run buildvertcargo checkvert/reportssans régression?from=...&to=...restaure l'état)Critères d'acceptation
useReportsPeriod@deprecatedmarque l'ancienuseReports