import { all, fork, put, call, takeLatest, takeEvery, } from 'redux-saga/effects'; import { ApiService } from '../../shared/api-service'; import * as actionTypes from './types'; export const addHomework = (homework) => ({ type: actionTypes.ADD_HOMEWORK, payload: { homework, }, }); export const getHomework = (id) => ({ type: actionTypes.GET_HOMEWORK, payload: { id, }, }); export const updateHomework = (id) => ({ type: actionTypes.UPDATE_HOMEWORK, payload: { id, }, }); function* addHomeworkWorker(data) { try { yield put({ type: actionTypes.ADDING_HOMEWORK_STARTED }); const homework = yield call( ApiService.create, '/homeworks', data.payload.homework ); yield put({ type: actionTypes.ADDING_HOMEWORK_SUCCESS, payload: { homework }, }); yield put({ type: actionTypes.CLEAR_LOADED }); } catch (error) { yield put({ type: actionTypes.ADDING_HOMEWORK_FAILED, payload: { error }, }); yield put({ type: actionTypes.CLEAR_ERROR }); } } function* getHomeworkWorker(data) { try { yield put({ type: actionTypes.LOADING_HOMEWORK_STARTED }); const homework = yield call( ApiService.load, `/homeworks/${data.payload.id}` ); yield put({ type: actionTypes.LOADING_HOMEWORK_SUCCESS, payload: { homework }, }); } catch (error) { yield put({ type: actionTypes.LOADING_HOMEWORK_FAILED, payload: { error }, }); } } function* updateHomeworkWorker(data) { try { yield put({ type: actionTypes.UPDATING_HOMEWORK_STARTED }); const homework = yield call( ApiService.update, `/homeworks/${data.payload.id}` ); yield put({ type: actionTypes.UPDATING_HOMEWORK_SUCCESS, payload: { homework }, }); } catch (error) { yield put({ type: actionTypes.UPDATING_HOMEWORK_FAILED, payload: { error }, }); } } function* getHomeworkWatcher() { yield takeLatest(actionTypes.GET_HOMEWORK, getHomeworkWorker); } function* addHomeworkWatcher() { yield takeEvery(actionTypes.ADD_HOMEWORK, addHomeworkWorker); } function* updateHomeworkWatcher() { yield takeEvery(actionTypes.UPDATE_HOMEWORK, updateHomeworkWorker); } export function* homeworkWatcher() { yield all([ fork(getHomeworkWatcher), fork(addHomeworkWatcher), fork(updateHomeworkWatcher), ]); }