[Simplifions] Initie un système d'articles et crée les 3 premiers#1244
[Simplifions] Initie un système d'articles et crée les 3 premiers#1244DorineLam wants to merge 35 commits into
Conversation
…une d'elles, modifie la structure des fichiers pour faciliter la rédaction
- Dissociation h1/title SEO dans SimplifionsArticleLayout - Composable useTopicsBySlug pour embarquer des topics (solutions et cas d'usages) par le slug, dans les articles - Nouveau composant SimplifionsTopicSpotlight (card + commentaire éditorial) - Nouveau composant SimplifionsChecklist - Props de visibilité granulaires sur SimplifionsSolutionCard et SimplifionsCasDusageCard - Refonte GuideBasePetitesCollectivites avec les nouveaux composants - Templates _templates/
…toujours marqué à aujourd'hui
…cs (solutions et cas d'usages) mentionnés dans l'article + Permet de mettre plusieurs solutions dans même composant Spotlight + Fix problème d'affichage du breadscrumb
… de l'image sur la SimplifionsSolutionCard
… guide de la chronologie juridique du DLNUF
…oire le champ title
|
/deploy simplifions |
abulte
left a comment
There was a problem hiding this comment.
Pretty neat articles :-) The PR is huge, so I used an LLM to help me write the review below. Overall, I think multiple things can be made simpler, and I flagged critical issues that need to be addressed.
Unnecessary complexity (global remarks)
Custom carousels (2×)
SimplifionsArticleCarousel and SimplifionsArticleTopicsCarousel each implement their own ResizeObserver, onScroll tracking, and prev/next button logic — nearly identical, not shared. The prev/next buttons are hidden on desktop (v-show="hasOverflow") so this complexity exists purely for mobile, where native swipe already works. The horizontal scroll is pure CSS; all the JS is only there for buttons that are invisible on wide screens.
Topics registry (provider/inject)
useArticleTopicsRegistry + articleTopicsRegistryKey + provideArticleTopicsRegistry + injectArticleTopicsRegistry — ~40 lines of infrastructure so that inline TopicSpotlight components can self-register and auto-populate the bottom carousel. For static content, passing an explicit relatedSlugs prop to the layout would be simpler and more predictable. The current approach creates invisible coupling and random shuffling on every render.
buildSimplifionsGradientImage
Parses hex colors from a CSS gradient string with a regex, generates an SVG, encodes it as a data URL — just to produce a placeholder image for article cards. A plain CSS background-color on the card would do the same job.
Custom CSS instead of DSFR utilities
New components use raw rem, clamp(), rgba(), hardcoded hex values throughout, while the rest of the app uses DSFR spacing utilities (fr-mt-4w etc.) and design tokens.
_templates/ in src/ — Copy-paste starter files for future article authors, not imported anywhere, referenced only in a README. Files inside src/ will drift silently as the real components evolve and give a false sense of being maintained. Either delete them and point to an existing article as the example to copy, or move the guidance outside src/ (docs folder, wiki).
Critical precise issues
pnpm run typecheck does not pass, many type errors
pnpm run lint does not pass, many lint errors
App.vue — Removes class="fr-mt-16w" from DsfrFooter and adds a global .fr-footer { margin-top: 0 !important; }. Affects all pages, fights DSFR with !important, reason unclear.
SimplifionsArticleTopicsCarousel — ResizeObserver created in onMounted but never disconnected. Memory leak on route change.
topicBySlug() cast — Can return undefined but is immediately cast as TopicSolution / as TopicCasUsage. Silent crash if a topic fails to load.
ArticleChronologieJuridiqueDLNUF.vue — Added to the repo and imported in routes.ts despite being commented out. Contains lorem ipsum, href="lien", and empty <time> entries. Should probably be removed.
SimplifionsArticleSection.vue — background-color: rgb(167, 212, 205); padding: 2px 4px hardcoded on section titles. Should use a DSFR color token.
TOC IntersectionObserver — Legitimate if a bit complex feature, but the implementation is finicky in Safari at least (wrong section highlights).
Commented-out code shipped — formatRelativeIfRecentDate in SimplifionsCasDusageCard.vue commented out but import kept; ditesLeNousUneFois commented out in routes.
…ais ne le sont pas
…sages à la fin d'un article
Merci ! Et désolée, j'aurai sûrement dû décomposer mieux ma PR... et m'occuper des tests !
✅ J'ai renommé les composants car objectivement ils n'ont pas du tout la même fonctionnalité, le premier est un carrousel, d'articles que je peux choisir. Le second est une sélection automatique de tous les cas d'usages et de solutions d'un article Nouveaux noms :
🤔 Ici, je suis embêtée, je veux garder le fonctionnement actuel, c'est à dire que le composant va chercher automatiquement les solutions et cas d'usages cités dans l'article. La proposition qui semble être faite ici est de copier/coller à la main une deuxième fois les slugs, déjà renseignés dans l'article.
✅ Vu : simplifié ici => 04e1a48
✅ Corrigé dans f31f328
✅ Ok j'ai supprimé les templates et complété de façon détaillé le fichier
✅ Fait
✅ Retiré dans f31f328
⚙️ Fixé ici mais pas certaine du fix (je veux bien ta revue à ce sujet) : 1bb3643
⚙️ Fixé ici mais pas certaine du fix (je veux bien ta revue à ce sujet) : e5799d0
🤔 Oui c'est un article en brouillon, je pourrais surement le déplacer dans une branche séparée et ne pas le merger mais je crains de faire une erreur de manip dans git.
🤔 Je sais que ce n'est pas une class DSFR mais j'utilise déjà la couleur sur toutes les fiches cas d'usages et solutions donc à ce stade je préfère laisser comme ça.
✅ Fait ici 9b0034f
✅ Fait ici 92ab212 |
Cette PR vise à ajouter un système d'articles dans Simplifions :
Création de 2 articles supplémentaires :
Exemple d'article
Index des articles et dossiers
Page d'accueil