client/src/sagas/groupSaga.js
changeset 135 b5aafa462956
parent 134 be36eed5e6e0
equal deleted inserted replaced
134:be36eed5e6e0 135:b5aafa462956
     1 import { put, take, all } from 'redux-saga/effects'
     1 import { put, take, all } from 'redux-saga/effects'
     2 import * as types from '../constants/actionTypes';
     2 import * as types from '../constants/actionTypes';
     3 import { groupCreateSuccess, groupCreateError, groupLoadSucess, groupLoadError } from '../actions/groupActions';
     3 import { groupCreateSuccess, groupCreateError, groupLoadSucess, groupLoadError } from '../actions/groupActions';
     4 import { updateSession } from '../actions/sessionsActions';
       
     5 
     4 
     6 function* watchCreateGroup(context) {
     5 function* watchCreateGroup(context) {
     7   while (true) {
     6   while (true) {
     8     const { group } = yield take(types.GROUP_CREATE_ASYNC);
     7     const { group } = yield take(types.GROUP_CREATE_ASYNC);
     9     const client = context.client;
     8     const client = context.client;
    10     try {
     9     try {
    11       const response = yield client.post('/api/auth/group/', group);
    10       const response = yield client.post('/api/auth/group/', group);
    12       yield put(groupCreateSuccess(response));
    11       yield put(groupCreateSuccess(response));
    13       context.history.push('/sessions');
    12       context.history.push('/sessions');
    14     } catch (e) {
       
    15       yield put(groupCreateError(e));
       
    16     }
       
    17   }
       
    18 }
       
    19 
       
    20 function* watchCreateGroupAndUpdateSession(context) {
       
    21   while (true) {
       
    22     const { session, group } = yield take(types.GROUP_CREATE_AND_UPDATE_ASYNC);
       
    23     const client = context.client;
       
    24     try {
       
    25       const response = yield client.post('/api/auth/group/', group);
       
    26 
       
    27       const actions = [
       
    28         groupCreateSuccess(response),
       
    29         updateSession(session, {group: response.name, protocol: response.protocol})
       
    30       ];
       
    31       yield all(actions.map(action => put(action)));
       
    32 
       
    33     } catch (e) {
    13     } catch (e) {
    34       yield put(groupCreateError(e));
    14       yield put(groupCreateError(e));
    35     }
    15     }
    36   }
    16   }
    37 }
    17 }
    50 }
    30 }
    51 
    31 
    52 export default function* rootSaga(context) {
    32 export default function* rootSaga(context) {
    53   yield all([
    33   yield all([
    54     watchCreateGroup(context),
    34     watchCreateGroup(context),
    55     watchCreateGroupAndUpdateSession(context),
       
    56     watchLoadGroups(context),
    35     watchLoadGroups(context),
    57   ])
    36   ])
    58 }
    37 }