client/src/sagas/groupSaga.js
author Alexandre Segura <mex.zktk@gmail.com>
Wed, 28 Jun 2017 12:54:48 +0200
changeset 101 e165aa89ac82
parent 100 6fd752d98933
child 132 906a6c7c7943
permissions -rw-r--r--
Add group dropdown, update session after group creation.
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';
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     3
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     4
function* watchCreateGroup(context) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     5
  while (true) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     6
    const { group } = yield take(types.GROUP_CREATE_ASYNC);
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     7
    const client = context.client;
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     8
    try {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
     9
      const response = yield client.post('/api/auth/group/', group);
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    10
      yield put({ type: types.GROUP_CREATE_SUCCESS, group: response });
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    11
    } catch (e) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    12
      yield put({ type: types.GROUP_CREATE_ERROR, error: e });
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    13
    }
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    14
  }
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    15
}
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    16
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    17
function* watchCreateGroupAndUpdateSession(context) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    18
  while (true) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    19
    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
    20
    const client = context.client;
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    21
    try {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    22
      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
    23
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    24
      const actions = [
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    25
        {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    26
          type: types.GROUP_CREATE_SUCCESS,
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    27
          group: response
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    28
        },
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    29
        {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    30
          type: types.UPDATE_SESSION,
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    31
          session: session,
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    32
          values: { group: response },
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    33
        }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    34
      ];
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
      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
    37
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    38
    } catch (e) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    39
      yield put({ type: types.GROUP_CREATE_ERROR, error: e });
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    40
    }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    41
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    42
}
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    43
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    44
function* watchLoadGroups(context) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    45
  const client = context.client;
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    46
  while (true) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    47
    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
    48
    try {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    49
      const response = yield client.get('/api/auth/group/');
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    50
      yield put({ type: types.GROUP_LOAD_SUCCESS, groups: response });
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    51
    } catch (e) {
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    52
      yield put({ type: types.GROUP_LOAD_ERROR, error: e });
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    53
    }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    54
  }
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    55
}
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    56
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    57
export default function* rootSaga(context) {
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    58
  yield all([
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    59
    watchCreateGroup(context),
101
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    60
    watchCreateGroupAndUpdateSession(context),
e165aa89ac82 Add group dropdown, update session after group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents: 100
diff changeset
    61
    watchLoadGroups(context),
100
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    62
  ])
6fd752d98933 Introduce group creation.
Alexandre Segura <mex.zktk@gmail.com>
parents:
diff changeset
    63
}