@studiometa/js-toolkit
Version:
A set of useful little bits of JavaScript to boost your project! 🚀
49 lines (48 loc) • 1.33 kB
JavaScript
import { AbstractService } from "./AbstractService.js";
import { keyCodes } from "../utils/keyCodes.js";
function getInitialKeyCodes() {
return Object.fromEntries(Object.keys(keyCodes).map((key) => [key, false]));
}
class KeyService extends AbstractService {
static config = [[() => document, [["keydown"], ["keyup"]]]];
previousEvent = null;
props = {
event: null,
triggered: 0,
isUp: false,
isDown: false,
direction: "none",
...getInitialKeyCodes()
};
updateProps(event) {
const { props } = this;
props.event = event;
for (const [name, code] of Object.entries(keyCodes)) {
props[name] = code === event.keyCode;
}
if (!this.previousEvent) {
props.triggered = 0;
}
if (props.event.type === "keydown" && this.previousEvent?.type === "keydown") {
props.triggered += 1;
} else {
props.triggered = 1;
}
this.previousEvent = props.event;
props.direction = props.event.type === "keydown" ? "down" : "up";
props.isUp = props.event.type === "keyup";
props.isDown = props.event.type === "keydown";
return props;
}
handleEvent(event) {
this.trigger(this.updateProps(event));
}
}
function useKey() {
return KeyService.getInstance();
}
export {
KeyService,
useKey
};
//# sourceMappingURL=KeyService.js.map