update: use store injection in UserSelection component

fix: keypress not displaying working properly
This commit is contained in:
Braks
2021-07-14 23:48:19 +02:00
parent f5580b6d96
commit c7fda830a6
9 changed files with 83 additions and 72 deletions
+32 -25
View File
@@ -1,38 +1,45 @@
import { isInputDOMNode } from '../utils';
import { KeyCode } from '../types';
import { onMounted, ref } from 'vue';
import { onBeforeUnmount, onMounted, ref, Ref } from 'vue';
export default (keyCode?: KeyCode): boolean => {
export default (keyCode?: KeyCode): Ref<boolean> => {
const keyPressed = ref<boolean>(false);
onMounted(() => {
const downHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
event.preventDefault();
keyPressed.value = true;
}
};
const upHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
keyPressed.value = false;
}
};
const resetHandler = () => (keyPressed.value = false);
const bindEvents = () => {
if (typeof keyCode !== 'undefined') {
const downHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
event.preventDefault();
keyPressed.value = true;
}
};
const upHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
keyPressed.value = false;
}
};
const resetHandler = () => (keyPressed.value = false);
window.addEventListener('keydown', downHandler);
window.addEventListener('keyup', upHandler);
window.addEventListener('blur', resetHandler);
return () => {
window.removeEventListener('keydown', downHandler);
window.removeEventListener('keyup', upHandler);
window.removeEventListener('blur', resetHandler);
};
}
};
const unbindEvents = () => {
window.removeEventListener('keydown', downHandler);
window.removeEventListener('keyup', upHandler);
window.removeEventListener('blur', resetHandler);
};
onMounted(() => {
bindEvents();
});
onBeforeUnmount(() => {
unbindEvents();
});
return keyPressed.value;
return keyPressed;
};