mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* DashboardScene: Panel menu updates, adding explore action * DashboardScene: Panel menu updates, adding explore action * Initial test * Update * share modal * Update * rename * Update tests * Fix test * update * Fix tooltip wording * Update translation file * fix e2e * Extract ShareLinkTab component * rename to overlay --------- Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import { AppEvents } from '@grafana/data';
|
|
import { locationService } from '@grafana/runtime';
|
|
import { SceneObjectRef, SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '@grafana/scenes';
|
|
import appEvents from 'app/core/app_events';
|
|
|
|
import { PanelInspectDrawer } from '../inspect/PanelInspectDrawer';
|
|
import { findVizPanelByKey } from '../utils/utils';
|
|
|
|
import { DashboardScene, DashboardSceneState } from './DashboardScene';
|
|
|
|
export class DashboardSceneUrlSync implements SceneObjectUrlSyncHandler {
|
|
constructor(private _scene: DashboardScene) {}
|
|
|
|
getKeys(): string[] {
|
|
return ['inspect', 'viewPanel'];
|
|
}
|
|
|
|
getUrlState(): SceneObjectUrlValues {
|
|
const state = this._scene.state;
|
|
return { inspect: state.inspectPanelKey, viewPanel: state.viewPanelKey };
|
|
}
|
|
|
|
updateFromUrl(values: SceneObjectUrlValues): void {
|
|
const { inspectPanelKey: inspectPanelId, viewPanelKey: viewPanelId } = this._scene.state;
|
|
const update: Partial<DashboardSceneState> = {};
|
|
|
|
// Handle inspect object state
|
|
if (typeof values.inspect === 'string') {
|
|
const panel = findVizPanelByKey(this._scene, values.inspect);
|
|
if (!panel) {
|
|
appEvents.emit(AppEvents.alertError, ['Panel not found']);
|
|
locationService.partial({ inspect: null });
|
|
return;
|
|
}
|
|
|
|
update.inspectPanelKey = values.inspect;
|
|
update.overlay = new PanelInspectDrawer({ panelRef: new SceneObjectRef(panel) });
|
|
} else if (inspectPanelId) {
|
|
update.inspectPanelKey = undefined;
|
|
update.overlay = undefined;
|
|
}
|
|
|
|
// Handle view panel state
|
|
if (typeof values.viewPanel === 'string') {
|
|
const panel = findVizPanelByKey(this._scene, values.viewPanel);
|
|
if (!panel) {
|
|
appEvents.emit(AppEvents.alertError, ['Panel not found']);
|
|
locationService.partial({ viewPanel: null });
|
|
return;
|
|
}
|
|
|
|
update.viewPanelKey = values.viewPanel;
|
|
} else if (viewPanelId) {
|
|
update.viewPanelKey = undefined;
|
|
}
|
|
|
|
if (Object.keys(update).length > 0) {
|
|
this._scene.setState(update);
|
|
}
|
|
}
|
|
}
|