grafana_bak/public/app/features/dashboard-scene/edit-pane/MultiSelectedVizPanelsEditableElement.tsx
2025-04-01 10:38:02 +09:00

50 lines
1.7 KiB
TypeScript

import { v4 as uuidv4 } from 'uuid';
import { VizPanel } from '@grafana/scenes';
import { t } from 'app/core/internationalization';
import { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';
import { EditableDashboardElementInfo } from '../scene/types/EditableDashboardElement';
import { MultiSelectedEditableDashboardElement } from '../scene/types/MultiSelectedEditableDashboardElement';
import { dashboardSceneGraph } from '../utils/dashboardSceneGraph';
import { EditPaneHeader } from './EditPaneHeader';
export class MultiSelectedVizPanelsEditableElement implements MultiSelectedEditableDashboardElement {
public readonly isMultiSelectedEditableDashboardElement = true;
public readonly key: string;
constructor(private _panels: VizPanel[]) {
this.key = uuidv4();
}
public getEditableElementInfo(): EditableDashboardElementInfo {
return { name: t('dashboard.edit-pane.elements.panels', 'Panels'), typeId: 'panels', icon: 'folder' };
}
public useEditPaneOptions(): OptionsPaneCategoryDescriptor[] {
const header = new OptionsPaneCategoryDescriptor({
title: ``,
id: 'panel-header',
isOpenable: false,
renderTitle: () => (
<EditPaneHeader
title={t('dashboard.layout.common.panels-title', '{{length}} panels selected', {
length: this._panels.length,
})}
onDelete={() => this.onDelete()}
/>
),
});
return [header];
}
public onDelete() {
this._panels.forEach((panel) => {
const layout = dashboardSceneGraph.getLayoutManagerFor(panel);
layout.removePanel?.(panel);
});
}
}