|
|
@@ -2,12 +2,15 @@ import { ThunkAction } from 'redux-thunk';
|
|
|
import { DataSource, Plugin, StoreState } from 'app/types';
|
|
|
import { getBackendSrv } from '../../../core/services/backend_srv';
|
|
|
import { LayoutMode } from '../../../core/components/LayoutSelector/LayoutSelector';
|
|
|
-import { updateLocation } from '../../../core/actions';
|
|
|
+import { updateLocation, updateNavIndex, UpdateNavIndexAction } from '../../../core/actions';
|
|
|
import { UpdateLocationAction } from '../../../core/actions/location';
|
|
|
+import { buildNavModel } from './navModel';
|
|
|
|
|
|
export enum ActionTypes {
|
|
|
LoadDataSources = 'LOAD_DATA_SOURCES',
|
|
|
LoadDataSourceTypes = 'LOAD_DATA_SOURCE_TYPES',
|
|
|
+ LoadDataSource = 'LOAD_DATA_SOURCE',
|
|
|
+ LoadDataSourceMeta = 'LOAD_DATA_SOURCE_META',
|
|
|
SetDataSourcesSearchQuery = 'SET_DATA_SOURCES_SEARCH_QUERY',
|
|
|
SetDataSourcesLayoutMode = 'SET_DATA_SOURCES_LAYOUT_MODE',
|
|
|
SetDataSourceTypeSearchQuery = 'SET_DATA_SOURCE_TYPE_SEARCH_QUERY',
|
|
|
@@ -38,11 +41,31 @@ export interface SetDataSourceTypeSearchQueryAction {
|
|
|
payload: string;
|
|
|
}
|
|
|
|
|
|
+export interface LoadDataSourceAction {
|
|
|
+ type: ActionTypes.LoadDataSource;
|
|
|
+ payload: DataSource;
|
|
|
+}
|
|
|
+
|
|
|
+export interface LoadDataSourceMetaAction {
|
|
|
+ type: ActionTypes.LoadDataSourceMeta;
|
|
|
+ payload: Plugin;
|
|
|
+}
|
|
|
+
|
|
|
const dataSourcesLoaded = (dataSources: DataSource[]): LoadDataSourcesAction => ({
|
|
|
type: ActionTypes.LoadDataSources,
|
|
|
payload: dataSources,
|
|
|
});
|
|
|
|
|
|
+const dataSourceLoaded = (dataSource: DataSource): LoadDataSourceAction => ({
|
|
|
+ type: ActionTypes.LoadDataSource,
|
|
|
+ payload: dataSource,
|
|
|
+});
|
|
|
+
|
|
|
+const dataSourceMetaLoaded = (dataSourceMeta: Plugin): LoadDataSourceMetaAction => ({
|
|
|
+ type: ActionTypes.LoadDataSourceMeta,
|
|
|
+ payload: dataSourceMeta,
|
|
|
+});
|
|
|
+
|
|
|
const dataSourceTypesLoaded = (dataSourceTypes: Plugin[]): LoadDataSourceTypesAction => ({
|
|
|
type: ActionTypes.LoadDataSourceTypes,
|
|
|
payload: dataSourceTypes,
|
|
|
@@ -69,7 +92,10 @@ export type Action =
|
|
|
| SetDataSourcesLayoutModeAction
|
|
|
| UpdateLocationAction
|
|
|
| LoadDataSourceTypesAction
|
|
|
- | SetDataSourceTypeSearchQueryAction;
|
|
|
+ | SetDataSourceTypeSearchQueryAction
|
|
|
+ | LoadDataSourceAction
|
|
|
+ | UpdateNavIndexAction
|
|
|
+ | LoadDataSourceMetaAction;
|
|
|
|
|
|
type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action>;
|
|
|
|
|
|
@@ -80,6 +106,16 @@ export function loadDataSources(): ThunkResult<void> {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+export function loadDataSource(id: number): ThunkResult<void> {
|
|
|
+ return async dispatch => {
|
|
|
+ const dataSource = await getBackendSrv().get(`/api/datasources/${id}`);
|
|
|
+ const pluginInfo = await getBackendSrv().get(`/api/plugins/${dataSource.type}/settings`);
|
|
|
+ dispatch(dataSourceLoaded(dataSource));
|
|
|
+ dispatch(dataSourceMetaLoaded(pluginInfo));
|
|
|
+ dispatch(updateNavIndex(buildNavModel(dataSource, pluginInfo)));
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
export function addDataSource(plugin: Plugin): ThunkResult<void> {
|
|
|
return async (dispatch, getStore) => {
|
|
|
await dispatch(loadDataSources());
|