actions.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { ThunkAction } from 'redux-thunk';
  2. import { DataSource, Plugin, StoreState } from 'app/types';
  3. import { getBackendSrv } from '../../../core/services/backend_srv';
  4. import { LayoutMode } from '../../../core/components/LayoutSelector/LayoutSelector';
  5. import { updateLocation } from '../../../core/actions';
  6. import { UpdateLocationAction } from '../../../core/actions/location';
  7. export enum ActionTypes {
  8. LoadDataSources = 'LOAD_DATA_SOURCES',
  9. LoadDataSourceTypes = 'LOAD_DATA_SOURCE_TYPES',
  10. SetDataSourcesSearchQuery = 'SET_DATA_SOURCES_SEARCH_QUERY',
  11. SetDataSourcesLayoutMode = 'SET_DATA_SOURCES_LAYOUT_MODE',
  12. }
  13. export interface LoadDataSourcesAction {
  14. type: ActionTypes.LoadDataSources;
  15. payload: DataSource[];
  16. }
  17. export interface SetDataSourcesSearchQueryAction {
  18. type: ActionTypes.SetDataSourcesSearchQuery;
  19. payload: string;
  20. }
  21. export interface SetDataSourcesLayoutModeAction {
  22. type: ActionTypes.SetDataSourcesLayoutMode;
  23. payload: LayoutMode;
  24. }
  25. export interface LoadDataSourceTypesAction {
  26. type: ActionTypes.LoadDataSourceTypes;
  27. payload: Plugin[];
  28. }
  29. const dataSourcesLoaded = (dataSources: DataSource[]): LoadDataSourcesAction => ({
  30. type: ActionTypes.LoadDataSources,
  31. payload: dataSources,
  32. });
  33. const dataSourceTypesLoaded = (dataSourceTypes: Plugin[]): LoadDataSourceTypesAction => ({
  34. type: ActionTypes.LoadDataSourceTypes,
  35. payload: dataSourceTypes,
  36. });
  37. export const setDataSourcesSearchQuery = (searchQuery: string): SetDataSourcesSearchQueryAction => ({
  38. type: ActionTypes.SetDataSourcesSearchQuery,
  39. payload: searchQuery,
  40. });
  41. export const setDataSourcesLayoutMode = (layoutMode: LayoutMode): SetDataSourcesLayoutModeAction => ({
  42. type: ActionTypes.SetDataSourcesLayoutMode,
  43. payload: layoutMode,
  44. });
  45. export type Action =
  46. | LoadDataSourcesAction
  47. | SetDataSourcesSearchQueryAction
  48. | SetDataSourcesLayoutModeAction
  49. | UpdateLocationAction
  50. | LoadDataSourceTypesAction;
  51. type ThunkResult<R> = ThunkAction<R, StoreState, undefined, Action>;
  52. export function loadDataSources(): ThunkResult<void> {
  53. return async dispatch => {
  54. const response = await getBackendSrv().get('/api/datasources');
  55. dispatch(dataSourcesLoaded(response));
  56. };
  57. }
  58. export function addDataSource(name: string, type: string): ThunkResult<void> {
  59. return async dispatch => {
  60. const result = await getBackendSrv().post('/api/datasources', { name: name, type: type, access: 'proxy' });
  61. dispatch(updateLocation({ path: `/datasources/edit/${result.id}` }));
  62. };
  63. }
  64. export function loadDataSourceTypes(): ThunkResult<void> {
  65. return async dispatch => {
  66. const result = await getBackendSrv().get('/api/plugins', { enabled: 1, type: 'datasource' });
  67. dispatch(dataSourceTypesLoaded(result));
  68. };
  69. }