mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 16:45:43 -06:00
* Initial pass to move panel state to it's own, and make it by key not panel.id * Progress * Not making much progress, having panel.key be mutable is causing a lot of issues * Think this is starting to work * Began fixing tests * Add selector * Bug fixes and changes to cleanup, and fixing all flicking when switching library panels * Removed console.log * fixes after merge * fixing tests * fixing tests * Added new test for changePlugin thunk * Initial struture in place * responding to state changes in another part of the state * bha * going in a different direction * This is getting exciting * minor * More structure * More real * Added builder to reduce boiler plate * Lots of progress * Adding more visualizations * More smarts * tweaks * suggestions * Move to separate view * Refactoring to builder concept * Before hover preview test * Increase line width in preview * More suggestions * Removed old elements of onSuggestVisualizations * Don't call suggestion suppliers if there is no data * Restore card styles to only borders * Changing supplier interface to support data vs option suggestion scenario * Renamed functions * Add dynamic width support * not sure about this * Improve suggestions * Improve suggestions * Single grid/list * Store vis select pane & size * Prep for option suggestions * more suggestions * Name/title option for preview cards * Improve barchart suggestions * Support suggestions when there are no data * Minor change * reverted some changes * Improve suggestions for stacking * Removed size option * starting on unit tests, hit cyclic dependency issue * muuu * First test for getting suggestion seems to work, going to bed * add missing file * A basis for more unit tests * More tests * More unit tests * Fixed unit tests * Update * Some extreme scenarios * Added basic e2e test * Added another unit test for changePanelPlugin action * More cleanup * Minor tweak * add wait to e2e test * Renamed function and cleanup of unused function * Adding search support and adding search test to e2e test
103 lines
3.0 KiB
TypeScript
103 lines
3.0 KiB
TypeScript
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
import {
|
|
DashboardAclDTO,
|
|
DashboardInitError,
|
|
DashboardInitPhase,
|
|
DashboardState,
|
|
QueriesToUpdateOnDashboardLoad,
|
|
} from 'app/types';
|
|
import { AngularComponent } from '@grafana/runtime';
|
|
import { processAclItems } from 'app/core/utils/acl';
|
|
import { DashboardModel } from './DashboardModel';
|
|
import { PanelModel } from './PanelModel';
|
|
import { PanelPlugin } from '@grafana/data';
|
|
|
|
export const initialState: DashboardState = {
|
|
initPhase: DashboardInitPhase.NotStarted,
|
|
isInitSlow: false,
|
|
getModel: () => null,
|
|
permissions: [],
|
|
modifiedQueries: null,
|
|
initError: null,
|
|
};
|
|
|
|
const dashbardSlice = createSlice({
|
|
name: 'dashboard',
|
|
initialState,
|
|
reducers: {
|
|
loadDashboardPermissions: (state, action: PayloadAction<DashboardAclDTO[]>) => {
|
|
state.permissions = processAclItems(action.payload);
|
|
},
|
|
dashboardInitFetching: (state) => {
|
|
state.initPhase = DashboardInitPhase.Fetching;
|
|
},
|
|
dashboardInitServices: (state) => {
|
|
state.initPhase = DashboardInitPhase.Services;
|
|
},
|
|
dashboardInitSlow: (state) => {
|
|
state.isInitSlow = true;
|
|
},
|
|
dashboardInitCompleted: (state, action: PayloadAction<DashboardModel>) => {
|
|
state.getModel = () => action.payload;
|
|
state.initPhase = DashboardInitPhase.Completed;
|
|
state.isInitSlow = false;
|
|
},
|
|
dashboardInitFailed: (state, action: PayloadAction<DashboardInitError>) => {
|
|
state.initPhase = DashboardInitPhase.Failed;
|
|
state.initError = action.payload;
|
|
state.getModel = () => {
|
|
return new DashboardModel({ title: 'Dashboard init failed' }, { canSave: false, canEdit: false });
|
|
};
|
|
},
|
|
cleanUpDashboard: (state) => {
|
|
state.initPhase = DashboardInitPhase.NotStarted;
|
|
state.isInitSlow = false;
|
|
state.initError = null;
|
|
state.getModel = () => null;
|
|
},
|
|
setDashboardQueriesToUpdateOnLoad: (state, action: PayloadAction<QueriesToUpdateOnDashboardLoad>) => {
|
|
state.modifiedQueries = action.payload;
|
|
},
|
|
clearDashboardQueriesToUpdateOnLoad: (state) => {
|
|
state.modifiedQueries = null;
|
|
},
|
|
addPanel: (state, action: PayloadAction<PanelModel>) => {
|
|
//state.panels[action.payload.id] = { pluginId: action.payload.type };
|
|
},
|
|
},
|
|
});
|
|
|
|
export interface PanelModelAndPluginReadyPayload {
|
|
panelId: number;
|
|
plugin: PanelPlugin;
|
|
}
|
|
|
|
export interface SetPanelAngularComponentPayload {
|
|
panelId: number;
|
|
angularComponent: AngularComponent | null;
|
|
}
|
|
|
|
export interface SetPanelInstanceStatePayload {
|
|
panelId: number;
|
|
value: any;
|
|
}
|
|
|
|
export const {
|
|
loadDashboardPermissions,
|
|
dashboardInitFetching,
|
|
dashboardInitFailed,
|
|
dashboardInitSlow,
|
|
dashboardInitCompleted,
|
|
dashboardInitServices,
|
|
cleanUpDashboard,
|
|
setDashboardQueriesToUpdateOnLoad,
|
|
clearDashboardQueriesToUpdateOnLoad,
|
|
addPanel,
|
|
} = dashbardSlice.actions;
|
|
|
|
export const dashboardReducer = dashbardSlice.reducer;
|
|
|
|
export default {
|
|
dashboard: dashboardReducer,
|
|
};
|