Archived
136 lines
3.1 KiB
JavaScript
136 lines
3.1 KiB
JavaScript
import {
|
|
LOGIN_REQUEST,
|
|
LOGIN_SUCCESS,
|
|
LOGIN_FAILURE,
|
|
LOGOUT,
|
|
USER_DATA_REQUEST,
|
|
USER_DATA_SUCCESS,
|
|
USER_DATA_FAILURE,
|
|
REGISTER_USER_REQUEST,
|
|
REGISTER_USER_FAILURE,
|
|
REGISTER_USER_SUCCESS,
|
|
MEMBERSHIP_CHARGE_REQUEST,
|
|
MEMBERSHIP_CHARGE_FAILURE,
|
|
MEMBERSHIP_CHARGE_SUCCESS,
|
|
} from './actions';
|
|
|
|
import { snakeToCamelCase } from './utils';
|
|
|
|
const initialState = {
|
|
isAuthenticated: false,
|
|
isLoggingIn: false,
|
|
isFetchingUserData: false,
|
|
isRegisteringUser: false,
|
|
isChargingMembership: false,
|
|
userToken: null,
|
|
user: null,
|
|
loginError: null,
|
|
userError: null,
|
|
registerError: null,
|
|
chargeError: null,
|
|
lastOrder: null,
|
|
};
|
|
|
|
function formatErrors(errs) {
|
|
const _errs = {};
|
|
Object.entries(errs).forEach(([key, value]) => {
|
|
_errs[snakeToCamelCase(key)] = Array.isArray(value) ? value.join('\n') : value;
|
|
});
|
|
return _errs;
|
|
}
|
|
|
|
export default function duskenApp(state = initialState, action) {
|
|
switch (action.type) {
|
|
/* Login */
|
|
case LOGIN_REQUEST:
|
|
return Object.assign({}, state, {
|
|
isLoggingIn: true,
|
|
loginError: null,
|
|
});
|
|
|
|
case LOGIN_FAILURE:
|
|
return Object.assign({}, state, {
|
|
isLoggingIn: false,
|
|
loginError: action.loginError,
|
|
});
|
|
|
|
case LOGIN_SUCCESS:
|
|
return Object.assign({}, state, {
|
|
isLoggingIn: false,
|
|
isAuthenticated: true,
|
|
userToken: action.token,
|
|
});
|
|
|
|
case LOGOUT:
|
|
return initialState;
|
|
|
|
/* User data */
|
|
case USER_DATA_REQUEST:
|
|
return Object.assign({}, state, {
|
|
isFetchingUserData: true,
|
|
userError: null,
|
|
});
|
|
|
|
case USER_DATA_FAILURE:
|
|
return Object.assign({}, state, {
|
|
isFetchingUserData: false,
|
|
userError: action.userError,
|
|
});
|
|
|
|
case USER_DATA_SUCCESS:
|
|
return Object.assign({}, state, {
|
|
isFetchingUserData: false,
|
|
user: action.data,
|
|
});
|
|
|
|
/* Register user */
|
|
case REGISTER_USER_REQUEST:
|
|
return Object.assign({}, state, {
|
|
isRegisteringUser: true,
|
|
registerError: null,
|
|
});
|
|
|
|
case REGISTER_USER_FAILURE:
|
|
return Object.assign({}, state, {
|
|
isRegisteringUser: false,
|
|
registerError: formatErrors(action.registerError),
|
|
});
|
|
|
|
case REGISTER_USER_SUCCESS:
|
|
// eslint-disable-next-line no-case-declarations
|
|
const userData = action.data;
|
|
// eslint-disable-next-line no-case-declarations
|
|
const token = action.data.auth_token;
|
|
delete userData.auth_token;
|
|
|
|
return Object.assign({}, state, {
|
|
isRegisteringUser: false,
|
|
isAuthenticated: true,
|
|
user: userData,
|
|
userToken: token,
|
|
});
|
|
|
|
/* User data */
|
|
case MEMBERSHIP_CHARGE_REQUEST:
|
|
return Object.assign({}, state, {
|
|
isChargingMembership: true,
|
|
chargeError: null,
|
|
});
|
|
|
|
case MEMBERSHIP_CHARGE_FAILURE:
|
|
return Object.assign({}, state, {
|
|
isChargingMembership: false,
|
|
chargeError: action.chargeError,
|
|
});
|
|
|
|
case MEMBERSHIP_CHARGE_SUCCESS:
|
|
return Object.assign({}, state, {
|
|
isChargingMembership: false,
|
|
lastOrder: action.data,
|
|
});
|
|
|
|
default:
|
|
return state;
|
|
}
|
|
}
|