refactor: pivot removal + sub-route skeletons + shared components (#69) #88

Merged
maximus merged 1 commit from issue-69-foundation-pivot-removal into main 2026-04-14 18:33:18 +00:00
Owner

Fixes #69

Fondation non-breaking de la refonte des rapports:

  • Suppression franche du pivot (DynamicReport* + types + i18n + reducer + types ReportTab)
  • 4 squelettes de pages /reports/{highlights,trends,compare,category} avec placeholder
  • 4 sous-routes dans App.tsx
  • Shared components: ContextMenu (générique), ChartContextMenu refactorisé pour composer ContextMenu, ViewModeToggle (localStorage par storageKey), Sparkline
  • Nouvelles clés i18n: reports.hub.*, reports.viewMode.*, reports.empty.*, common.underConstruction, reports.month
  • Tests unitaires pour readViewMode

Vérifications

  • npm run build
  • npm test (30 tests, dont 5 nouveaux)
  • cargo check
  • Parité FR/EN des clés i18n
  • Aucune trace de DynamicReport|pivotConfig|reports.pivot dans src/
Fixes #69 Fondation non-breaking de la refonte des rapports: - Suppression franche du pivot (DynamicReport* + types + i18n + reducer + types ReportTab) - 4 squelettes de pages `/reports/{highlights,trends,compare,category}` avec placeholder - 4 sous-routes dans `App.tsx` - Shared components: `ContextMenu` (générique), `ChartContextMenu` refactorisé pour composer `ContextMenu`, `ViewModeToggle` (localStorage par `storageKey`), `Sparkline` - Nouvelles clés i18n: `reports.hub.*`, `reports.viewMode.*`, `reports.empty.*`, `common.underConstruction`, `reports.month` - Tests unitaires pour `readViewMode` ## Vérifications - `npm run build` ✅ - `npm test` ✅ (30 tests, dont 5 nouveaux) - `cargo check` ✅ - Parité FR/EN des clés i18n ✅ - Aucune trace de `DynamicReport|pivotConfig|reports.pivot` dans `src/`
maximus added 1 commit 2026-04-14 18:25:56 +00:00
refactor: remove pivot report, add sub-route skeletons and shared components (#69)
All checks were successful
PR Check / rust (push) Successful in 24m21s
PR Check / frontend (push) Successful in 2m12s
PR Check / rust (pull_request) Successful in 23m5s
PR Check / frontend (pull_request) Successful in 2m16s
91430e994a
- Delete DynamicReport* components and pivot types (PivotConfig, PivotResult, PivotFieldId, etc.)
- Remove getDynamicReportData/getDynamicFilterValues from reportService
- Strip pivotConfig/pivotResult from useReports hook and ReportsPage
- Drop "dynamic" from ReportTab union
- Remove reports.pivot.* and reports.dynamic i18n keys in FR and EN
- Add skeletons for /reports/highlights, /trends, /compare, /category pages
- Register the 4 new sub-routes in App.tsx
- Add reports.hub, reports.viewMode, reports.empty, common.underConstruction keys
- New shared ContextMenu component with click-outside + Escape handling
- Refactor ChartContextMenu to compose generic ContextMenu
- New ViewModeToggle with localStorage persistence via storageKey
- New Sparkline (Recharts LineChart) for compact trends
- Unit tests for readViewMode helper

Fixes #69

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

Review — APPROVE

Verdict: APPROVE

Résumé : Fondation non-breaking propre. Suppression franche du pivot (code + types + i18n), squelettes des 4 sous-pages, shared components refactorisés. Non régressif sur les 4 rapports existants.

Sécurité

  • Aucun secret
  • Aucune SQL (code SQL pivot entièrement supprimé)
  • Pas de XSS — tous les textes via t(), placeholders rendus comme enfants React

Correctness

  • Spec suivie à la lettre (pivot retiré franchement, 4 squelettes, ContextMenu générique composant ChartContextMenu)
  • ReportTab union mise à jour (retrait de dynamic)
  • useReports nettoyé (pivotConfig/pivotResult retirés, fetch dynamic case retirée)
  • MonthlyTrendsTable : la référence orpheline reports.pivot.month a été remplacée par la nouvelle clé reports.month ajoutée en FR+EN

Qualité

  • Parité FR/EN vérifiée (script: 0 clé orpheline)
  • npm run build
  • npm test 30 tests (5 nouveaux pour readViewMode)
  • cargo check
  • grep confirme : 0 occurrence de DynamicReport|pivotConfig|reports\.pivot|PivotConfig dans src/

Suggestions non-bloquantes

  • ViewModeToggle : laria-label du groupe utilise reports.viewMode.chart — pourrait être une clé dédiée (reports.viewMode.label) dans une issue ultérieure, pas bloquant ici
  • Le hook useReports reste monolithique — c est le job d Issue #70, ce qui est documenté dans la spec

Rien à corriger. Ready to merge.

## Review — APPROVE **Verdict**: APPROVE **Résumé** : Fondation non-breaking propre. Suppression franche du pivot (code + types + i18n), squelettes des 4 sous-pages, shared components refactorisés. Non régressif sur les 4 rapports existants. ### Sécurité ✅ - Aucun secret - Aucune SQL (code SQL pivot entièrement supprimé) - Pas de XSS — tous les textes via `t()`, placeholders rendus comme enfants React ### Correctness ✅ - Spec suivie à la lettre (pivot retiré franchement, 4 squelettes, ContextMenu générique composant ChartContextMenu) - `ReportTab` union mise à jour (retrait de `dynamic`) - `useReports` nettoyé (pivotConfig/pivotResult retirés, fetch `dynamic` case retirée) - `MonthlyTrendsTable` : la référence orpheline `reports.pivot.month` a été remplacée par la nouvelle clé `reports.month` ajoutée en FR+EN ### Qualité ✅ - Parité FR/EN vérifiée (script: 0 clé orpheline) - `npm run build` ✅ - `npm test` ✅ 30 tests (5 nouveaux pour `readViewMode`) - `cargo check` ✅ - `grep` confirme : 0 occurrence de `DynamicReport|pivotConfig|reports\.pivot|PivotConfig` dans `src/` ### Suggestions non-bloquantes - `ViewModeToggle` : l`aria-label` du groupe utilise `reports.viewMode.chart` — pourrait être une clé dédiée (`reports.viewMode.label`) dans une issue ultérieure, pas bloquant ici - Le hook `useReports` reste monolithique — c est le job d Issue #70, ce qui est documenté dans la spec Rien à corriger. Ready to merge.
maximus merged commit a50be5caf6 into main 2026-04-14 18:33:18 +00:00
maximus deleted branch issue-69-foundation-pivot-removal 2026-04-14 18:33:19 +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#88
No description provided.