actions.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { ThunkAction } from 'redux-thunk';
  2. import { Organization, OrganizationPreferences, StoreState } from 'app/types';
  3. import { getBackendSrv } from '../../../core/services/backend_srv';
  4. type ThunkResult<R> = ThunkAction<R, StoreState, undefined, any>;
  5. export enum ActionTypes {
  6. LoadOrganization = 'LOAD_ORGANISATION',
  7. LoadPreferences = 'LOAD_PREFERENCES',
  8. SetOrganizationName = 'SET_ORGANIZATION_NAME',
  9. SetOrganizationTheme = 'SET_ORGANIZATION_THEME',
  10. SetOrganizationHomeDashboard = 'SET_ORGANIZATION_HOME_DASHBOARD',
  11. SetOrganizationTimezone = 'SET_ORGANIZATION_TIMEZONE',
  12. }
  13. interface LoadOrganizationAction {
  14. type: ActionTypes.LoadOrganization;
  15. payload: Organization;
  16. }
  17. interface LoadPreferencesAction {
  18. type: ActionTypes.LoadPreferences;
  19. payload: OrganizationPreferences;
  20. }
  21. interface SetOrganizationNameAction {
  22. type: ActionTypes.SetOrganizationName;
  23. payload: string;
  24. }
  25. interface SetOrganizationThemeAction {
  26. type: ActionTypes.SetOrganizationTheme;
  27. payload: string;
  28. }
  29. interface SetOrganizationHomeDashboardAction {
  30. type: ActionTypes.SetOrganizationHomeDashboard;
  31. payload: number;
  32. }
  33. interface SetOrganizationTimezoneAction {
  34. type: ActionTypes.SetOrganizationTimezone;
  35. payload: string;
  36. }
  37. const organisationLoaded = (organisation: Organization) => ({
  38. type: ActionTypes.LoadOrganization,
  39. payload: organisation,
  40. });
  41. const preferencesLoaded = (preferences: OrganizationPreferences) => ({
  42. type: ActionTypes.LoadPreferences,
  43. payload: preferences,
  44. });
  45. export const setOrganizationName = (orgName: string) => ({
  46. type: ActionTypes.SetOrganizationName,
  47. payload: orgName,
  48. });
  49. export const setOrganizationTheme = (theme: string) => ({
  50. type: ActionTypes.SetOrganizationTheme,
  51. payload: theme,
  52. });
  53. export const setOrganizationHomeDashboard = (id: number) => ({
  54. type: ActionTypes.SetOrganizationHomeDashboard,
  55. payload: id,
  56. });
  57. export const setOrganizationTimezone = (timezone: string) => ({
  58. type: ActionTypes.SetOrganizationTimezone,
  59. payload: timezone,
  60. });
  61. export type Action =
  62. | LoadOrganizationAction
  63. | LoadPreferencesAction
  64. | SetOrganizationNameAction
  65. | SetOrganizationThemeAction
  66. | SetOrganizationHomeDashboardAction
  67. | SetOrganizationTimezoneAction;
  68. export function loadOrganization(): ThunkResult<void> {
  69. return async dispatch => {
  70. const organisationResponse = await getBackendSrv().get('/api/org');
  71. dispatch(organisationLoaded(organisationResponse));
  72. return organisationResponse;
  73. };
  74. }
  75. export function loadOrganizationPreferences(): ThunkResult<void> {
  76. return async dispatch => {
  77. const preferencesResponse = await getBackendSrv().get('/api/org/preferences');
  78. dispatch(preferencesLoaded(preferencesResponse));
  79. };
  80. }
  81. export function updateOrganization() {
  82. return async (dispatch, getStore) => {
  83. const organization = getStore().organization.organization;
  84. await getBackendSrv().put('/api/org', { name: organization.name });
  85. dispatch(loadOrganization());
  86. };
  87. }
  88. export function updateOrganizationPreferences() {
  89. return async (dispatch, getStore) => {
  90. const preferences = getStore().organization.preferences;
  91. await getBackendSrv().put('/api/org/preferences', preferences);
  92. window.location.reload();
  93. };
  94. }