Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temps passé par un bénéfiaire d'un service #23

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

jbuget
Copy link
Contributor

@jbuget jbuget commented Oct 23, 2024

ℹ️ PR créée à partir des PR originales gip-inclusion/dora-back#369 et gip-inclusion/dora-front#446 suite à la création du monorepo.

Backend

🍣 Problème

En tant que Éditeur d’un Service pour ma Structure, je souhaite indiquer, pour le-dit service, le temps passé (en nombre d'heures totales, avec une éventuelle précision sur la répartition) par le Bénéficiaire afin d’aider à l’orientation d’un service par les Accompagnateurs tout en satisfaisant aux obligations légales à venir (loi Travail 2025).

🦄 Solution

Ajouter 1 section ("Participation du bénéficiaire") avec 2 champs dans le formulaire d'édition d'une structure :

  • 1 champ numérique pour indiquer le total des heures (ex : 18)
  • 1 champ textuel pour préciser la répartition des heures (ex : "6h par semaine pendant 3 semaines")

image

✅ Pour tester

🍀 Misc

Frontend

🍣 Problème

Il s'agit de la partie front de gip-inclusion/dora-back#369

🦄 Solution

On ajoute une section dans le formulaire d'édition d'un service.

Cette nouvelle section permet de définir 2 champs :

  • Nombre d'heures totales passées par le bénéficiaires service (Number)
  • Un champs de précision de la répartition des heures (String)

Côté implémentation, on utilise, modifie et enrichit le composant <BasicInputField/> pour qu'il supporte correctement le type "number".

Jusqu'à présent, on l'utilisait avec des types ["text", "tel", "email"] tous basés sur une valeur de type String. Il a fallu l'adapter pour supporter aussi le type Number. Conséquence : nécessite quelques .toString() à certains endroits.

Sur le modèle du type "tel", il a fallu définir des handlers spécifiques pour s'assurer que le format Number reste valide.

Côté utilisateur, on empêche l'utilisateur de saisir autre chose que des chiffres. On fait en sorte qu'il puisse quand même effacer la valeur et enregistrer (sans erreur) le formulaire.
🍒 Bonus

1/ Test de composants

Cette PR ajoute le support de tests de composant (rendu et comportement).

Pour cela on ajoute la bibliothèque Testing Library, compatible et préconisée avec Svelte(kit) / Vitest.

Les plus grosses difficultés rencontrées :

  • se rendre compte que le rendu du composant est dépendant du schéma du formulaire qui embarque le composant
  • parvenir à renseigner et injecter le schéma dans le test (finalement, c'est tout simple)

2/ Vite UI

Par ailleurs, cette PR permet aussi de lancer les tests via l'éditeur graphique.

Cela se fait avec la commande : npm run test:ui

Aucune difficulté ni rien de notable (à part que c'est assez cool).

3/ Ignore le répertoire .history

Il s'agit d'un répertoire utilisé par certaines extensions d'IDE (comme VSCode).

Par souci de se prémunir d'ajout intempestif qui pourrait perturber Git ou ESLint, on les ajoute aux fichiers à ignorer (.gitignore et .eslintignore).

4/ Stabiliser la CI

J'ai rencontré un souci récurrent de CI, peut-être parce que je suis sous Mac (mais pas sûr). Apparemment, il s'agit d'un problème connu de Vite depuis des mois, cf. cette issue GitHub.

La solution proposée par de multiples contributeur a fonctionné pour moi. Je propose de la conserver sur le projet.

👓 Revue de code

On peut y aller commit-par-commit 🧘‍♂️.

@ggounot ggounot changed the title Feat/temps passe par service Temps passé par un bénéfiaire d'un service Oct 23, 2024
@jbuget jbuget added feature New feature or request blocked labels Oct 28, 2024
Added a nnew section "Beneficiary participation" with spending_time_* fields (total hours and operating details)

Needed to enrich / fix the basic-input-field component in order to correctly support numeric value.

In order to do this, we needed to add type `number` to variable `value`. Thus, we had to force `value.toString()` in some places in the component. Not very satisfying, but I did not have clever idea.
* Add testing-library framework for Svelte (with jsdom)
* Fix TypeScript config
* Add an example of component testing with BasicInputField

Good-to-konw:
In order to render, <BasicInputField/> requires that the given ID to be included (defined) in the associated form schema. It is why the tests use `spendingTimeTotalHours`.

This mechanism is based on a Svelte $store object (so the '$' character in the template). I thought I had to defined "context" (in `render()` method) but they are two separate concepts. The solution was simplest, just importing and changing value of the form schema.
It seems that there is a well known problem since few months, see vitejs/vite#15532

Lots of people recommend to add this optional dependency. Don't understand where, when and by whom it is required in the project.
Added .history to both .gitignore and .eslintignore to prevent temporary files created by the VSCode extension from being tracked by Git or linted by ESLint.
@jbuget jbuget force-pushed the feat/temps-passe-par-service branch from dcf448c to 6e11310 Compare November 18, 2024 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blocked feature New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants