mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
* support folderuid in FolderPicker * support folderuid in unified alerting * support folderuid when returning to view mode after editing a panel * support folderuid when preselecting the folderpicker in dashboard general settings * support folderuid when saving dashboard * support folderuid when pre-selecting folderpicker in dashboard form * support folderuid in routes when loading a dashboard * support folderuid when saving dashboard json * support folderuid when validating new dashboard name * support folderuid when moving dashboard to another folder * support folderuid on dashboard action buttons * support folderuid when creating a new dashboard on an empty folder * support folderuid when showing library panel modal * support folderuid when saving library panel * support folderuid when importing dashboard * fixed broken tests * use folderuid when importing dashboards * remove commented line * fix typo when comparing uid values
134 lines
3.5 KiB
TypeScript
134 lines
3.5 KiB
TypeScript
import { createSlice, Draft, PayloadAction } from '@reduxjs/toolkit';
|
|
|
|
import { DataSourceInstanceSettings, LoadingState } from '@grafana/data';
|
|
|
|
import { LibraryElementDTO } from '../../library-panels/types';
|
|
|
|
export enum DashboardSource {
|
|
Gcom = 0,
|
|
Json = 1,
|
|
}
|
|
|
|
export interface ImportDashboardDTO {
|
|
title: string;
|
|
uid: string;
|
|
gnetId: string;
|
|
constants: string[];
|
|
dataSources: DataSourceInstanceSettings[];
|
|
elements: LibraryElementDTO[];
|
|
folder: { uid: string; title?: string };
|
|
}
|
|
|
|
export enum InputType {
|
|
DataSource = 'datasource',
|
|
Constant = 'constant',
|
|
LibraryPanel = 'libraryPanel',
|
|
}
|
|
|
|
export enum LibraryPanelInputState {
|
|
New = 'new',
|
|
Exists = 'exists',
|
|
Different = 'different',
|
|
}
|
|
|
|
export interface DashboardInput {
|
|
name: string;
|
|
label: string;
|
|
info: string;
|
|
value: string;
|
|
type: InputType;
|
|
}
|
|
|
|
export interface DataSourceInput extends DashboardInput {
|
|
pluginId: string;
|
|
}
|
|
|
|
export interface LibraryPanelInput {
|
|
model: LibraryElementDTO;
|
|
state: LibraryPanelInputState;
|
|
}
|
|
|
|
export interface DashboardInputs {
|
|
dataSources: DataSourceInput[];
|
|
constants: DashboardInput[];
|
|
libraryPanels: LibraryPanelInput[];
|
|
}
|
|
|
|
export interface ImportDashboardState {
|
|
meta: { updatedAt: string; orgName: string };
|
|
dashboard: any;
|
|
source: DashboardSource;
|
|
inputs: DashboardInputs;
|
|
state: LoadingState;
|
|
}
|
|
|
|
export const initialImportDashboardState: ImportDashboardState = {
|
|
meta: { updatedAt: '', orgName: '' },
|
|
dashboard: {},
|
|
source: DashboardSource.Json,
|
|
inputs: {} as DashboardInputs,
|
|
state: LoadingState.NotStarted,
|
|
};
|
|
|
|
const importDashboardSlice = createSlice({
|
|
name: 'manageDashboards',
|
|
initialState: initialImportDashboardState,
|
|
reducers: {
|
|
setGcomDashboard: (state: Draft<ImportDashboardState>, action: PayloadAction<any>) => {
|
|
state.dashboard = {
|
|
...action.payload.json,
|
|
id: null,
|
|
};
|
|
state.meta = { updatedAt: action.payload.updatedAt, orgName: action.payload.orgName };
|
|
state.source = DashboardSource.Gcom;
|
|
state.state = LoadingState.Done;
|
|
},
|
|
setJsonDashboard: (state: Draft<ImportDashboardState>, action: PayloadAction<any>) => {
|
|
state.dashboard = {
|
|
...action.payload,
|
|
id: null,
|
|
};
|
|
state.meta = initialImportDashboardState.meta;
|
|
state.source = DashboardSource.Json;
|
|
state.state = LoadingState.Done;
|
|
},
|
|
clearDashboard: (state: Draft<ImportDashboardState>) => {
|
|
state.dashboard = {};
|
|
state.state = LoadingState.NotStarted;
|
|
},
|
|
setInputs: (state: Draft<ImportDashboardState>, action: PayloadAction<any[]>) => {
|
|
state.inputs = {
|
|
dataSources: action.payload.filter((p) => p.type === InputType.DataSource),
|
|
constants: action.payload.filter((p) => p.type === InputType.Constant),
|
|
libraryPanels: [],
|
|
};
|
|
},
|
|
setLibraryPanelInputs: (state: Draft<ImportDashboardState>, action: PayloadAction<LibraryPanelInput[]>) => {
|
|
state.inputs.libraryPanels = action.payload;
|
|
},
|
|
fetchFailed: (state: Draft<ImportDashboardState>) => {
|
|
state.dashboard = {};
|
|
state.state = LoadingState.Error;
|
|
},
|
|
fetchDashboard: (state: Draft<ImportDashboardState>) => {
|
|
state.state = LoadingState.Loading;
|
|
},
|
|
},
|
|
});
|
|
|
|
export const {
|
|
clearDashboard,
|
|
setInputs,
|
|
setGcomDashboard,
|
|
setJsonDashboard,
|
|
setLibraryPanelInputs,
|
|
fetchFailed,
|
|
fetchDashboard,
|
|
} = importDashboardSlice.actions;
|
|
|
|
export const importDashboardReducer = importDashboardSlice.reducer;
|
|
|
|
export default {
|
|
importDashboard: importDashboardReducer,
|
|
};
|