@@ -31,9 +36,10 @@ export const DashboardEmpty = ({ dashboard, canCreate }: Props) => {
icon="plus"
aria-label="Add new panel"
onClick={() => {
- reportInteraction('Create new panel');
- const id = onCreateNewPanel(dashboard);
+ const id = onCreateNewPanel(dashboard, initialDatasource);
+ reportInteraction('dashboards_emptydashboard_clicked', { item: 'add_visualization' });
locationService.partial({ editPanel: id });
+ dispatch(setInitialDatasource(undefined));
}}
disabled={!canCreate}
>
diff --git a/public/app/features/dashboard/state/reducers.ts b/public/app/features/dashboard/state/reducers.ts
index 03e536c5a68..c047aa9051f 100644
--- a/public/app/features/dashboard/state/reducers.ts
+++ b/public/app/features/dashboard/state/reducers.ts
@@ -14,6 +14,7 @@ export const initialState: DashboardState = {
getModel: () => null,
permissions: [],
initError: null,
+ initialDatasource: undefined,
};
const dashboardSlice = createSlice({
@@ -53,6 +54,9 @@ const dashboardSlice = createSlice({
addPanel: (state, action: PayloadAction
) => {
//state.panels[action.payload.id] = { pluginId: action.payload.type };
},
+ setInitialDatasource: (state, action: PayloadAction) => {
+ state.initialDatasource = action.payload;
+ },
},
});
@@ -79,6 +83,7 @@ export const {
dashboardInitServices,
cleanUpDashboard,
addPanel,
+ setInitialDatasource,
} = dashboardSlice.actions;
export const dashboardReducer = dashboardSlice.reducer;
diff --git a/public/app/features/dashboard/utils/dashboard.ts b/public/app/features/dashboard/utils/dashboard.ts
index 13fe36eecaa..3b20957cea5 100644
--- a/public/app/features/dashboard/utils/dashboard.ts
+++ b/public/app/features/dashboard/utils/dashboard.ts
@@ -7,11 +7,12 @@ 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): number | undefined {
+export function onCreateNewPanel(dashboard: DashboardModel, datasource?: string): number | undefined {
const newPanel: Partial = {
type: 'timeseries',
title: 'Panel Title',
gridPos: calculateNewPanelGridPos(dashboard),
+ datasource: datasource ? { uid: datasource } : null,
};
dashboard.addPanel(newPanel);
diff --git a/public/app/types/dashboard.ts b/public/app/types/dashboard.ts
index 7ab00843728..f984571ece9 100644
--- a/public/app/types/dashboard.ts
+++ b/public/app/types/dashboard.ts
@@ -1,5 +1,5 @@
import { DataQuery } from '@grafana/data';
-import { Dashboard } from '@grafana/schema';
+import { Dashboard, DataSourceRef } from '@grafana/schema';
import { DashboardModel } from 'app/features/dashboard/state/DashboardModel';
import { DashboardAcl } from './acl';
@@ -101,6 +101,7 @@ export interface QueriesToUpdateOnDashboardLoad {
export interface DashboardState {
getModel: GetMutableDashboardModelFn;
initPhase: DashboardInitPhase;
+ initialDatasource?: DataSourceRef['uid'];
initError: DashboardInitError | null;
permissions: DashboardAcl[];
}