1import { config } from '@grafana/runtime';
2
3import { ChangePasswordFields, ProfileUpdateFields } from '../types';
4import { ThunkResult, UserOrg } from '../../../types';
5import {
6  initLoadOrgs,
7  initLoadSessions,
8  initLoadTeams,
9  orgsLoaded,
10  sessionsLoaded,
11  setUpdating,
12  teamsLoaded,
13  userLoaded,
14  userSessionRevoked,
15} from './reducers';
16import { api } from '../api';
17
18export function changePassword(payload: ChangePasswordFields): ThunkResult<void> {
19  return async function (dispatch) {
20    dispatch(setUpdating({ updating: true }));
21    await api.changePassword(payload);
22    dispatch(setUpdating({ updating: false }));
23  };
24}
25
26export function initUserProfilePage(): ThunkResult<void> {
27  return async function (dispatch) {
28    await dispatch(loadUser());
29    dispatch(loadTeams());
30    dispatch(loadOrgs());
31    dispatch(loadSessions());
32  };
33}
34
35export function loadUser(): ThunkResult<void> {
36  return async function (dispatch) {
37    const user = await api.loadUser();
38    dispatch(userLoaded({ user }));
39  };
40}
41
42function loadTeams(): ThunkResult<void> {
43  return async function (dispatch) {
44    dispatch(initLoadTeams());
45    const teams = await api.loadTeams();
46    dispatch(teamsLoaded({ teams }));
47  };
48}
49
50function loadOrgs(): ThunkResult<void> {
51  return async function (dispatch) {
52    dispatch(initLoadOrgs());
53    const orgs = await api.loadOrgs();
54    dispatch(orgsLoaded({ orgs }));
55  };
56}
57
58function loadSessions(): ThunkResult<void> {
59  return async function (dispatch) {
60    dispatch(initLoadSessions());
61    const sessions = await api.loadSessions();
62    dispatch(sessionsLoaded({ sessions }));
63  };
64}
65
66export function revokeUserSession(tokenId: number): ThunkResult<void> {
67  return async function (dispatch) {
68    dispatch(setUpdating({ updating: true }));
69    await api.revokeUserSession(tokenId);
70    dispatch(userSessionRevoked({ tokenId }));
71  };
72}
73
74export function changeUserOrg(org: UserOrg): ThunkResult<void> {
75  return async function (dispatch) {
76    dispatch(setUpdating({ updating: true }));
77    await api.setUserOrg(org);
78    window.location.href = config.appSubUrl + '/profile';
79  };
80}
81
82export function updateUserProfile(payload: ProfileUpdateFields): ThunkResult<void> {
83  return async function (dispatch) {
84    dispatch(setUpdating({ updating: true }));
85    await api.updateUserProfile(payload);
86    await dispatch(loadUser());
87    dispatch(setUpdating({ updating: false }));
88  };
89}
90