actions.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { Plugin, StoreState } from 'app/types';
  2. import { ThunkAction } from 'redux-thunk';
  3. import { getBackendSrv } from '../../../core/services/backend_srv';
  4. import { LayoutMode } from '../../../core/components/LayoutSelector/LayoutSelector';
  5. import { PluginDashboard } from '../../../types/plugins';
  6. export enum ActionTypes {
  7. LoadPlugins = 'LOAD_PLUGINS',
  8. LoadPluginDashboards = 'LOAD_PLUGIN_DASHBOARDS',
  9. LoadedPluginDashboards = 'LOADED_PLUGIN_DASHBOARDS',
  10. SetPluginsSearchQuery = 'SET_PLUGIN_SEARCH_QUERY',
  11. SetLayoutMode = 'SET_LAYOUT_MODE',
  12. }
  13. export interface LoadPluginsAction {
  14. type: ActionTypes.LoadPlugins;
  15. payload: Plugin[];
  16. }
  17. export interface LoadPluginDashboardsAction {
  18. type: ActionTypes.LoadPluginDashboards;
  19. }
  20. export interface LoadedPluginDashboardsAction {
  21. type: ActionTypes.LoadedPluginDashboards;
  22. payload: PluginDashboard[];
  23. }
  24. export interface SetPluginsSearchQueryAction {
  25. type: ActionTypes.SetPluginsSearchQuery;
  26. payload: string;
  27. }
  28. export interface SetLayoutModeAction {
  29. type: ActionTypes.SetLayoutMode;
  30. payload: LayoutMode;
  31. }
  32. export const setPluginsLayoutMode = (mode: LayoutMode): SetLayoutModeAction => ({
  33. type: ActionTypes.SetLayoutMode,
  34. payload: mode,
  35. });
  36. export const setPluginsSearchQuery = (query: string): SetPluginsSearchQueryAction => ({
  37. type: ActionTypes.SetPluginsSearchQuery,
  38. payload: query,
  39. });
  40. const pluginsLoaded = (plugins: Plugin[]): LoadPluginsAction => ({
  41. type: ActionTypes.LoadPlugins,
  42. payload: plugins,
  43. });
  44. const pluginDashboardsLoad = (): LoadPluginDashboardsAction => ({
  45. type: ActionTypes.LoadPluginDashboards,
  46. });
  47. const pluginDashboardsLoaded = (dashboards: PluginDashboard[]): LoadedPluginDashboardsAction => ({
  48. type: ActionTypes.LoadedPluginDashboards,
  49. payload: dashboards,
  50. });
  51. export type Action = LoadPluginsAction
  52. | LoadPluginDashboardsAction
  53. | LoadedPluginDashboardsAction
  54. | SetPluginsSearchQueryAction
  55. | SetLayoutModeAction;
  56. type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action>;
  57. export function loadPlugins(): ThunkResult<void> {
  58. return async dispatch => {
  59. const result = await getBackendSrv().get('api/plugins', { embedded: 0 });
  60. dispatch(pluginsLoaded(result));
  61. };
  62. }
  63. export function loadPluginDashboards(): ThunkResult<void> {
  64. return async (dispatch, getStore) => {
  65. dispatch(pluginDashboardsLoad());
  66. const dataSourceType = getStore().dataSources.dataSource.type;
  67. const response = await getBackendSrv().get(`api/plugins/${dataSourceType}/dashboards`);
  68. dispatch(pluginDashboardsLoaded(response));
  69. };
  70. }