2025-04-01 10:38:02 +09:00

56 lines
1.5 KiB
TypeScript

import { useSessionStorage } from 'react-use';
import { SceneGridRow, SceneObject, VizPanel } from '@grafana/scenes';
import { DashboardScene } from '../scene/DashboardScene';
import { SceneGridRowEditableElement } from '../scene/layout-default/SceneGridRowEditableElement';
import { EditableDashboardElement, isEditableDashboardElement } from '../scene/types/EditableDashboardElement';
import { DashboardEditableElement } from './DashboardEditableElement';
import { VizPanelEditableElement } from './VizPanelEditableElement';
export function useEditPaneCollapsed() {
return useSessionStorage('grafana.dashboards.edit-pane.isCollapsed', false);
}
export function getEditableElementFor(sceneObj: SceneObject | undefined): EditableDashboardElement | undefined {
if (!sceneObj) {
return undefined;
}
if (isEditableDashboardElement(sceneObj)) {
return sceneObj;
}
if (sceneObj instanceof VizPanel) {
return new VizPanelEditableElement(sceneObj);
}
if (sceneObj instanceof SceneGridRow) {
return new SceneGridRowEditableElement(sceneObj);
}
if (sceneObj instanceof DashboardScene) {
return new DashboardEditableElement(sceneObj);
}
return undefined;
}
export function hasEditableElement(sceneObj: SceneObject | undefined): boolean {
if (!sceneObj) {
return false;
}
if (
isEditableDashboardElement(sceneObj) ||
sceneObj instanceof VizPanel ||
sceneObj instanceof SceneGridRow ||
sceneObj instanceof DashboardScene
) {
return true;
}
return false;
}