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