client/src/sagas/groupSaga.js
author ymh <ymh.work@gmail.com>
Thu, 03 Aug 2017 17:33:00 +0200
changeset 134 be36eed5e6e0
parent 133 6f3078f7fd47
child 135 b5aafa462956
permissions -rw-r--r--
add menu to change current group and create a new group
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     1
import { put, take, all } from 'redux-saga/effects'
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     2
import * as types from '../constants/actionTypes';
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
     3
import { groupCreateSuccess, groupCreateError, groupLoadSucess, groupLoadError } from '../actions/groupActions';
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
     4
import { updateSession } from '../actions/sessionsActions';
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
function* watchCreateGroup(context) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
  while (true) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
    const { group } = yield take(types.GROUP_CREATE_ASYNC);
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
    const client = context.client;
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
    try {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
      const response = yield client.post('/api/auth/group/', group);
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
    12
      yield put(groupCreateSuccess(response));
134
be36eed5e6e0 add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    13
      context.history.push('/sessions');
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
    } catch (e) {
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
    15
      yield put(groupCreateError(e));
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
    }
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    17
  }
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    18
}
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    19
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    20
function* watchCreateGroupAndUpdateSession(context) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    21
  while (true) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    22
    const { session, group } = yield take(types.GROUP_CREATE_AND_UPDATE_ASYNC);
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    23
    const client = context.client;
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    24
    try {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    25
      const response = yield client.post('/api/auth/group/', group);
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    26
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    27
      const actions = [
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
    28
        groupCreateSuccess(response),
133
6f3078f7fd47 Work on correct protocol propagation
ymh <ymh.work@gmail.com>
parents: 132
diff changeset
    29
        updateSession(session, {group: response.name, protocol: response.protocol})
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    30
      ];
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    31
      yield all(actions.map(action => put(action)));
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    32
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    33
    } catch (e) {
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
    34
      yield put(groupCreateError(e));
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    35
    }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    36
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    37
}
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    38
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    39
function* watchLoadGroups(context) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    40
  const client = context.client;
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    41
  while (true) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    42
    yield take(types.GROUP_LOAD_ASYNC);
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    43
    try {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    44
      const response = yield client.get('/api/auth/group/');
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
    45
      yield put(groupLoadSucess(response.results));
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    46
    } catch (e) {
132
906a6c7c7943 add group to sync + create groups + various component cleaning
ymh <ymh.work@gmail.com>
parents: 101
diff changeset
    47
      yield put(groupLoadError(e));
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    48
    }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    49
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    50
}
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    51
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    52
export default function* rootSaga(context) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    53
  yield all([
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    54
    watchCreateGroup(context),
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    55
    watchCreateGroupAndUpdateSession(context),
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    56
    watchLoadGroups(context),
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    57
  ])
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    58
}