reducers.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { Action, ActionTypes } from './actions';
  2. import { Plugin, PluginsState } from 'app/types';
  3. import { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector';
  4. import { PluginDashboard } from '../../../types/plugins';
  5. export const initialState: PluginsState = {
  6. plugins: [] as Plugin[],
  7. searchQuery: '',
  8. layoutMode: LayoutModes.Grid,
  9. hasFetched: false,
  10. dashboards: [] as PluginDashboard[],
  11. isLoadingPluginDashboards: false,
  12. };
  13. export const pluginsReducer = (state = initialState, action: Action): PluginsState => {
  14. switch (action.type) {
  15. case ActionTypes.LoadPlugins:
  16. return { ...state, hasFetched: true, plugins: action.payload };
  17. case ActionTypes.SetPluginsSearchQuery:
  18. return { ...state, searchQuery: action.payload };
  19. case ActionTypes.SetLayoutMode:
  20. return { ...state, layoutMode: action.payload };
  21. case ActionTypes.LoadPluginDashboards:
  22. return { ...state, dashboards: [], isLoadingPluginDashboards: true };
  23. case ActionTypes.LoadedPluginDashboards:
  24. return { ...state, dashboards: action.payload, isLoadingPluginDashboards: false };
  25. }
  26. return state;
  27. };
  28. export default {
  29. plugins: pluginsReducer,
  30. };