In root folder, install all dependencies (also installs the backend dependencies):
pnpm install
pnpm dev-in-memory
pnpm dev
You can typecheck the project with :
pnpm typecheck
If you want to make sure everything is fine before pushing for exemple, you can run :
pnpm fullcheck
The frontend and the backend have some shared code which is located in the shared
folder.
It is a workspace, used in front and in back
Le projet Immersion Facilitée se base sur le Système de Design de l'État- DSFR via @codegouvfr/react-dsfr.
-
dans la très grosse majorité des cas, si le besoin est suffisamment proche de ce qui est fourni, on voudra implémenter des composants existants via
react-dsfr
. -
dans des cas plus rare de besoin spécifique au projet, on se permettra de créer un composant dans notre lib
react-design-system/immersionFacile
Ces composants ne sont que des composants de présentation (pas de logique liée à l'app - Redux, appels externes, etc) mais peuvent charger du CSS / Sass custom (via Sass to TS)
Le projet utilise la méthodo BEM pour nommage ses blocks custom, préfixés par im
+ le nom du composant React, le tout en kebab case. Ex : pour le composant HeroHeader
, le résultat attendu est .im-hero-header
Pour les éléments et modifiers, nous utiliserons la syntaxe :
.my-block__element--modifier
, sans profondeur additionnelle, chaque partie étant en kebab case.
- le DSFR propose un lot de classes utilitaires qu'il faut utiliser en priorité. Ex :
.fr-mt-4w
plutôt quemargin-top: 3rem
. - on utilise toujours les classes du DSFR et les classes custom enrobés via les utilitaires de
react-dsfr
ettss-react
fr.cx()
et (éventuellement)cx()
. Ex:cx(fr.cx("fr-mt-4w"), Styles.imageWrapper)
- si une règle CSS ne trouve pas d'équivalent dans le DSFR, on peut se permettre de la déclarer en CSS ou Sass custom.
- à la racine du projet
pnpm run dev
: pour lancer le projetpnpm playwright test:local
pour lancer les tests
sudo apt-get update && sudo apt-get install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb
Playwright est lancé en CI pour valider nos parcours principaux. En cas de souci, si les tests ne passent pas, il est possible d'accéder au trace viewer de la PR concernée. Par exemple, sur cette PR, le job Playwright tests n'est pas passé. On a un peu de détail dans les annotations faites directement sous le workflow, et en scrollant en bas de page, on a accès au report, à télécharger (zip). Une fois téléchargé :
- dezipper l'archive (ça doit produire un dossier
playwright-report
) - se placer avec un terminal dans le dossier contenant le dossier
playwright-report
- lancer
npx playwright show-report
(par défaut, il va aller chercher le dossierplaywright-report
), mais sinon il est possible de lancernpx playwright show-report my-other-dir
- le navigateur va s'ouvrir et afficher le report
- en cliquant sur un test qui a echoué, la trace sera dispo en cliquant sur la miniature en bas de page
Sass to TS permet de générer des fichiers TS à partir de fichier Sass. C'est un moyen simple et pratique pour s'assurer que les classes que l'on utilise sont toujours employées et prévenir le dev en cas de faute de frappe, autocomplétion ou changement de naming.
Il s'emploie de la façon suivante :
pnpm make-styles im-search-page src/app/pages/search/
Dans cet exemple
im-search-page
est le nom du composant (block) que l'on va utiliser (BEM)src/app/pages/search/
est le path contenant(s) le fichier(s) à convertir en TS
Résultat attendu :
- à partir de ce fichier : https://github.com/gip-inclusion/immersion-facile/blob/dev/front/src/app/pages/search/SearchPage.scss
- on obtient un fichier
${fileName}.styles.ts
, soit : https://github.com/gip-inclusion/immersion-facile/blob/dev/front/src/app/pages/search/SearchPage.styles.ts - qui peut être utilisé via un import par défaut, exemple : https://github.com/gip-inclusion/immersion-facile/blob/dev/front/src/app/pages/search/SearchPage.tsx#L29