diff --git a/frontend/app/components/Login/Login.js b/frontend/app/components/Login/Login.js index 70ee0f74e..06a2a8dd7 100644 --- a/frontend/app/components/Login/Login.js +++ b/frontend/app/components/Login/Login.js @@ -122,15 +122,15 @@ export default class Login extends React.Component { - { errors && -
+ { errors.length ? + (
{ errors.map(error => (
{ error }
)) } -
+
) : null } {/*
*/} diff --git a/frontend/app/duck/user.js b/frontend/app/duck/user.js index f28fb7ed0..5814f082c 100644 --- a/frontend/app/duck/user.js +++ b/frontend/app/duck/user.js @@ -28,7 +28,11 @@ export const initialState = Map({ authDetails: {}, onboarding: false, sites: List(), - jwt: null + jwt: null, + loginRequest: { + loading: false, + errors: [] + }, }); const setClient = (state, data) => { @@ -50,10 +54,12 @@ const reducer = (state = initialState, action = {}) => { switch (action.type) { case UPDATE_JWT: return state.set('jwt', action.data); + case LOGIN.REQUEST: + return state.set('loginRequest', { loading: true, errors: [] }) case RESET_PASSWORD.SUCCESS: case UPDATE_PASSWORD.SUCCESS: case LOGIN.SUCCESS: - state.set('account', Account({...action.data.user })) + state.set('account', Account({...action.data.user })).set('loginRequest', { loading: false, errors: [] }) case SIGNUP.SUCCESS: state.set('account', Account(action.data.user)).set('onboarding', true); case REQUEST_RESET_PASSWORD.SUCCESS: @@ -67,6 +73,8 @@ const reducer = (state = initialState, action = {}) => { return state.set('passwordErrors', List(action.errors)) case FETCH_ACCOUNT.FAILURE: case LOGIN.FAILURE: + deleteCookie('jwt', '/', 'openreplay.com') + return state.set('loginRequest', { loading: false, errors: ['Invalid username or password'] }); case DELETE.SUCCESS: case DELETE.FAILURE: deleteCookie('jwt', '/', 'openreplay.com') @@ -86,7 +94,6 @@ const reducer = (state = initialState, action = {}) => { export default withRequestState({ - loginRequest: LOGIN, signupRequest: SIGNUP, updatePasswordRequest: UPDATE_PASSWORD, requestResetPassowrd: REQUEST_RESET_PASSWORD, @@ -96,7 +103,7 @@ export default withRequestState({ updateAccountRequest: UPDATE_ACCOUNT, }, reducer); -export const login = params => dispatch => dispatch({ +export const login = params => ({ types: LOGIN.toArray(), call: client => client.post('/login', params), });