mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 01:23:32 -06:00
Scenes/Repeats: Show reduced panel menu for repeat panels (#84085)
This commit is contained in:
parent
b2b825db69
commit
8206a23061
@ -33,7 +33,7 @@ import { UnlinkLibraryPanelModal } from './UnlinkLibraryPanelModal';
|
||||
/**
|
||||
* Behavior is called when VizPanelMenu is activated (ie when it's opened).
|
||||
*/
|
||||
export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
export function panelMenuBehavior(menu: VizPanelMenu, isRepeat = false) {
|
||||
const asyncFunc = async () => {
|
||||
// hm.. add another generic param to SceneObject to specify parent type?
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
||||
@ -64,7 +64,7 @@ export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
href: getViewPanelUrl(panel),
|
||||
});
|
||||
|
||||
if (dashboard.canEditDashboard()) {
|
||||
if (dashboard.canEditDashboard() && !isRepeat) {
|
||||
// We could check isEditing here but I kind of think this should always be in the menu,
|
||||
// and going into panel edit should make the dashboard go into edit mode is it's not already
|
||||
items.push({
|
||||
@ -86,7 +86,7 @@ export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
shortcut: 'p s',
|
||||
});
|
||||
|
||||
if (dashboard.state.isEditing) {
|
||||
if (dashboard.state.isEditing && !isRepeat) {
|
||||
moreSubMenu.push({
|
||||
text: t('panel.header-menu.duplicate', `Duplicate`),
|
||||
onClick: () => {
|
||||
@ -105,7 +105,7 @@ export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
},
|
||||
});
|
||||
|
||||
if (dashboard.state.isEditing) {
|
||||
if (dashboard.state.isEditing && !isRepeat) {
|
||||
if (parent instanceof LibraryVizPanel) {
|
||||
moreSubMenu.push({
|
||||
text: t('panel.header-menu.unlink-library-panel', `Unlink library panel`),
|
||||
@ -153,7 +153,7 @@ export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
});
|
||||
}
|
||||
|
||||
if (dashboard.canEditDashboard() && plugin && !plugin.meta.skipDataQuery) {
|
||||
if (dashboard.canEditDashboard() && plugin && !plugin.meta.skipDataQuery && !isRepeat) {
|
||||
moreSubMenu.push({
|
||||
text: t('panel.header-menu.get-help', 'Get help'),
|
||||
onClick: (e: React.MouseEvent) => {
|
||||
@ -200,7 +200,7 @@ export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
});
|
||||
}
|
||||
|
||||
if (dashboard.state.isEditing) {
|
||||
if (dashboard.state.isEditing && !isRepeat) {
|
||||
items.push({
|
||||
text: '',
|
||||
type: 'divider',
|
||||
@ -223,6 +223,8 @@ export function panelMenuBehavior(menu: VizPanelMenu) {
|
||||
asyncFunc();
|
||||
}
|
||||
|
||||
export const repeatPanelMenuBehavior = (menu: VizPanelMenu) => panelMenuBehavior(menu, true);
|
||||
|
||||
async function getExploreMenuItem(panel: VizPanel): Promise<PanelMenuItem | undefined> {
|
||||
const exploreUrl = await tryGetExploreUrlForPanel(panel);
|
||||
if (!exploreUrl) {
|
||||
|
@ -15,12 +15,15 @@ import {
|
||||
MultiValueVariable,
|
||||
LocalValueVariable,
|
||||
CustomVariable,
|
||||
VizPanelMenu,
|
||||
VizPanelState,
|
||||
} from '@grafana/scenes';
|
||||
import { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN } from 'app/core/constants';
|
||||
|
||||
import { getMultiVariableValues } from '../utils/utils';
|
||||
|
||||
import { LibraryVizPanel } from './LibraryVizPanel';
|
||||
import { repeatPanelMenuBehavior } from './PanelMenuBehavior';
|
||||
import { DashboardRepeatsProcessedEvent } from './types';
|
||||
|
||||
interface PanelRepeaterGridItemState extends SceneGridItemStateLike {
|
||||
@ -107,15 +110,20 @@ export class PanelRepeaterGridItem extends SceneObjectBase<PanelRepeaterGridItem
|
||||
|
||||
// Loop through variable values and create repeats
|
||||
for (let index = 0; index < values.length; index++) {
|
||||
const clone = panelToRepeat.clone({
|
||||
const cloneState: Partial<VizPanelState> = {
|
||||
$variables: new SceneVariableSet({
|
||||
variables: [
|
||||
new LocalValueVariable({ name: variable.state.name, value: values[index], text: String(texts[index]) }),
|
||||
],
|
||||
}),
|
||||
key: `${panelToRepeat.state.key}-clone-${index}`,
|
||||
});
|
||||
|
||||
};
|
||||
if (index > 0) {
|
||||
cloneState.menu = new VizPanelMenu({
|
||||
$behaviors: [repeatPanelMenuBehavior],
|
||||
});
|
||||
}
|
||||
const clone = panelToRepeat.clone(cloneState);
|
||||
repeatedPanels.push(clone);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user