From e8f3667f1dff1d77107110ec3853e69a9e9ff362 Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Fri, 13 Sep 2024 10:43:25 +0200 Subject: [PATCH] fix: ensure shortcuts are not ignored when the focused element is a radio or checkbox --- .../EventsTrackers/KeysListenerTracker.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/component/EventsTrackers/KeysListenerTracker.tsx b/src/component/EventsTrackers/KeysListenerTracker.tsx index ca0b765c6..1af3402f4 100644 --- a/src/component/EventsTrackers/KeysListenerTracker.tsx +++ b/src/component/EventsTrackers/KeysListenerTracker.tsx @@ -490,7 +490,7 @@ function KeysListenerTracker(props: KeysListenerTrackerProps) { const handleOnKeyDown = useCallback( (e) => { - if (checkNotInputField(e) && mouseIsOverDisplayer.current) { + if (!ignoreElement(e) && mouseIsOverDisplayer.current) { const num = Number(e.code.slice(-1)) || 0; if (num > 0) { keysPreferencesListenerHandler(e, num); @@ -523,13 +523,15 @@ function KeysListenerTracker(props: KeysListenerTrackerProps) { ); } +const tags = new Set(['INPUT', 'TEXTAREA']); +const inputTypes = new Set(['checkbox', 'radio']); -function checkNotInputField(e: Event) { - const tags = ['input', 'textarea']; - const tagName = (e.composedPath()[0] as HTMLElement).tagName.toLowerCase(); - if (!tags.includes(tagName)) return true; - - return false; +function ignoreElement(e: Event) { + const element = e.target as HTMLInputElement; + return ( + (tags.has(element.tagName) && !inputTypes.has(element.type)) || + element.isContentEditable + ); } export default KeysListenerTracker;