Closed alemangui closed 2 weeks ago
Petit commentaire - le contraste sur les champs disabled
est pas fort, alors si les instructrices/viseurs utilisent des écrans un peu vieux ça pourrait être difficile à lire le commentaire. L'alternatif c'est de fournir le texte en p
?
@hfroot vu que c'est le champ DSFR qui fournit ces options je propose deux options :
En tout cas selon moi c'est hors scope de cette PR car seraient affectées toutes les instances du DSFRInput disabled
Closes #1217
Contexte
Aujourd'hui on a un seul champ "notes privées" qui est partagé par l'instructrice et la viseuse. Or, avant il y en avait deux : un champ modifiable par l'instructrice et un autre par la viseuse. Cette PR vise à rétablir ce fonctionnement
Scope
:information_source: Rappel technique
Le champ .
private_notes
existait dans le modèle déclaration mais n'étais jamais modifié via l'endpoint REST /declarations/Le champ était peuplé lors des changement de/observe-with-visa/ , declarations//refuse-visa/ , etc.
state
en passant par la state machine, çad des endpoints RPC comme declarations/Le champ DSFRInput pour les notes privées était donc placé dans l'onglet de la décision et était envoyé comme payload de la requête RPC qui changeait le state de la déclaration :
:new: Nouveau champ
Maintenant on a deux champs :
private_notes_instruction
etprivate_notes_visa
.Ces deux champs sont affichés en bas de chaque onglet - non seulement ceux de la décision. Lors de la modification de ces champs on envoie une requête PATCH sur l'endpoint REST /declarations/ .
Pourquoi deux migrations ?
Afin de ne pas perdre l'info de l'ancien champ
private_notes
on a du faire une première migration de renommage de champ (versprivate_notes_instruction
) et une autre d'ajout du nouveau champ - sinon Django pense qu'il s'agit d'une suppression. J'aurais pu merger ces deux migrations mais j'ai préféré être explicite.:key: Changement de permissions et serialiser
Le fait que maintenant on utilise l'endpoint REST pour modifier les notes privées fait que les instructrices et viseuses ont la permission de modifier une déclaration : donc d'y accéder avec des methods dites non SAFE (PATCH, PUT, etc).
Le serializer dynamiquement fait l'ajout des champs
private_notes_instruction
etprivate_notes_visa
en dépendant des rôles de la personne qu'y accède de forme à s'assurer que l'instructrice ne peut pas modifier le champ de la viseuse et vice-versa.:paintbrush: Changement de UI
Désormais les champs sont affichés en bas de chaque onglet et non seulement à la fin.
Le changement déclenche une requête pour sauvegarder le commentaire (avec un debounce pour éviter d'avoir une requête qui sort à chaque caractère tapé).
Démo
Du côté de l'instruction :
https://github.com/user-attachments/assets/9a0ee617-8c72-43c5-a71c-5030a33655cf
Du côté du visa :
https://github.com/user-attachments/assets/c5b4f28b-701a-4088-9d8b-d6f01f2bf4fd
Après cet échange l'instructrice verrait aussi le commentaire de la viseuse :