/
saga.js
88 lines (74 loc) · 2.59 KB
/
saga.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { LOCATION_CHANGE } from 'react-router-redux';
import { findIndex, get } from 'lodash';
import { takeLatest, put, fork, take, cancel, select, call } from 'redux-saga/effects';
import request from 'utils/request';
import {
deleteDataSucceeded,
fetchDataSucceeded,
setForm,
submitSucceeded,
} from './actions';
import {
DELETE_DATA,
FETCH_DATA,
SUBMIT,
} from './constants';
import {
makeSelectAllData,
makeSelectDataToDelete,
makeSelectDeleteEndPoint,
makeSelectModifiedData,
} from './selectors';
export function* dataDelete() {
try {
const allData = yield select(makeSelectAllData());
const dataToDelete = yield select(makeSelectDataToDelete());
const endPointAPI = yield select(makeSelectDeleteEndPoint());
const indexDataToDelete = findIndex(allData[endPointAPI], ['name', dataToDelete.name]);
if (indexDataToDelete !== -1) {
const id = dataToDelete.id;
const requestURL = `/users-permissions/${endPointAPI}/${id}`;
const response = yield call(request, requestURL, { method: 'DELETE' });
if (response.ok) {
yield put(deleteDataSucceeded(indexDataToDelete));
strapi.notification.success('users-permissions.notification.success.delete');
}
}
} catch(err) {
strapi.notification.error('users-permissions.notification.error.delete');
}
}
export function* dataFetch(action) {
try {
const response = yield call(request, `/users-permissions/${action.endPoint}`, { method: 'GET' });
if (action.endPoint === 'advanced') {
yield put(setForm(response));
} else {
const data = response[action.endPoint] || response;
yield put(fetchDataSucceeded(data));
}
} catch(err) {
strapi.notification.error('users-permissions.notification.error.fetch');
}
}
export function* submitData(action) {
try {
const body = yield select(makeSelectModifiedData());
const opts = { method: 'PUT', body: (action.endPoint === 'advanced') ? get(body, ['advanced', 'settings'], {}) : body };
yield call(request, `/users-permissions/${action.endPoint}`, opts);
yield put(submitSucceeded());
strapi.notification.success('users-permissions.notification.success.submit');
} catch(error) {
strapi.notification.error('notification.error');
}
}
// Individual exports for testing
export function* defaultSaga() {
const loadDataWatcher = yield fork(takeLatest, FETCH_DATA, dataFetch);
yield fork(takeLatest, DELETE_DATA, dataDelete);
yield fork(takeLatest, SUBMIT, submitData);
yield take(LOCATION_CHANGE);
yield cancel(loadDataWatcher);
}
// All sagas to be loaded
export default defaultSaga;