From 82f93215067774a469b84e990525c37af4d7bf8b Mon Sep 17 00:00:00 2001
From: tristan
Date: Thu, 25 Jun 2026 08:42:42 +0000
Subject: [PATCH] =?UTF-8?q?fix(input)=20:=20InputAutocomplete=20garde=20la?=
=?UTF-8?q?=20valeur=20coll=C3=A9e=20apr=C3=A8s=20s=C3=A9lection=20(MUI-48?=
=?UTF-8?q?)=20(#87)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Contexte — MUI-48
« Le champ adresse disparaît après un copier-coller » (Malio UI, bug frontend).
## Repro exacte
1. Taper une adresse, **sélectionner une suggestion** dans la liste.
2. Sans re-cliquer dans le champ : `Ctrl+A` puis `Ctrl+V` pour remplacer.
3. → Le champ se **vide** (label qui redescend, dropdown « Tapez pour rechercher »), la valeur collée est perdue.
À la souris (re-clic dans le champ) le bug ne se produit pas.
## Cause racine
`onSelect` repassait `isFocused` à `false` alors que l'input **garde le focus DOM** (l'option est cliquée en `mousedown.prevent`). Au collage, `onInput` émet `update:modelValue(null)` ; le `watch` de synchronisation, protégé par le seul `isFocused`, remettait alors `inputValue` à `''`.
## Correctif
`onInput` resynchronise `isFocused = true` : recevoir un évènement `input` prouve que le champ est en cours d'édition. Le `watch` se protège correctement et ne stompe plus la valeur collée. Correctif d'une ligne, au point exact de la cause.
## Tests / vérifs
- Test de non-régression colocalisé (séquence sélection → `Ctrl+A`/`Ctrl+V`) — échoue sans le fix, passe avec.
- Suite complète : **1057/1057** tests OK, lint sans erreur.
- Page playground : nouvelle section **allowCreate + BAN** dédiée au test manuel.
- `CHANGELOG.md` : entrée `Fixed` MUI-48.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reviewed-on: https://gitea.malio.fr/MALIO-DEV/malio-layer-ui/pulls/87
Co-authored-by: tristan
Co-committed-by: tristan
---
.../composant/input/inputAutocomplete.vue | 61 +++++++++++++++++++
CHANGELOG.md | 1 +
.../malio/input/InputAutocomplete.test.ts | 38 +++++++++++-
.../malio/input/InputAutocomplete.vue | 5 ++
4 files changed, 104 insertions(+), 1 deletion(-)
diff --git a/.playground/pages/composant/input/inputAutocomplete.vue b/.playground/pages/composant/input/inputAutocomplete.vue
index dfac49b..89a2119 100644
--- a/.playground/pages/composant/input/inputAutocomplete.vue
+++ b/.playground/pages/composant/input/inputAutocomplete.vue
@@ -47,6 +47,31 @@
+
+
allowCreate + BAN (test MUI-48)
+
+ Tapez au moins 3 caractères → suggestions de la Base Adresse Nationale.
+ Repro : sélectionnez une adresse dans la liste, puis
+ Ctrl+A et Ctrl+V pour coller une autre valeur
+ par-dessus. La valeur collée doit rester (le champ ne doit ni se vider, ni faire redescendre le label).
+
+
+
+ v-model : {{ banValue ?? 'null' }}
+
+
+
Avec création (allowCreate)
{
const onSelectApi = (option: Option | null) => {
apiSelected.value = option
}
+
+// allowCreate + BAN (test MUI-48) : recherche nationale sur la Base Adresse Nationale.
+const banValue = ref(null)
+const banOptions = ref