diff -r 34a75bd8d0b9 -r d48946d164c6 client/src/sagas/networkSaga.js --- a/client/src/sagas/networkSaga.js Tue Jul 25 19:11:26 2017 +0200 +++ b/client/src/sagas/networkSaga.js Fri Jul 28 19:40:35 2017 +0200 @@ -4,14 +4,11 @@ import * as persistConstants from 'redux-persist/constants'; import jwt_decode from 'jwt-decode'; import moment from 'moment'; +import { delay } from './utils'; +import { setOnlineStatus } from '../actions/networkActions'; +import { getToken } from './selectors'; -// Utility function to delay effects -function delay(millis) { - const promise = new Promise(resolve => { - setTimeout(() => resolve(true), millis) - }); - return promise; -} + function pingServer(client, token) { const decodedToken = jwt_decode(token); @@ -32,14 +29,14 @@ } function* pollData(context) { - const token = yield select(state => state.token); + const token = yield select(getToken); // No token : we wait for a login if(!token) { yield take(types.AUTH_LOGIN_SUCCESS); } try { const res = yield pingServer(context.client, token); - yield call(context.callback, true); + yield put(setOnlineStatus(true)); if(res.token) { yield put({ type: types.AUTH_STORE_TOKEN_ASYNC, @@ -47,7 +44,7 @@ }); } } catch (error) { - yield call(context.callback, false); + yield put(setOnlineStatus(false)); //TODO: This is ugly... if ((error.non_field_errors && error.non_field_errors && @@ -69,8 +66,8 @@ // pollDate cancelled // if there is a token : this was a LOGIN, set status to ok // if there is no token : this was a LOGOUT, set status to ko and wait for login - const token = yield select(state => state.token); - yield call(context.callback, Boolean(token)); + const token = yield select(getToken); + yield put(setOnlineStatus(Boolean(token))); } } } @@ -83,8 +80,8 @@ // pollDate cancelled // if there is a token : this was a LOGIN, set status to ok // if there is no token : this was a LOGOUT, set status to ko and wait for login - const token = yield select(state => state.token); - yield call(context.callback, Boolean(token)); + const token = yield select(getToken); + yield put(setOnlineStatus(Boolean(token))); } } } @@ -106,9 +103,7 @@ } // Daemonize tasks in parallel -export default function* root(baseContext) { - const actionRes = yield take(types.OFFLINE_CONFIG_INITIALIZED); - const context = {...baseContext, ...actionRes.additionalContext}; +export default function* root(context) { yield all([ fork(watchPollData, context) // other watchers here