101 lines
2.4 KiB
JavaScript
Raw Normal View History

2016-05-01 13:31:40 +03:00
import { routeActions } from 'react-router-redux';
import accounts from 'services/api/accounts';
2016-11-14 07:28:25 +02:00
import { reset as resetAccounts } from 'components/accounts/actions';
import authentication from 'services/api/authentication';
2016-05-19 22:41:43 +03:00
import { setLocale } from 'components/i18n/actions';
2016-02-26 08:25:47 +02:00
export const UPDATE = 'USER_UPDATE';
/**
2016-11-05 12:11:41 +02:00
* Merge data into user's state
*
* @param {object} payload
* @return {object} - action definition
*/
export function updateUser(payload) {
return {
type: UPDATE,
payload
};
}
2016-05-19 22:41:43 +03:00
export const CHANGE_LANG = 'USER_CHANGE_LANG';
export function changeLang(lang) {
return (dispatch, getState) => dispatch(setLocale(lang))
.then((lang) => {
const {user: {isGuest, lang: oldLang}} = getState();
2016-11-05 12:11:41 +02:00
if (oldLang !== lang) {
!isGuest && accounts.changeLang(lang);
2016-11-05 12:11:41 +02:00
dispatch({
type: CHANGE_LANG,
payload: {
lang
}
});
}
2016-05-19 22:41:43 +03:00
});
}
export const SET = 'USER_SET';
2016-11-05 12:11:41 +02:00
/**
* Replace current user's state with a new one
*
* @param {User} payload
* @return {object} - action definition
*/
export function setUser(payload) {
return {
type: SET,
payload
};
}
export function logout() {
return (dispatch, getState) => {
if (getState().user.token) {
authentication.logout();
}
return new Promise((resolve) => {
setTimeout(() => { // a tiny timeout to allow logout before user's token will be removed
dispatch(setUser({
lang: getState().user.lang,
isGuest: true
}));
2016-11-14 07:28:25 +02:00
dispatch(resetAccounts());
dispatch(routeActions.push('/login'));
resolve();
}, 0);
});
};
}
2016-02-26 08:25:47 +02:00
export function fetchUserData() {
return (dispatch) =>
accounts.current()
.then((resp) => {
2016-11-05 12:11:41 +02:00
dispatch(updateUser({
isGuest: false,
...resp
}));
2016-05-19 22:41:43 +03:00
return dispatch(changeLang(resp.lang));
});
2016-02-26 08:25:47 +02:00
}
2016-08-02 21:59:29 +03:00
export function acceptRules() {
return (dispatch) =>
2016-11-05 12:11:41 +02:00
accounts.acceptRules().then((resp) => {
2016-08-02 21:59:29 +03:00
dispatch(updateUser({
shouldAcceptRules: false
}));
return resp;
});
}