|
@@ -1,56 +1,87 @@
|
|
|
import { DataSourcesState, Plugin } from 'app/types';
|
|
import { DataSourcesState, Plugin } from 'app/types';
|
|
|
import { DataSourceSettings } from '@grafana/ui/src/types';
|
|
import { DataSourceSettings } from '@grafana/ui/src/types';
|
|
|
-import { Action, ActionTypes } from './actions';
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ dataSourceLoaded,
|
|
|
|
|
+ dataSourcesLoaded,
|
|
|
|
|
+ setDataSourcesSearchQuery,
|
|
|
|
|
+ setDataSourcesLayoutMode,
|
|
|
|
|
+ dataSourceTypesLoad,
|
|
|
|
|
+ dataSourceTypesLoaded,
|
|
|
|
|
+ setDataSourceTypeSearchQuery,
|
|
|
|
|
+ dataSourceMetaLoaded,
|
|
|
|
|
+ setDataSourceName,
|
|
|
|
|
+ setIsDefault,
|
|
|
|
|
+} from './actions';
|
|
|
import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
|
|
import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
|
|
|
|
|
+import { reducerFactory } from 'app/core/redux';
|
|
|
|
|
|
|
|
-const initialState: DataSourcesState = {
|
|
|
|
|
- dataSources: [] as DataSourceSettings[],
|
|
|
|
|
|
|
+export const initialState: DataSourcesState = {
|
|
|
|
|
+ dataSources: [],
|
|
|
dataSource: {} as DataSourceSettings,
|
|
dataSource: {} as DataSourceSettings,
|
|
|
layoutMode: LayoutModes.List,
|
|
layoutMode: LayoutModes.List,
|
|
|
searchQuery: '',
|
|
searchQuery: '',
|
|
|
dataSourcesCount: 0,
|
|
dataSourcesCount: 0,
|
|
|
- dataSourceTypes: [] as Plugin[],
|
|
|
|
|
|
|
+ dataSourceTypes: [],
|
|
|
dataSourceTypeSearchQuery: '',
|
|
dataSourceTypeSearchQuery: '',
|
|
|
hasFetched: false,
|
|
hasFetched: false,
|
|
|
isLoadingDataSources: false,
|
|
isLoadingDataSources: false,
|
|
|
dataSourceMeta: {} as Plugin,
|
|
dataSourceMeta: {} as Plugin,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-export const dataSourcesReducer = (state = initialState, action: Action): DataSourcesState => {
|
|
|
|
|
- switch (action.type) {
|
|
|
|
|
- case ActionTypes.LoadDataSources:
|
|
|
|
|
- return { ...state, hasFetched: true, dataSources: action.payload, dataSourcesCount: action.payload.length };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.LoadDataSource:
|
|
|
|
|
- return { ...state, dataSource: action.payload };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.SetDataSourcesSearchQuery:
|
|
|
|
|
- return { ...state, searchQuery: action.payload };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.SetDataSourcesLayoutMode:
|
|
|
|
|
- return { ...state, layoutMode: action.payload };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.LoadDataSourceTypes:
|
|
|
|
|
- return { ...state, dataSourceTypes: [], isLoadingDataSources: true };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.LoadedDataSourceTypes:
|
|
|
|
|
- return { ...state, dataSourceTypes: action.payload, isLoadingDataSources: false };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.SetDataSourceTypeSearchQuery:
|
|
|
|
|
- return { ...state, dataSourceTypeSearchQuery: action.payload };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.LoadDataSourceMeta:
|
|
|
|
|
- return { ...state, dataSourceMeta: action.payload };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.SetDataSourceName:
|
|
|
|
|
- return { ...state, dataSource: { ...state.dataSource, name: action.payload } };
|
|
|
|
|
-
|
|
|
|
|
- case ActionTypes.SetIsDefault:
|
|
|
|
|
- return { ...state, dataSource: { ...state.dataSource, isDefault: action.payload } };
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return state;
|
|
|
|
|
-};
|
|
|
|
|
|
|
+export const dataSourcesReducer = reducerFactory(initialState)
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: dataSourcesLoaded,
|
|
|
|
|
+ mapper: (state, action) => ({
|
|
|
|
|
+ ...state,
|
|
|
|
|
+ hasFetched: true,
|
|
|
|
|
+ dataSources: action.payload,
|
|
|
|
|
+ dataSourcesCount: action.payload.length,
|
|
|
|
|
+ }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: dataSourceLoaded,
|
|
|
|
|
+ mapper: (state, action) => ({ ...state, dataSource: action.payload }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: setDataSourcesSearchQuery,
|
|
|
|
|
+ mapper: (state, action) => ({ ...state, searchQuery: action.payload }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: setDataSourcesLayoutMode,
|
|
|
|
|
+ mapper: (state, action) => ({ ...state, layoutMode: action.payload }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: dataSourceTypesLoad,
|
|
|
|
|
+ mapper: state => ({ ...state, dataSourceTypes: [], isLoadingDataSources: true }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: dataSourceTypesLoaded,
|
|
|
|
|
+ mapper: (state, action) => ({
|
|
|
|
|
+ ...state,
|
|
|
|
|
+ dataSourceTypes: action.payload,
|
|
|
|
|
+ isLoadingDataSources: false,
|
|
|
|
|
+ }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: setDataSourceTypeSearchQuery,
|
|
|
|
|
+ mapper: (state, action) => ({ ...state, dataSourceTypeSearchQuery: action.payload }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: dataSourceMetaLoaded,
|
|
|
|
|
+ mapper: (state, action) => ({ ...state, dataSourceMeta: action.payload }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: setDataSourceName,
|
|
|
|
|
+ mapper: (state, action) => ({ ...state, dataSource: { ...state.dataSource, name: action.payload } }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .addMapper({
|
|
|
|
|
+ filter: setIsDefault,
|
|
|
|
|
+ mapper: (state, action) => ({
|
|
|
|
|
+ ...state,
|
|
|
|
|
+ dataSource: { ...state.dataSource, isDefault: action.payload },
|
|
|
|
|
+ }),
|
|
|
|
|
+ })
|
|
|
|
|
+ .create();
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
dataSources: dataSourcesReducer,
|
|
dataSources: dataSourcesReducer,
|