@shopgate/pwa-common
Version:
Common library for the Shopgate Connect PWA.
69 lines (68 loc) • 1.69 kB
JavaScript
import { APP_DID_START, REQUEST_LOGIN, SUCCESS_LOGIN, TOGGLE_LOGGED_IN, ERROR_LOGIN, SUCCESS_LOGOUT, DISABLE_LOGIN } from "../../constants/ActionTypes";
const defaultState = {
isFetching: false,
disabled: false,
isLoggedIn: false,
errors: null,
strategy: null,
expires: null
};
/**
* Stores the login state
* @param {Object} [state] The current state.
* @param {Object} action The action object.
* @return {Object} The new state.
*/
export default function userLoginReducer(state = defaultState, action = {}) {
switch (action.type) {
case APP_DID_START:
return {
...state,
disabled: false
};
case DISABLE_LOGIN:
return {
...state,
disabled: action.value
};
case REQUEST_LOGIN:
return {
...state,
strategy: action.strategy,
isFetching: true
};
case SUCCESS_LOGIN:
return {
...state,
isLoggedIn: true,
errors: null,
isFetching: false,
strategy: action.strategy,
...(typeof action.sessionLifetimeInSeconds === 'number' ? {
expires: new Date().getTime() + action.sessionLifetimeInSeconds * 1000
} : {
expires: null
})
};
case ERROR_LOGIN:
return {
...state,
errors: action.messages,
isLoggedIn: false,
isFetching: false
};
case TOGGLE_LOGGED_IN:
return {
...state,
isLoggedIn: action.value,
strategy: null,
...(action.value === false ? {
expires: null
} : null)
};
case SUCCESS_LOGOUT:
return defaultState;
default:
return state;
}
}