fix(recipes): garde le popover de correction ouvert pendant la sélection d'un span #47
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/correction-popover-span-selection"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Corrige l'issue #36.
Le bug
Depuis la refonte du popover de correction des tech-steps (#29-#32), attacher un ingrédient / ustensile / température à une correction demande de surligner le passage concerné dans la description (invite
selectSpanHint). Le popover est explicitement conçu pour ne pas se fermer pendant cette sélection.En pratique il se fermait : le
<p>de la description (StepDescription,containerRef) est un frère du popover dans le DOM, donc lemousedownqui démarre le glisser-sélectionner est vu par le listener « clic extérieur » du popover comme un clic dehors →onClose()→closeActiveCorrection()remetpendingSpanRequestànullavant lemouseup. Lemouseuptombe alors dans la branche par défaut dehandleMouseUpet ouvre un nouveau popover traitant le texte sélectionné comme une proposition de technique fraîche — technique choisie + métadonnées déjà ajoutées perdues.Le correctif
TechStepCorrectionPopoveraccepte un prop optionneldescriptionContainerRef—StepDescriptionlui passe simplement soncontainerRefexistant. DanshandleClickOutside, unmousedowndont la cible est à l'intérieur de ce conteneur n'est plus traité comme « extérieur ».Sans risque de régression :
StepDescriptionpilote déjà explicitement chaque interaction utile dans la description (setActiveCorrectionsur clic d'une technique/température surlignée,setResolvedMetadataSpansur sélection quand une demande est en cours) — cette fermeture concurrente ne faisait qu'arriver à la même conclusion par coïncidence pour certains cas, et cassait tous les autres. Un clic vraiment hors zone ferme toujours le popover.Tests
TechStepCorrectionPopover.cy.tsxdisait ce cas « couvert par le scénario e2e » — qui n'existait pas. Ajouté dansapps/web/cypress/e2e/recipes.cy.ts: ouvre une vraieStepDescriptionéditable, ouvre une correction, clique « Ajouter un ingrédient », puis simule une vraie sélection de texte (document.createRange()+Selectionsur les nœudsdata-offset, séquencemousedown→mouseupréelle, pas un.click()), et vérifie que le même popover reste ouvert avec le sous-formulaire ingrédient — pas un popover vierge.Vérifié localement : 10/10 avec le correctif, échoue sur ce scénario sans lui.
🤖 Generated with Claude Code
testcassé par une course d'infra)