141 lines
4.4 KiB
JavaScript
141 lines
4.4 KiB
JavaScript
|
|
import { AppConstants } from '../../constants/AppConstants.js';
|
|
import SessionWorkerManager from '../../SessionWorkerManager.js';
|
|
import AppActions, { EnumAppActions } from '../../app/AppActions.js';
|
|
import BaseActions from '../../app/BaseActions.js';
|
|
import DOMAINS from '../../constants/Domini.js';
|
|
import OPZIONI from '../../constants/Opzioni.js';
|
|
import Rest from '../../webapi/Rest.js';
|
|
import { NotificationManager } from 'arm-core-layouts';
|
|
import { i18n } from 'arm-common';
|
|
import KeepAliveWorkerManager from '../../KeepAliveWorkerManager.js';
|
|
|
|
|
|
export const EnumAccountActions = Object.freeze({
|
|
LOGIN_SUCCESS: 'EnumAccountActions.LOGIN_SUCCESS',
|
|
LOGIN_FAILED: 'EnumAccountActions.LOGIN_FAILED',
|
|
LOGOUT: 'EnumAccountActions.LOGOUT',
|
|
SSO: 'EnumAccountActions.SSO',
|
|
UPDATE_FORM: 'EnumAccountActions.UPDATE_FORM',
|
|
ALIVE_STATUS: 'EnumAccountActions.ALIVE_STATUS',
|
|
SESSION_EXPIRED: 'account_actions.SESSION_EXPIRED',
|
|
});
|
|
|
|
const BASE_PATH = 'authentication';
|
|
|
|
class AccountActions extends BaseActions {
|
|
getReducer(state) {
|
|
if (typeof state === 'function') state = state();
|
|
return state.account;
|
|
}
|
|
|
|
createPath(path) {
|
|
return `${BASE_PATH}/${path}`;
|
|
}
|
|
|
|
login() {
|
|
return async (dispatch, getState) => {
|
|
const { userid, password } = this.getReducer(getState);
|
|
|
|
try {
|
|
const utente = await Rest.postForm(this.createPath('login'), { userid, password, clientVersion: AppConstants.VERSION }, dispatch);
|
|
|
|
await dispatch(this.postLogin(utente));
|
|
|
|
const username = utente.name || utente.lastName || ' ';
|
|
|
|
NotificationManager.success(i18n("APP.ACCOUNT.WELCOME", "Benvenuto #username#!", "username", username));
|
|
|
|
return utente;
|
|
} catch (error) {
|
|
console.warn("[AccountActions.js]: Authentication failed", error);
|
|
|
|
dispatch({ type: EnumAccountActions.LOGIN_FAILED });
|
|
}
|
|
|
|
return Promise.reject();
|
|
}
|
|
}
|
|
|
|
postLogin(resolve) {
|
|
return async (dispatch) => {
|
|
console.log("[AccountActions.js]: Authentication success");
|
|
|
|
dispatch({ type: EnumAccountActions.LOGIN_SUCCESS, user: resolve });
|
|
|
|
console.log("[AccountActions.js]: user language", resolve.codLang);
|
|
|
|
KeepAliveWorkerManager.init(
|
|
(aliveStatus) => dispatch(this.setAliveStatus(aliveStatus)),
|
|
AppConstants.KEEP_ALIVE_MINUTES
|
|
);
|
|
|
|
await dispatch(this.loadUtilities());
|
|
|
|
return resolve;
|
|
}
|
|
}
|
|
|
|
setAliveStatus(aliveStatus) {
|
|
return {
|
|
type: EnumAccountActions.ALIVE_STATUS,
|
|
aliveStatus: aliveStatus
|
|
}
|
|
}
|
|
|
|
logout() {
|
|
return dispatch => Rest.post("authentication/logout", null, dispatch).then(
|
|
resolve => {
|
|
dispatch({ type: EnumAccountActions.LOGOUT });
|
|
return resolve;
|
|
},
|
|
reject => reject
|
|
);
|
|
}
|
|
|
|
loadUtilities(utilities) {
|
|
console.log("[AccountActions.js]: get OPTIONS, DOMAINS and AP_LANG");
|
|
|
|
if (!utilities) {
|
|
// Utilities di default.
|
|
utilities = {
|
|
codiciOpzioni: OPZIONI,
|
|
codiciDomini: DOMAINS,
|
|
codiciApLang: AppConstants.I18N_CODES
|
|
};
|
|
}
|
|
|
|
return (dispatch) => {
|
|
return Rest.post("utilities/load", utilities, dispatch, null).then(
|
|
resolve => {
|
|
dispatch({
|
|
type: EnumAppActions.LOAD_OPZIONI,
|
|
opzioni: resolve.opzioni || [],
|
|
});
|
|
dispatch({
|
|
type: EnumAppActions.LOAD_DOMINI,
|
|
domini: resolve.domini || []
|
|
});
|
|
dispatch({
|
|
type: EnumAppActions.LOAD_I18N,
|
|
i18nlabels: resolve.apLang
|
|
});
|
|
return resolve;
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
updateForm(value, key) {
|
|
return {
|
|
type: EnumAccountActions.UPDATE_FORM,
|
|
value, key
|
|
}
|
|
}
|
|
|
|
logoutExpiredSession() {
|
|
return { type: EnumAccountActions.SESSION_EXPIRED }
|
|
}
|
|
}
|
|
|
|
export default AccountActions = new AccountActions; |