[#1] Fondation non-breaking : suppression pivot + squelettes + shared components #69

Closed
opened 2026-04-13 14:58:54 +00:00 by maximus · 0 comments
Owner

Objectif

Poser la fondation de la refonte des rapports sans rien casser : supprimer franchement le pivot, créer les 4 squelettes de pages plates, ajouter les sous-routes, créer les shared components (ViewModeToggle, Sparkline, ContextMenu générique). Les 4 rapports existants (trends, byCategory, overTime, budgetVsActual) continuent de fonctionner comme avant.

Spec : spec-refonte-rapports.md

Tâches

Suppression franche du pivot

  • Delete src/components/reports/DynamicReport.tsx
  • Delete src/components/reports/DynamicReportPanel.tsx
  • Delete src/components/reports/DynamicReportTable.tsx
  • Delete src/components/reports/DynamicReportChart.tsx
  • Retirer de src/hooks/useReports.ts : les champs pivotConfig, pivotResult, les actions setPivotConfig, la branche tab === 'dynamic' dans le reducer et les fetches
  • Nettoyer le type ReportTab dans src/shared/types.ts (plus de 'dynamic')
  • Retirer l'onglet pivot de src/pages/ReportsPage.tsx (constante TABS, imports, case dans le switch)
  • Supprimer toutes les clés reports.pivot.* dans src/i18n/locales/fr.json et en.json

Squelettes des nouvelles pages (plat dans src/pages/)

  • Créer src/pages/ReportsHighlightsPage.tsx — placeholder {t("common.underConstruction")}
  • Créer src/pages/ReportsTrendsPage.tsx — placeholder
  • Créer src/pages/ReportsComparePage.tsx — placeholder
  • Créer src/pages/ReportsCategoryPage.tsx — placeholder
  • Ajouter les 4 sous-routes dans src/App.tsx : /reports/highlights, /reports/trends, /reports/compare, /reports/category

Shared components

  • Créer src/components/reports/ViewModeToggle.tsx — API { value: 'chart' | 'table', onChange, storageKey }, persiste dans localStorage
  • Créer src/components/reports/Sparkline.tsx — Recharts LineChart compact sans axes
  • Créer src/components/shared/ContextMenu.tsx — shell générique { x, y, items: { label, onClick }[], onClose } avec click-outside + Escape
  • Refactorer src/components/shared/ChartContextMenu.tsx pour composer ContextMenu (garder ses props spécifiques aux charts : categoryName, onHide, onViewDetails)

i18n

  • Ajouter en FR et EN : reports.hub.*, reports.viewMode.*, reports.empty.*, common.underConstruction
  • Vérifier la parité FR/EN des clés ajoutées/retirées

Nav

  • NAV_ITEMS dans src/shared/constants/index.ts : aucun changement — l'entrée /reports reste seule, les sous-rapports ne sont accessibles que via les cartes du hub (Issue #3)

Vérifications

  • npm run build vert
  • cargo check vert
  • npm test vert
  • grep -ri "DynamicReport\|pivotConfig\|reports\.pivot" src/ retourne vide
  • Les 4 rapports existants tournent toujours (non-regression visuelle sur /reports)

Critères d'acceptation

  • L'app compile sans erreurs TypeScript
  • Les 4 nouvelles routes affichent leur placeholder sans planter
  • Le pivot est totalement absent du code, des types et des traductions
  • Les 4 rapports restants ne régressent pas
  • Aucun shared component n'est cassé (ChartContextMenu fonctionne toujours là où il est utilisé aujourd'hui)
## Objectif Poser la fondation de la refonte des rapports **sans rien casser** : supprimer franchement le pivot, créer les 4 squelettes de pages plates, ajouter les sous-routes, créer les shared components (`ViewModeToggle`, `Sparkline`, `ContextMenu` générique). Les 4 rapports existants (trends, byCategory, overTime, budgetVsActual) continuent de fonctionner comme avant. Spec : `spec-refonte-rapports.md` ## Tâches ### Suppression franche du pivot - [ ] Delete `src/components/reports/DynamicReport.tsx` - [ ] Delete `src/components/reports/DynamicReportPanel.tsx` - [ ] Delete `src/components/reports/DynamicReportTable.tsx` - [ ] Delete `src/components/reports/DynamicReportChart.tsx` - [ ] Retirer de `src/hooks/useReports.ts` : les champs `pivotConfig`, `pivotResult`, les actions `setPivotConfig`, la branche `tab === 'dynamic'` dans le reducer et les fetches - [ ] Nettoyer le type `ReportTab` dans `src/shared/types.ts` (plus de `'dynamic'`) - [ ] Retirer l'onglet pivot de `src/pages/ReportsPage.tsx` (constante `TABS`, imports, case dans le switch) - [ ] Supprimer toutes les clés `reports.pivot.*` dans `src/i18n/locales/fr.json` **et** `en.json` ### Squelettes des nouvelles pages (plat dans `src/pages/`) - [ ] Créer `src/pages/ReportsHighlightsPage.tsx` — placeholder `{t("common.underConstruction")}` - [ ] Créer `src/pages/ReportsTrendsPage.tsx` — placeholder - [ ] Créer `src/pages/ReportsComparePage.tsx` — placeholder - [ ] Créer `src/pages/ReportsCategoryPage.tsx` — placeholder - [ ] Ajouter les 4 sous-routes dans `src/App.tsx` : `/reports/highlights`, `/reports/trends`, `/reports/compare`, `/reports/category` ### Shared components - [ ] Créer `src/components/reports/ViewModeToggle.tsx` — API `{ value: 'chart' | 'table', onChange, storageKey }`, persiste dans localStorage - [ ] Créer `src/components/reports/Sparkline.tsx` — Recharts `LineChart` compact sans axes - [ ] Créer `src/components/shared/ContextMenu.tsx` — shell générique `{ x, y, items: { label, onClick }[], onClose }` avec click-outside + Escape - [ ] Refactorer `src/components/shared/ChartContextMenu.tsx` pour composer `ContextMenu` (garder ses props spécifiques aux charts : `categoryName`, `onHide`, `onViewDetails`) ### i18n - [ ] Ajouter en FR et EN : `reports.hub.*`, `reports.viewMode.*`, `reports.empty.*`, `common.underConstruction` - [ ] Vérifier la parité FR/EN des clés ajoutées/retirées ### Nav - [ ] `NAV_ITEMS` dans `src/shared/constants/index.ts` : **aucun changement** — l'entrée `/reports` reste seule, les sous-rapports ne sont accessibles que via les cartes du hub (Issue #3) ### Vérifications - [ ] `npm run build` vert - [ ] `cargo check` vert - [ ] `npm test` vert - [ ] `grep -ri "DynamicReport\|pivotConfig\|reports\.pivot" src/` retourne vide - [ ] Les 4 rapports existants tournent toujours (non-regression visuelle sur `/reports`) ## Critères d'acceptation - L'app compile sans erreurs TypeScript - Les 4 nouvelles routes affichent leur placeholder sans planter - Le pivot est totalement absent du code, des types et des traductions - Les 4 rapports restants ne régressent pas - Aucun shared component n'est cassé (`ChartContextMenu` fonctionne toujours là où il est utilisé aujourd'hui)
maximus added this to the spec-refonte-rapports milestone 2026-04-13 14:58:54 +00:00
maximus added the
status:ready
type:refactor
source:human
labels 2026-04-13 14:58:54 +00:00
maximus added
status:approved
and removed
status:ready
labels 2026-04-14 18:26:36 +00:00
Sign in to join this conversation.
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#69
No description provided.