This repository has been archived on 2025-06-17. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

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;
}
}