reducers.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { DataSourcesState, Plugin } from 'app/types';
  2. import { DataSourceSettings } from '@grafana/ui/src/types';
  3. import {
  4. dataSourceLoaded,
  5. dataSourcesLoaded,
  6. setDataSourcesSearchQuery,
  7. setDataSourcesLayoutMode,
  8. dataSourceTypesLoad,
  9. dataSourceTypesLoaded,
  10. setDataSourceTypeSearchQuery,
  11. dataSourceMetaLoaded,
  12. setDataSourceName,
  13. setIsDefault,
  14. } from './actions';
  15. import { LayoutModes } from 'app/core/components/LayoutSelector/LayoutSelector';
  16. import { reducerFactory } from 'app/core/redux';
  17. export const initialState: DataSourcesState = {
  18. dataSources: [],
  19. dataSource: {} as DataSourceSettings,
  20. layoutMode: LayoutModes.List,
  21. searchQuery: '',
  22. dataSourcesCount: 0,
  23. dataSourceTypes: [],
  24. dataSourceTypeSearchQuery: '',
  25. hasFetched: false,
  26. isLoadingDataSources: false,
  27. dataSourceMeta: {} as Plugin,
  28. };
  29. export const dataSourcesReducer = reducerFactory(initialState)
  30. .addMapper({
  31. filter: dataSourcesLoaded,
  32. mapper: (state, action) => ({
  33. ...state,
  34. hasFetched: true,
  35. dataSources: action.payload,
  36. dataSourcesCount: action.payload.length,
  37. }),
  38. })
  39. .addMapper({
  40. filter: dataSourceLoaded,
  41. mapper: (state, action) => ({ ...state, dataSource: action.payload }),
  42. })
  43. .addMapper({
  44. filter: setDataSourcesSearchQuery,
  45. mapper: (state, action) => ({ ...state, searchQuery: action.payload }),
  46. })
  47. .addMapper({
  48. filter: setDataSourcesLayoutMode,
  49. mapper: (state, action) => ({ ...state, layoutMode: action.payload }),
  50. })
  51. .addMapper({
  52. filter: dataSourceTypesLoad,
  53. mapper: state => ({ ...state, dataSourceTypes: [], isLoadingDataSources: true }),
  54. })
  55. .addMapper({
  56. filter: dataSourceTypesLoaded,
  57. mapper: (state, action) => ({
  58. ...state,
  59. dataSourceTypes: action.payload,
  60. isLoadingDataSources: false,
  61. }),
  62. })
  63. .addMapper({
  64. filter: setDataSourceTypeSearchQuery,
  65. mapper: (state, action) => ({ ...state, dataSourceTypeSearchQuery: action.payload }),
  66. })
  67. .addMapper({
  68. filter: dataSourceMetaLoaded,
  69. mapper: (state, action) => ({ ...state, dataSourceMeta: action.payload }),
  70. })
  71. .addMapper({
  72. filter: setDataSourceName,
  73. mapper: (state, action) => ({ ...state, dataSource: { ...state.dataSource, name: action.payload } }),
  74. })
  75. .addMapper({
  76. filter: setIsDefault,
  77. mapper: (state, action) => ({
  78. ...state,
  79. dataSource: { ...state.dataSource, isDefault: action.payload },
  80. }),
  81. })
  82. .create();
  83. export default {
  84. dataSources: dataSourcesReducer,
  85. };