fix(keyPress): reset on blur fixes #1931

This commit is contained in:
moklick
2022-03-23 18:14:37 +01:00
parent 83f094b711
commit 0f67bc5c8e
+3 -11
View File
@@ -6,7 +6,7 @@ type Keys = Array<string>;
type PressedKeys = Set<string>; type PressedKeys = Set<string>;
type KeyOrCode = 'key' | 'code'; type KeyOrCode = 'key' | 'code';
export interface UseKeyPressOptions { export interface UseKeyPressOptions {
target: Document | HTMLElement | ShadowRoot | null; target: Window | Document | HTMLElement | ShadowRoot | null;
} }
const doc = typeof document !== 'undefined' ? document : null; const doc = typeof document !== 'undefined' ? document : null;
@@ -66,24 +66,16 @@ export default (keyCode: KeyCode | null = null, options: UseKeyPressOptions = {
setKeyPressed(false); setKeyPressed(false);
}; };
const onVisibilityChange = () => {
if (document.hidden) {
resetHandler();
}
};
options?.target?.addEventListener('keydown', downHandler as EventListenerOrEventListenerObject); options?.target?.addEventListener('keydown', downHandler as EventListenerOrEventListenerObject);
options?.target?.addEventListener('keyup', upHandler as EventListenerOrEventListenerObject); options?.target?.addEventListener('keyup', upHandler as EventListenerOrEventListenerObject);
options?.target?.addEventListener('blur', resetHandler); window.addEventListener('blur', resetHandler);
options?.target?.addEventListener('visibilitychange', onVisibilityChange);
return () => { return () => {
pressedKeys.current.clear(); pressedKeys.current.clear();
options?.target?.removeEventListener('keydown', downHandler as EventListenerOrEventListenerObject); options?.target?.removeEventListener('keydown', downHandler as EventListenerOrEventListenerObject);
options?.target?.removeEventListener('keyup', upHandler as EventListenerOrEventListenerObject); options?.target?.removeEventListener('keyup', upHandler as EventListenerOrEventListenerObject);
options?.target?.removeEventListener('blur', resetHandler); window.removeEventListener('blur', resetHandler);
options?.target?.removeEventListener('visibilitychange', onVisibilityChange);
}; };
} }
}, [keyCode, setKeyPressed]); }, [keyCode, setKeyPressed]);