mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 10:03:33 -06:00
121 lines
2.4 KiB
TypeScript
121 lines
2.4 KiB
TypeScript
import { updateLocation } from 'app/core/actions';
|
|
import { store } from 'app/store/store';
|
|
|
|
import { removePanel, duplicatePanel, copyPanel, editPanelJson, sharePanel } from 'app/features/dashboard/utils/panel';
|
|
import { PanelModel } from 'app/features/dashboard/state/PanelModel';
|
|
import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
|
|
import { PanelMenuItem } from '@grafana/ui';
|
|
|
|
export const getPanelMenu = (dashboard: DashboardModel, panel: PanelModel) => {
|
|
const onViewPanel = () => {
|
|
store.dispatch(
|
|
updateLocation({
|
|
query: {
|
|
panelId: panel.id,
|
|
edit: null,
|
|
fullscreen: true,
|
|
},
|
|
partial: true,
|
|
})
|
|
);
|
|
};
|
|
|
|
const onEditPanel = () => {
|
|
store.dispatch(
|
|
updateLocation({
|
|
query: {
|
|
panelId: panel.id,
|
|
edit: true,
|
|
fullscreen: true,
|
|
},
|
|
partial: true,
|
|
})
|
|
);
|
|
};
|
|
|
|
const onSharePanel = () => {
|
|
sharePanel(dashboard, panel);
|
|
};
|
|
|
|
const onDuplicatePanel = () => {
|
|
duplicatePanel(dashboard, panel);
|
|
};
|
|
|
|
const onCopyPanel = () => {
|
|
copyPanel(panel);
|
|
};
|
|
|
|
const onEditPanelJson = () => {
|
|
editPanelJson(dashboard, panel);
|
|
};
|
|
|
|
const onRemovePanel = () => {
|
|
removePanel(dashboard, panel, true);
|
|
};
|
|
|
|
const menu: PanelMenuItem[] = [];
|
|
|
|
menu.push({
|
|
text: 'View',
|
|
iconClassName: 'fa fa-fw fa-eye',
|
|
onClick: onViewPanel,
|
|
shortcut: 'v',
|
|
});
|
|
|
|
if (dashboard.meta.canEdit) {
|
|
menu.push({
|
|
text: 'Edit',
|
|
iconClassName: 'fa fa-fw fa-edit',
|
|
onClick: onEditPanel,
|
|
shortcut: 'e',
|
|
});
|
|
}
|
|
|
|
menu.push({
|
|
text: 'Share',
|
|
iconClassName: 'fa fa-fw fa-share',
|
|
onClick: onSharePanel,
|
|
shortcut: 'p s',
|
|
});
|
|
|
|
const subMenu: PanelMenuItem[] = [];
|
|
|
|
if (!panel.fullscreen && dashboard.meta.canEdit) {
|
|
subMenu.push({
|
|
text: 'Duplicate',
|
|
onClick: onDuplicatePanel,
|
|
shortcut: 'p d',
|
|
});
|
|
|
|
subMenu.push({
|
|
text: 'Copy',
|
|
onClick: onCopyPanel,
|
|
});
|
|
}
|
|
|
|
subMenu.push({
|
|
text: 'Panel JSON',
|
|
onClick: onEditPanelJson,
|
|
});
|
|
|
|
menu.push({
|
|
type: 'submenu',
|
|
text: 'More...',
|
|
iconClassName: 'fa fa-fw fa-cube',
|
|
subMenu: subMenu,
|
|
});
|
|
|
|
if (dashboard.meta.canEdit) {
|
|
menu.push({ type: 'divider' });
|
|
|
|
menu.push({
|
|
text: 'Remove',
|
|
iconClassName: 'fa fa-fw fa-trash',
|
|
onClick: onRemovePanel,
|
|
shortcut: 'p r',
|
|
});
|
|
}
|
|
|
|
return menu;
|
|
};
|