D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
app
/
features
/
dashboard
/
utils
/
Filename :
dashboard.ts
back
Copy
import { chain, cloneDeep, defaults, find } from 'lodash'; import { PanelPluginMeta } from '@grafana/data'; import config from 'app/core/config'; import { LS_PANEL_COPY_KEY } from 'app/core/constants'; import store from 'app/core/store'; import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; import { calculateNewPanelGridPos } from 'app/features/dashboard/utils/panel'; export function onCreateNewPanel(dashboard: DashboardModel, datasource?: string): number | undefined { const newPanel: Partial<PanelModel> = { type: 'timeseries', title: 'Panel Title', gridPos: calculateNewPanelGridPos(dashboard), datasource: datasource ? { uid: datasource } : null, isNew: true, }; dashboard.addPanel(newPanel); return newPanel.id; } export function onCreateNewWidgetPanel(dashboard: DashboardModel, widgetType: string): number | undefined { const newPanel: Partial<PanelModel> = { type: widgetType, title: 'Widget title', gridPos: calculateNewPanelGridPos(dashboard), datasource: null, isNew: true, }; dashboard.addPanel(newPanel); return newPanel.id; } export function onCreateNewRow(dashboard: DashboardModel) { const newRow = { type: 'row', title: 'Row title', gridPos: { x: 0, y: 0 }, }; dashboard.addPanel(newRow); } export function onAddLibraryPanel(dashboard: DashboardModel) { const newPanel = { type: 'add-library-panel', gridPos: calculateNewPanelGridPos(dashboard), }; dashboard.addPanel(newPanel); } type PanelPluginInfo = { defaults: { gridPos: { w: number; h: number }; title: string } }; export function onPasteCopiedPanel(dashboard: DashboardModel, panelPluginInfo?: PanelPluginMeta & PanelPluginInfo) { if (!panelPluginInfo) { return; } const gridPos = calculateNewPanelGridPos(dashboard); const newPanel = { type: panelPluginInfo.id, title: 'Panel Title', gridPos: { x: gridPos.x, y: gridPos.y, w: panelPluginInfo.defaults.gridPos.w, h: panelPluginInfo.defaults.gridPos.h, }, }; // apply panel template / defaults if (panelPluginInfo.defaults) { defaults(newPanel, panelPluginInfo.defaults); newPanel.title = panelPluginInfo.defaults.title; store.delete(LS_PANEL_COPY_KEY); } dashboard.addPanel(newPanel); } export function getCopiedPanelPlugin(): (PanelPluginMeta & PanelPluginInfo) | undefined { const panels = chain(config.panels) .filter({ hideFromList: false }) .map((item) => item) .value(); const copiedPanelJson = store.get(LS_PANEL_COPY_KEY); if (copiedPanelJson) { const copiedPanel = JSON.parse(copiedPanelJson); const pluginInfo = find(panels, { id: copiedPanel.type }); if (pluginInfo) { const pluginCopy: PanelPluginMeta = cloneDeep(pluginInfo); pluginCopy.name = copiedPanel.title; pluginCopy.sort = -1; return { ...pluginCopy, defaults: { ...copiedPanel } }; } } return undefined; }