Files
grafana/public/app/core/services/KeybindingSet.ts
Josh Hunt 407bbe1f4b Keybinds: Vendor Mousetrap (#88603)
* vendor mousetrap

* fix js lint errors

* name to .ts - start refactoring to typescript

* refactor Mousetrap to valid typescript

rename local functions/variables
update types of CallbackInfo
Specify MouseCallback and cleanup types

* Use vendored mousetrap

* use vendored mousetrap

* add globalBind, and remove dependency on external mousetrap

* Update public/app/core/services/keybindingSrv.ts

Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>

---------

Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
2024-06-04 09:35:19 +01:00

39 lines
793 B
TypeScript

import { mousetrap } from './mousetrap';
export interface KeyBindingItem {
/** Key or key pattern like mod+o */
key: string;
/** Defaults to keydown */
type?: string;
/** The handler callback */
onTrigger: () => void;
}
/**
* Small util to make it easier to add and unbind Mousetrap keybindings
*/
export class KeybindingSet {
private _binds: KeyBindingItem[] = [];
addBinding(item: KeyBindingItem) {
mousetrap.bind(
item.key,
(evt) => {
evt.preventDefault();
evt.stopPropagation();
evt.returnValue = false;
item.onTrigger();
},
'keydown'
);
this._binds.push(item);
}
removeAll() {
this._binds.forEach((item) => {
mousetrap.unbind(item.key, item.type);
});
this._binds = [];
}
}