Skip to content

refactor(front): factorise le code dupliqué du front (nav, utils, mixins SCSS)#8

Merged
julienrata merged 8 commits into
mainfrom
refactor/extract-shared-frontend
Jun 17, 2026
Merged

refactor(front): factorise le code dupliqué du front (nav, utils, mixins SCSS)#8
julienrata merged 8 commits into
mainfrom
refactor/extract-shared-frontend

Conversation

@julienrata

Copy link
Copy Markdown
Owner

Refactor à comportement constant (aucun changement d'URL, de slug, de clé localStorage ni de rendu visuel) pour réduire la duplication dans frontend/src/app/. Issu d'un audit ; chaque extraction est un commit isolé, npm run check (lint + build) vert après chacune.

Extractions

  • A — SequentialNavComponent (shared/components/sequential-nav/) : nav précédent/suivant des 4 pages de détail (template + ~70 lignes SCSS ×4) → 1 composant présentationnel.
  • B — core/utils/checklist-storage.ts : loadCheckedSet/persistCheckedSet (localStorage + try/catch) factorisés depuis code-review + phase-guide.
  • C — core/utils/sequential-nav.ts : neighborSlug (arithmétique d'index) factorisé depuis les 4 neighbor().
  • D — shared/styles/_detail.scss : mixins .code, socle .example, section de contenu, liste pour les 3 pages de détail.
  • E — shared/styles/_badge.scss : mixin badge de rôle (best-practices + phase-guide).
  • G — shared/styles/_practice-card.scss : mixin carte .practice (best-practices + phase-guide).

Premier système de mixins SCSS partagés du dépôt : inclus sous le bloc BEM local → le mixin se ré-expanse dans le scope de chaque composant, CSS émis et rendu identiques, scoping préservé. Variantes spécifiques laissées locales.

Hors périmètre

  • F (chrome des hubs : .hero, header, grille) est différé : il porte sur les mêmes fichiers qu'une feature « confettis » en cours (branche feat/confetti-festif) et le .hero n'y est plus identique d'un hub à l'autre. À reprendre sur un arbre propre.

Traçabilité

Décisions journalisées dans DECISIONS.md (deux entrées datées : factorisation des pages de détail, et introduction des mixins SCSS).

🤖 Generated with Claude Code

julienrata and others added 8 commits June 17, 2026 11:12
…s de détail

Les 4 pages de détail (SOLID, Design Patterns, Claude Code, phases de revue)
dupliquaient le même bloc de navigation précédent/suivant (template + ~70 lignes
de SCSS chacune, identiques au préfixe BEM près). Extraction d'un composant
présentationnel `app-sequential-nav` piloté par `prev`/`next`/`routeBase`/
`navLabel`. Comportement, routes et rendu inchangés.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
La lecture/écriture d'un Set d'ids cochés dans le localStorage (avec try/catch
et sérialisation Array) était dupliquée entre la checklist Code Review et les
phases de revue. Extraction de `loadCheckedSet`/`persistCheckedSet` dans
core/utils, la clé restant fournie par chaque composant. Comportement et clés
localStorage inchangés.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Les 4 pages de détail répétaient la même arithmétique d'index (indexOf, garde
-1, voisin à delta) pour résoudre le slug précédent/suivant. Extraction de
`neighborSlug` dans core/utils ; chaque composant ne garde que la résolution du
libellé propre à ses données. Comportement inchangé.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…agés

Les blocs SCSS identiques des 3 pages de détail (.code, socle .example +
légende, section de contenu, liste à puces) sont déplacés dans des mixins
`shared/styles/_detail.scss`, inclus sous le bloc BEM local de chaque feature.
Les variantes propres (--avoid/--prefer, bord coloré) restent locales. CSS émis
et rendu inchangés.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Le bloc `.badge` + variantes de rôle, identique entre l'aperçu des bonnes
pratiques et la page-support des phases, est déplacé dans un mixin
`shared/styles/_badge.scss` inclus dans les deux composants. CSS et rendu
inchangés (texte + teinte, jamais la couleur seule).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Le bloc `.practice` (icône + titre + accroche + pourquoi), quasi identique entre
l'aperçu des bonnes pratiques et la page-support des phases, est déplacé dans un
mixin `shared/styles/_practice-card.scss`. Le modificateur `--done` (titre barré)
reste local à la page-support. CSS et rendu inchangés.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@julienrata
julienrata merged commit 3d04356 into main Jun 17, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant