| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { take, fork, call, put } from 'redux-saga/effects';
- import axios from 'axios';
- import {
- DOC_CREATED,
- DOC_READ,
- DOC_UPDATED,
- DOC_DELETED
- } from 'constants/actions';
- import {
- docCreateResponded,
- docReadResponded,
- docUpdateResponded,
- docDeleteResponded
- } from 'actions/crud';
- export function *apiRequest(method, route, params = [], data = null) {
- let path = `/api1/${route}`;
- if (params.length) {
- path = `${path}/${params.join('/')}`;
- }
- const args = [[axios, method], path];
- if (['post', 'put'].includes(method)) {
- args.push(data);
- }
- try {
- const response = yield call(...args);
- return { response, err: null };
- } catch (err) {
- return { response: null, err };
- }
- }
- export function *createListener() {
- while (true) {
- const { route, pendingId, fields } = yield take(DOC_CREATED);
- const { response, err } = yield call(apiRequest, 'post', route, [], fields);
- yield put(docCreateResponded(route, pendingId, err, response));
- }
- }
- export function *readListener() {
- while (true) {
- const { route } = yield take(DOC_READ);
- const { response, err } = yield call(apiRequest, 'get', route);
- yield put(docReadResponded(route, err, response));
- }
- }
- export function *updateListener() {
- while (true) {
- const { route, id, fields } = yield take(DOC_UPDATED);
- const { response, err } = yield call(apiRequest, 'put', route, [id], fields);
- yield put(docUpdateResponded(route, id, err, response));
- }
- }
- export function *deleteListener() {
- while (true) {
- const { route, id } = yield take(DOC_DELETED);
- const { err } = yield call(apiRequest, 'delete', route, [id]);
- yield put(docDeleteResponded(route, id, err));
- }
- }
- export function *crudSaga() {
- yield fork(createListener);
- yield fork(readListener);
- yield fork(updateListener);
- yield fork(deleteListener);
- }
|