37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
import routes from 'src/router/modules';
|
|
import { useRouter } from 'vue-router';
|
|
|
|
let isNotified = false;
|
|
|
|
export default {
|
|
created: function () {
|
|
const router = useRouter();
|
|
const keyBindingMap = routes
|
|
.filter((route) => route.meta.keyBinding)
|
|
.reduce((map, route) => {
|
|
map['Key' + route.meta.keyBinding.toUpperCase()] = route.path;
|
|
return map;
|
|
}, {});
|
|
|
|
const handleKeyDown = (event) => {
|
|
const { ctrlKey, altKey, code } = event;
|
|
|
|
if (ctrlKey && altKey && keyBindingMap[code] && !isNotified) {
|
|
event.preventDefault();
|
|
router.push(keyBindingMap[code]);
|
|
isNotified = true;
|
|
}
|
|
};
|
|
|
|
const handleKeyUp = (event) => {
|
|
const { ctrlKey, altKey } = event;
|
|
if (!ctrlKey || !altKey) {
|
|
isNotified = false;
|
|
}
|
|
};
|
|
|
|
window.addEventListener('keydown', handleKeyDown);
|
|
window.addEventListener('keyup', handleKeyUp);
|
|
},
|
|
};
|