fix(keyPress): reset on blur fixes #1931
This commit is contained in:
@@ -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]);
|
||||||
|
|||||||
Reference in New Issue
Block a user