reducers.ts 1.2 KB

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