mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 04:59:15 -06:00
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import { LibraryElementDTO, PanelModelLibraryPanel } from './types';
|
|
import { PanelModel } from '../dashboard/state';
|
|
import { addLibraryPanel, updateLibraryPanel } from './state/api';
|
|
import { createErrorNotification, createSuccessNotification } from '../../core/copy/appNotification';
|
|
import { AppNotification } from '../../types';
|
|
|
|
export function createPanelLibraryErrorNotification(message: string): AppNotification {
|
|
return createErrorNotification(message);
|
|
}
|
|
|
|
export function createPanelLibrarySuccessNotification(message: string): AppNotification {
|
|
return createSuccessNotification(message);
|
|
}
|
|
|
|
export function toPanelModelLibraryPanel(libraryPanelDto: LibraryElementDTO): PanelModelLibraryPanel {
|
|
const { uid, name, meta, version } = libraryPanelDto;
|
|
return { uid, name, meta, version };
|
|
}
|
|
|
|
export async function saveAndRefreshLibraryPanel(panel: PanelModel, folderId: number): Promise<LibraryElementDTO> {
|
|
const panelSaveModel = toPanelSaveModel(panel);
|
|
const savedPanel = await saveOrUpdateLibraryPanel(panelSaveModel, folderId);
|
|
updatePanelModelWithUpdate(panel, savedPanel);
|
|
return savedPanel;
|
|
}
|
|
|
|
function toPanelSaveModel(panel: PanelModel): any {
|
|
let panelSaveModel = panel.getSaveModel();
|
|
panelSaveModel = {
|
|
libraryPanel: {
|
|
name: panel.title,
|
|
uid: undefined,
|
|
},
|
|
...panelSaveModel,
|
|
};
|
|
|
|
return panelSaveModel;
|
|
}
|
|
|
|
function updatePanelModelWithUpdate(panel: PanelModel, updated: LibraryElementDTO): void {
|
|
panel.restoreModel({
|
|
...updated.model,
|
|
configRev: 0, // reset config rev, since changes have been saved
|
|
libraryPanel: toPanelModelLibraryPanel(updated),
|
|
title: panel.title,
|
|
});
|
|
panel.refresh();
|
|
}
|
|
|
|
function saveOrUpdateLibraryPanel(panel: any, folderId: number): Promise<LibraryElementDTO> {
|
|
if (!panel.libraryPanel) {
|
|
return Promise.reject();
|
|
}
|
|
|
|
if (panel.libraryPanel && panel.libraryPanel.uid === undefined) {
|
|
return addLibraryPanel(panel, folderId!);
|
|
}
|
|
|
|
return updateLibraryPanel(panel);
|
|
}
|