grafana_bak/public/app/core/services/KeybindingSet.ts
2025-04-01 10:38:02 +09: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 = [];
}
}