fix: sticky category column and month dropdown selector (#29) #30
No reviewers
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
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#30
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/simpl-resultat-29-budget-visual-adjustments"
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?
Summary
Fixes #29 — Visual adjustments to the Budget vs Actual table:
sticky left-0with properz-indexand background colors to all category cells (header, data rows, section totals, grand total).<select>dropdown showing 24 months.Files changed
src/components/reports/BudgetVsActualTable.tsx— sticky positioning on category cellssrc/pages/ReportsPage.tsx— title + dropdown replacing MonthNavigatorsrc/hooks/useReports.ts— default month logic +setBudgetMonthcallbacksrc/i18n/locales/fr.json/en.json— newreports.bva.titlePrefixkeyCHANGELOG.md/CHANGELOG.fr.md— documented changesTest plan
🤖 Generated with Claude Code
Reviewer automatique — needs-fix
La colonne sticky utilise des backgrounds semi-transparents (opacity /30, /15) qui laissent le contenu des cellules de données visible en dessous lors du scroll horizontal — ça annule le bénéfice visuel du sticky. La ligne de section header a un sticky sans background propre sur le td. Aussi, pas de tests ajoutés pour la nouvelle logique de mois par défaut.
Suggestions de simplification
(() => { ... })()dans le JSX pour générer les options du select est difficile à lire. Extraire la génération des options dans unuseMemoou une constante en haut du composant.navigateBudgetMonthest toujours défini et exporté mais n'est plus utilisé dans ReportsPage (le seul consommateur visible). Si plus aucun composant ne l'utilise, le supprimer pour éviter le code mort.Problèmes détectés
bg-[var(--muted)]/30,bg-[var(--muted)]/15). Lors du scroll horizontal, les cellules de données glissent sous la colonne fixée et sont visibles à travers. Il faut des backgrounds 100% opaques sur toutes les cellules sticky (utiliser des couleurs solides, par ex.bg-[var(--card)]ou une variable CSS opaque dédiée).colSpan={9},sticky left-0) n'a pas de background propre — il hérite dubg-[var(--muted)]/50du<tr>parent. Les backgrounds de<tr>ne suivent pas les éléments sticky dans la plupart des navigateurs. Ajouter un background opaque directement sur le<td>.sticky left-0) abg-[var(--muted)]/40— semi-transparent. Le contenu scrollant sera visible en dessous.sticky left-0) a aussibg-[var(--muted)]/20— semi-transparent. Même problème de bleed-through.px-3dupliquée pour le casisParent && !isIntermediateParent: elle apparaît dans le bloc conditionnel du background ET dans le bloc conditionnel du padding. Pas de bug fonctionnel mais code confus.Reviewer automatique — needs-simplify
Le fix sticky avec color-mix est correct et résout le problème de transparence signalé au round 1. La logique de mois par défaut est correcte. Reste du code mort (navigateBudgetMonth) et une classe CSS dupliquée à nettoyer.
Suggestions de simplification
navigateBudgetMonthn'est plus utilisé nulle part (l'import a été retiré de ReportsPage.tsx au profit desetBudgetMonth). Supprimer la fonction et son export pour éviter le code mort.px-3apparaît en double pour les lignes parent dans le className du td sticky — une fois dans le ternaire de background (px-3 bg-[color-mix(...)]) et une fois dans le ternaire de padding original (${isParent && !isIntermediateParent ? "px-3" : paddingClass}). Retirerpx-3du premier ternaire et ne garder la logique de padding que dans le second.Reviewer automatique — needs-simplify
Les corrections des rounds précédents (color-mix pour les backgrounds, suppression de navigateBudgetMonth) sont bien appliquées. La logique de mois par défaut et le sticky sont corrects. Il reste une classe CSS dupliquée signalée au round 2 et une ligne illisible à nettoyer.
Suggestions de simplification
px-3est dupliquée pour le casisParent && !isIntermediateParent. Elle apparaît dans le premier ternaire (avec le bg) ET dans le second ternaire (logique de padding). C'était signalé au round 2. Fusionner les deux ternaires en un seul qui gère à la fois le background et le padding, par exemple :${isParent && !isIntermediateParent ? "px-3 bg-[color-mix(...)]" : isIntermediateParent ?${paddingClass} bg-[color-mix(...)]:${paddingClass} bg-[var(--card)]}— et retirer le second ternaire.<td>sticky des lignes de catégories fait ~300 caractères sur une seule ligne. Extraire la logique de classes dans une variable locale (ex.const stickyCellClasses = ...) au-dessus du JSX pour améliorer la lisibilité.Reviewer automatique — approved
Les corrections des rounds précédents sont toutes appliquées : backgrounds solides via color-mix (plus de transparence), suppression de navigateBudgetMonth et de l'import MonthNavigator, logique de mois par défaut correcte. Le code est propre et prêt pour merge.
Suggestions de simplification
<td colSpan={9}>du section header asticky left-0mais comme il couvre toutes les colonnes, le sticky est sans effet. Retirersticky left-0de cette cellule pour plus de clarté (cosmétique, non bloquant).4742f6444fto64b7d8d11b