grafana/public/app/core/services/KeybindingSet.ts
Torkel Ödegaard 7759e2f8a3
DashboardScene: Panel Keybindings and some others (#76233)
* DashboardScene: Keybindings like v to view panel

* more bindings

* Fix imports

* Progress

* Nit update

* Fix merge

---------

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
2023-10-20 06:22:56 -07:00

39 lines
787 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 = [];
}
}