reducers.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { DataSourcesState, Plugin } from 'app/types';
  2. import { DataSourceSettings } from '@grafana/ui/src/types';
  3. import { Action, ActionTypes } from './actions';
  4. import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
  5. const initialState: DataSourcesState = {
  6. dataSources: [] as DataSourceSettings[],
  7. dataSource: {} as DataSourceSettings,
  8. layoutMode: LayoutModes.List,
  9. searchQuery: '',
  10. dataSourcesCount: 0,
  11. dataSourceTypes: [] as Plugin[],
  12. dataSourceTypeSearchQuery: '',
  13. hasFetched: false,
  14. isLoadingDataSources: false,
  15. dataSourceMeta: {} as Plugin,
  16. };
  17. export const dataSourcesReducer = (state = initialState, action: Action): DataSourcesState => {
  18. switch (action.type) {
  19. case ActionTypes.LoadDataSources:
  20. return { ...state, hasFetched: true, dataSources: action.payload, dataSourcesCount: action.payload.length };
  21. case ActionTypes.LoadDataSource:
  22. return { ...state, dataSource: action.payload };
  23. case ActionTypes.SetDataSourcesSearchQuery:
  24. return { ...state, searchQuery: action.payload };
  25. case ActionTypes.SetDataSourcesLayoutMode:
  26. return { ...state, layoutMode: action.payload };
  27. case ActionTypes.LoadDataSourceTypes:
  28. return { ...state, dataSourceTypes: [], isLoadingDataSources: true };
  29. case ActionTypes.LoadedDataSourceTypes:
  30. return { ...state, dataSourceTypes: action.payload, isLoadingDataSources: false };
  31. case ActionTypes.SetDataSourceTypeSearchQuery:
  32. return { ...state, dataSourceTypeSearchQuery: action.payload };
  33. case ActionTypes.LoadDataSourceMeta:
  34. return { ...state, dataSourceMeta: action.payload };
  35. case ActionTypes.SetDataSourceName:
  36. return { ...state, dataSource: { ...state.dataSource, name: action.payload } };
  37. case ActionTypes.SetIsDefault:
  38. return { ...state, dataSource: { ...state.dataSource, isDefault: action.payload } };
  39. }
  40. return state;
  41. };
  42. export default {
  43. dataSources: dataSourcesReducer,
  44. };