Files
IdeA/.ideai/memory/floatingwindow-focus-trap-mount-only.md
Blomios ffc458e477 docs(memory): notes projet du sprint UI rework et des tickets #7/#14/#16/#17/#18/#25/#28
Capitalise les notes durables produites pendant le sprint UI rework et les
tickets livrés depuis. Commit séparé du code : `.ideai/memory/` est le store
durable versionné, il ne doit jamais être mélangé aux commits de feature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 08:38:16 +02:00

1.1 KiB

name, description, metadata
name description metadata
floatingwindow-focus-trap-mount-only Le focus-trap de FloatingWindow ne doit dépendre que du mount ; sinon un onClose instable vole le focus à chaque frappe.
type
reference

Le primitif frontend/src/shared/ui/FloatingWindow.tsx a un useEffect focus-trap qui appelle (first ?? node)?.focus(). Sa dépendance doit rester [] (mount-only), et onClose doit être lu via un onCloseRef maintenu à jour.

Pourquoi : les appelants (ex. TicketDetail.requestClose) passent souvent un onClose recréé à chaque render. Si l'effet dépend de [onClose], chaque frappe dans un input contrôlé de la fenêtre → re-render → nouvelle identité onClose → l'effet se ré-arme → focus renvoyé au premier focusable → l'utilisateur ne peut taper qu'UNE lettre à la fois (bug #17, corrigé 2026-07-07).

Comment l'appliquer : ne jamais remettre onClose (ni une autre prop changeante) dans les deps de cet effet ; router les callbacks via une ref. Régression couverte par le test « #17 focus-loss bug » dans FloatingWindow.test.tsx. Voir ticket16-menus-floating-delivered-devfrontend.