From dbff21db9d6ed2b5f9f03e5e7202e0ebc9575b4e Mon Sep 17 00:00:00 2001 From: William Petit Date: Tue, 25 Feb 2020 12:31:03 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9coupage=20des=20sagas=20par=20domaine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/logout.js | 12 +---- frontend/src/sagas/auth.sagas.js | 54 ------------------- frontend/src/sagas/auth/login.saga.js | 31 +++++++++++ .../src/sagas/auth/logout-redirect.saga.js | 8 +++ frontend/src/sagas/auth/logout.saga.js | 25 +++++++++ frontend/src/sagas/auth/root.saga.js | 14 +++++ .../failure.saga.js} | 7 ++- frontend/src/sagas/failure/root.saga.js | 8 +++ frontend/src/sagas/project/root.saga.js | 0 frontend/src/sagas/root.js | 16 ++---- frontend/src/util/history.js | 4 +- 11 files changed, 98 insertions(+), 81 deletions(-) delete mode 100644 frontend/src/sagas/auth.sagas.js create mode 100644 frontend/src/sagas/auth/login.saga.js create mode 100644 frontend/src/sagas/auth/logout-redirect.saga.js create mode 100644 frontend/src/sagas/auth/logout.saga.js create mode 100644 frontend/src/sagas/auth/root.saga.js rename frontend/src/sagas/{failure.sagas.js => failure/failure.saga.js} (54%) create mode 100644 frontend/src/sagas/failure/root.saga.js create mode 100644 frontend/src/sagas/project/root.saga.js diff --git a/frontend/src/pages/logout.js b/frontend/src/pages/logout.js index b04ad75..1764623 100644 --- a/frontend/src/pages/logout.js +++ b/frontend/src/pages/logout.js @@ -3,14 +3,10 @@ import { logout } from '../actions/auth.actions'; import { connect } from 'react-redux'; import { ConnectedPage as Page } from './page'; -export function LogoutPage({ dispatch, isLoggedIn, history }) { +export function LogoutPage({ dispatch }) { useEffect(() => { dispatch(logout()); }, []); - - useEffect(() => { - if (!isLoggedIn) history.push("/login"); - }, [isLoggedIn]); return ( @@ -23,8 +19,4 @@ export function LogoutPage({ dispatch, isLoggedIn, history }) { ) } -function mapStateToProps({ session }) { - return { isLoggedIn: session.isLoggedIn }; -} - -export const ConnectedLogoutPage = connect(mapStateToProps)(LogoutPage); \ No newline at end of file +export const ConnectedLogoutPage = connect()(LogoutPage); \ No newline at end of file diff --git a/frontend/src/sagas/auth.sagas.js b/frontend/src/sagas/auth.sagas.js deleted file mode 100644 index a2df936..0000000 --- a/frontend/src/sagas/auth.sagas.js +++ /dev/null @@ -1,54 +0,0 @@ -import { call, put } from 'redux-saga/effects'; -import { loginFailure, loginSuccess, logoutFailure, logoutSuccess } from '../actions/auth.actions'; -import { addMessage } from '../actions/message.actions'; -import { APIClient } from '../services/api-client.service.js'; -import { UnauthorizedError } from '../errors/unauthorized.error.js'; - - -export function* loginSaga(action) { - const client = new APIClient(); - let result; - try { - result = yield call(client.login, action.username, action.password); - } catch(err) { - if (err instanceof UnauthorizedError) { - yield put(addMessage('warning', "Identifiants invalides.")); - return; - } - - yield put(loginFailure(action.username, err)); - yield put(addMessage('danger', "Une erreur inconnue bloque le fonctionnement normal de l'application. Veuillez réessayer plus tard.")); - return - } - - if ('error' in result) { - yield put(loginFailure(action.username, result.error)); - const message = result.error.message ? result.error.message : result.error.toString(); - yield put(addMessage('danger', message)); - return - } - - yield put(loginSuccess(action.username)); -} - - -export function* logoutSaga(action) { - const client = new APIClient(); - let result; - try { - result = yield call(client.logout); - } catch(err) { - yield put(logoutFailure(err)); - yield put(addMessage('danger', "Une erreur inconnue bloque le fonctionnement normal de l'application. Veuillez réessayer plus tard.")); - return; - } - - if ('error' in result) { - yield put(logoutFailure(action.username, result.error)); - const message = result.error.message ? result.error.message : result.error.toString(); - yield put(addMessage('danger', message)); - return - } - - yield put(logoutSuccess(action.username)); -} diff --git a/frontend/src/sagas/auth/login.saga.js b/frontend/src/sagas/auth/login.saga.js new file mode 100644 index 0000000..74f00f7 --- /dev/null +++ b/frontend/src/sagas/auth/login.saga.js @@ -0,0 +1,31 @@ +import { call, put } from 'redux-saga/effects'; +import { loginFailure, loginSuccess } from '../../actions/auth.actions'; +import { addMessage } from '../../actions/message.actions'; +import { APIClient } from '../../services/api-client.service.js'; +import { UnauthorizedError } from '../../errors/unauthorized.error.js'; + +export function* loginSaga(action) { + const client = new APIClient(); + let result; + try { + result = yield call(client.login, action.username, action.password); + } catch(err) { + if (err instanceof UnauthorizedError) { + yield put(addMessage('warning', "Identifiants invalides.")); + return; + } + + yield put(loginFailure(action.username, err)); + yield put(addMessage('danger', "Une erreur inconnue bloque le fonctionnement normal de l'application. Veuillez réessayer plus tard.")); + return + } + + if ('error' in result) { + yield put(loginFailure(action.username, result.error)); + const message = result.error.message ? result.error.message : result.error.toString(); + yield put(addMessage('danger', message)); + return + } + + yield put(loginSuccess(action.username)); +} diff --git a/frontend/src/sagas/auth/logout-redirect.saga.js b/frontend/src/sagas/auth/logout-redirect.saga.js new file mode 100644 index 0000000..8140dbb --- /dev/null +++ b/frontend/src/sagas/auth/logout-redirect.saga.js @@ -0,0 +1,8 @@ +import { history } from "../../util/history"; +import { addMessage } from '../../actions/message.actions'; +import { put } from 'redux-saga/effects'; + +export function* logoutRedirectSaga() { + yield put(addMessage("success", "Vous êtes déconnecté.")); + history.push('/login'); +} diff --git a/frontend/src/sagas/auth/logout.saga.js b/frontend/src/sagas/auth/logout.saga.js new file mode 100644 index 0000000..4d9db86 --- /dev/null +++ b/frontend/src/sagas/auth/logout.saga.js @@ -0,0 +1,25 @@ +import { APIClient } from "../../services/api-client.service"; +import { logoutFailure, logoutSuccess } from "../../actions/auth.actions"; +import { addMessage } from "../../actions/message.actions"; +import { call, put } from 'redux-saga/effects'; + +export function* logoutSaga() { + const client = new APIClient(); + let result; + try { + result = yield call(client.logout); + } catch(err) { + yield put(logoutFailure(err)); + yield put(addMessage('danger', "Une erreur inconnue bloque le fonctionnement normal de l'application. Veuillez réessayer plus tard.")); + return; + } + + if ('error' in result) { + yield put(logoutFailure(result.error)); + const message = result.error.message ? result.error.message : result.error.toString(); + yield put(addMessage('danger', message)); + return + } + + yield put(logoutSuccess()); +} \ No newline at end of file diff --git a/frontend/src/sagas/auth/root.saga.js b/frontend/src/sagas/auth/root.saga.js new file mode 100644 index 0000000..14458c0 --- /dev/null +++ b/frontend/src/sagas/auth/root.saga.js @@ -0,0 +1,14 @@ +import { LOGIN_REQUEST, LOGOUT_REQUEST, LOGOUT_SUCCESS } from "../../actions/auth.actions"; +import { loginSaga } from "./login.saga"; +import { logoutSaga } from "./logout.saga"; +import { logoutRedirectSaga } from "./logout-redirect.saga"; +import { all, takeLatest } from 'redux-saga/effects'; + +export function * rootSaga() { + yield all([ + takeLatest(LOGIN_REQUEST, loginSaga), + takeLatest(LOGOUT_REQUEST, logoutSaga), + // Redirect after logout success + takeLatest(LOGOUT_SUCCESS, logoutRedirectSaga), + ]); +} diff --git a/frontend/src/sagas/failure.sagas.js b/frontend/src/sagas/failure/failure.saga.js similarity index 54% rename from frontend/src/sagas/failure.sagas.js rename to frontend/src/sagas/failure/failure.saga.js index 2add5d5..f29f744 100644 --- a/frontend/src/sagas/failure.sagas.js +++ b/frontend/src/sagas/failure/failure.saga.js @@ -1,10 +1,9 @@ import { put } from 'redux-saga/effects'; -import { UnauthorizedError } from '../errors/unauthorized.error.js'; -import { addMessage } from '../actions/message.actions.js'; -import { logout } from '../actions/auth.actions.js'; +import { UnauthorizedError } from '../../errors/unauthorized.error.js'; +import { addMessage } from '../../actions/message.actions.js'; +import { logout } from '../../actions/auth.actions.js'; export function* failureActionSaga({ error }) { - console.error(error); if (error instanceof UnauthorizedError) { yield put(addMessage('danger', 'Vous avez été déconnecté.')); yield put(logout()); diff --git a/frontend/src/sagas/failure/root.saga.js b/frontend/src/sagas/failure/root.saga.js new file mode 100644 index 0000000..8537073 --- /dev/null +++ b/frontend/src/sagas/failure/root.saga.js @@ -0,0 +1,8 @@ +import { failureActionSaga } from "./failure.saga"; +import { takeLatest, all } from "redux-saga/effects"; + +export function * rootSaga(action) { + yield all([ + takeLatest(action => /_FAILURE$/g.test(action.type), failureActionSaga), + ]); +} diff --git a/frontend/src/sagas/project/root.saga.js b/frontend/src/sagas/project/root.saga.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/sagas/root.js b/frontend/src/sagas/root.js index 3576572..db8f90a 100644 --- a/frontend/src/sagas/root.js +++ b/frontend/src/sagas/root.js @@ -1,16 +1,10 @@ -import { all, takeLatest } from 'redux-saga/effects'; -import { LOGIN_REQUEST, LOGOUT_REQUEST } from '../actions/auth.actions'; -import { loginSaga, logoutSaga } from './auth.sagas'; -import { PROJECT_USER_LIST, PROJECT_LIST } from '../actions/project'; -import { projectUserListSaga, projectListSaga } from './project'; -import { failureActionSaga } from './failure.sagas'; +import { all } from 'redux-saga/effects'; +import { rootSaga as authRootSaga } from './auth/root.saga'; +import { rootSaga as failureRootSaga } from './failure/root.saga'; export default function* rootSaga() { yield all([ - takeLatest(LOGIN_REQUEST, loginSaga), - takeLatest(LOGOUT_REQUEST, logoutSaga), - takeLatest(PROJECT_USER_LIST, projectUserListSaga), - takeLatest(PROJECT_LIST, projectListSaga), - takeLatest(action => /_FAILURE$/g.test(action.type), failureActionSaga), + authRootSaga(), + failureRootSaga(), ]); } diff --git a/frontend/src/util/history.js b/frontend/src/util/history.js index f529e5d..d5bde76 100644 --- a/frontend/src/util/history.js +++ b/frontend/src/util/history.js @@ -1,3 +1,3 @@ -import { createBrowserHistory } from 'history'; +import { createHashHistory } from 'history'; -export const history = createBrowserHistory(); +export const history = createHashHistory();