SocialGouv / code-du-travail-numerique

Code du Travail Numérique
https://code.travail.gouv.fr
Apache License 2.0
103 stars 21 forks source link

[Analyse/POC] migration DSFR #5946

Open m-maillot opened 1 month ago

m-maillot commented 1 month ago

Définir ce qui est possible de faire techniquement :

1) est-il possible de migrer seulement certains composants de la page (par exemple le header, ou juste les tooltips, ...)

2) est-il possible de migrer seulement certaines pages du site ?

3) est-ce qu'avec le site actuel on peut changer le css pour ressembler plus au DSFR :

4) DSFR css vs react DSFR => pro & con

Viczei commented 2 weeks ago
Les pros et les cons: React Dsfr Css Dsfr
Plus haut niveau Plus bas niveau
Composants Html très long
Responsive Pas de burger menu
Moins de possibilités de customization Plus de possibilités

Les erreurs à corriger restantes:

Reste à tester: mettre le footer dsfr et faire une page entière avec composant plus complexe en dsfr

carolineBda commented 1 week ago
maxgfr commented 4 days ago
  1. est-il possible de migrer seulement certains composants de la page ?

Possible, mais très énergivore, car le CSS qu'on a en local clash avec celui du DSFR

  1. est-il possible de migrer seulement certaines pages du site ?

Totalement, deux pocs ont été fait :

On arrive via ces deux pocs faire du dsfr avec notre theme. Chaque pages sont indépendantes

  1. est-ce qu'avec le site actuel on peut changer le css pour ressembler plus au DSFR ?

Pour moi, oui, on pourrait uniformiser un header commun sans forcément utiliser nos composants et le DSFR pour harmoniser

  1. DSFR css vs react DSFR ?

Les difficultés rencontrées :

-> Pour le @gouvfr , j'ai des soucis de build au niveau de la prod que j'ai pas résolu, sinon en local c'est niquel -> Pour le react-dsfr, j'ai des soucis au niveau du wrapper qui fait que lorsqu'on navigue en utilisant le router next, ça garde l'ancien theme à cause du withDsfr

Pour corriger le react-dsfr, je force le reload lorsqu'on passe d'une page en dsfr à une page en non dsfr afin d'éviter de faire trop de reload inutile. Ci-dessous le code :

 useEffect(() => {
    const handleRouteChange = (url) => {
      const currentPath = router.pathname;
      const newAndCurrentPathAreDsfr =
        DSFR_READY_PATHS.includes(url) &&
        DSFR_READY_PATHS.includes(currentPath);
      const newAndCurrentPathAreNotDsfr =
        !DSFR_READY_PATHS.includes(url) &&
        !DSFR_READY_PATHS.includes(currentPath);
      const needToReload =
        newAndCurrentPathAreDsfr || !newAndCurrentPathAreNotDsfr;
      if (needToReload) {
        window.location.reload();
      }
    };

    router.events.on("routeChangeComplete", handleRouteChange);

    return () => {
      router.events.off("routeChangeComplete", handleRouteChange);
    };
  }, [router.events, router.pathname]);

Du coup, c'est pas super optimal, j'essaye de voir si on peut le faire plus finement mais j'en ai pas l'impression

maxgfr commented 3 days ago

A priori, le bug ne se produit pas en production, quand on retire le fix avec l'auto reload :