|
|
@@ -3,6 +3,7 @@ import _ from 'lodash';
|
|
|
|
|
|
import coreModule from 'app/core/core_module';
|
|
|
import appEvents from 'app/core/app_events';
|
|
|
+import { encodePathComponent } from 'app/core/utils/location_util';
|
|
|
|
|
|
import Mousetrap from 'mousetrap';
|
|
|
import 'mousetrap-global-bind';
|
|
|
@@ -13,7 +14,7 @@ export class KeybindingSrv {
|
|
|
timepickerOpen = false;
|
|
|
|
|
|
/** @ngInject */
|
|
|
- constructor(private $rootScope, private $location) {
|
|
|
+ constructor(private $rootScope, private $location, private datasourceSrv) {
|
|
|
// clear out all shortcuts on route change
|
|
|
$rootScope.$on('$routeChangeSuccess', () => {
|
|
|
Mousetrap.reset();
|
|
|
@@ -176,6 +177,17 @@ export class KeybindingSrv {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ this.bind('x', async () => {
|
|
|
+ if (dashboard.meta.focusPanelId) {
|
|
|
+ const panel = dashboard.getPanelById(dashboard.meta.focusPanelId);
|
|
|
+ const datasource = await this.datasourceSrv.get(panel.datasource);
|
|
|
+ if (datasource && datasource.supportsExplore) {
|
|
|
+ const exploreState = encodePathComponent(JSON.stringify(datasource.getExploreState(panel)));
|
|
|
+ this.$location.url(`/explore/${exploreState}`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
// delete panel
|
|
|
this.bind('p r', () => {
|
|
|
if (dashboard.meta.focusPanelId && dashboard.meta.canEdit) {
|