promiseReducer.js 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { put, takeEvery, takeLatest } from "redux-saga/effects";
  2. import { aboutMeWorker } from "../actions/actionAboutMe";
  3. import { catByIdFullWorker } from "../actions/actionCatByIdFull";
  4. import { categoriesPageWorker } from "../actions/actionCategoriesPage";
  5. import { categoriesSearchPageWorker } from "../actions/actionCategoriesSearchPage";
  6. import { categoryGoodsWorker } from "../actions/actionCategoryGoods";
  7. import { categoryPageWorker } from "../actions/actionCategoryPage";
  8. import { categoryUpdateWorker } from "../actions/actionCategoryUpdate";
  9. import { goodPageWorker } from "../actions/actionGoodPage";
  10. import { goodsFindWorker } from "../actions/actionGoodsFind";
  11. import { goodsPageWorker } from "../actions/actionGoodsPage";
  12. import { goodsSearchPageWorker } from "../actions/actionGoodsSearchPage";
  13. import { goodUpdateWorker } from "../actions/actionGoodUpdate";
  14. import { orderPageWorker } from "../actions/actionOrderPage";
  15. import { ordersPageWorker } from "../actions/actionOrdersPage";
  16. import { ordersSearchPageWorker } from "../actions/actionOrdersSearchPage";
  17. import { orderUpdateWorker } from "../actions/actionOrderUpdate";
  18. import { pageStartWorker } from "../actions/actionPageStart";
  19. import { promisesClearWorker } from "../actions/actionPromisesClear";
  20. import { updateAvatarWorker } from "../actions/actionUpdateAvatar";
  21. import { uploadFilesWorker } from "../actions/actionUploadFiles";
  22. import { userPageWorker } from "../actions/actionUserPage";
  23. import { usersPageWorker } from "../actions/actionUsersPage";
  24. import { usersSearchPageWorker } from "../actions/actionUsersSearchPage";
  25. import { userUpdateWorker } from "../actions/actionUserUpdate";
  26. export function promiseReducer(state = {}, { type, name, status, payload, error }) {
  27. if (type === "PROMISE") {
  28. return {
  29. ...state,
  30. [name]: { status, payload: status === "PROMISE" ? [name].payload : payload, error },
  31. };
  32. }
  33. if (type === "PROMISE_CLEAR") {
  34. const { [name]: toRemove, ...newState } = state;
  35. return newState;
  36. }
  37. return state;
  38. }
  39. export const actionPending = (name) => ({ type: "PROMISE", name, status: "PENDING" });
  40. export const actionFulfilled = (name, payload) => ({ type: "PROMISE", name, status: "FULFILLED", payload });
  41. export const actionRejected = (name, error) => ({ type: "PROMISE", name, status: "REJECTED", error });
  42. export const actionPromiseClear = (name) => ({ type: "PROMISE_CLEAR", name });
  43. export const actionPromise = (name, promise) => ({ type: "PROMISE_START", name, promise });
  44. export function* promiseWorker(action) {
  45. const { name, promise } = action;
  46. yield put(actionPending(name));
  47. try {
  48. let data = yield promise;
  49. yield put(actionFulfilled(name, data));
  50. return data;
  51. } catch (error) {
  52. yield put(actionRejected(name, error));
  53. }
  54. }
  55. export function* promiseWatcher() {
  56. yield takeEvery("PROMISE_START", promiseWorker);
  57. yield takeLatest("PAGE_START", pageStartWorker);
  58. yield takeLatest("ABOUT_ME", aboutMeWorker);
  59. yield takeLatest("CAT_BY_ID_FULL", catByIdFullWorker);
  60. yield takeLatest("CATEGORY_GOODS", categoryGoodsWorker);
  61. yield takeLatest("ORDER_UPDATE", orderUpdateWorker);
  62. yield takeLatest("GOODS_FIND", goodsFindWorker);
  63. yield takeLatest("GOOD_PAGE", goodPageWorker);
  64. yield takeLatest("GOODS_SEARCH_PAGE", goodsSearchPageWorker);
  65. yield takeLatest("CATEGORIES_PAGE", categoriesPageWorker);
  66. yield takeLatest("GOODS_PAGE", goodsPageWorker);
  67. yield takeLatest("CATEGORY_PAGE", categoryPageWorker);
  68. yield takeLatest("CATEGORY_UPDATE", categoryUpdateWorker);
  69. yield takeLatest("GOOD_UPDATE", goodUpdateWorker);
  70. yield takeLatest("ORDER_PAGE", orderPageWorker);
  71. yield takeLatest("ORDERS_PAGE", ordersPageWorker);
  72. yield takeLatest("ORDERS_SEARCH_PAGE", ordersSearchPageWorker);
  73. yield takeLatest("UPDATE_AVATAR", updateAvatarWorker);
  74. yield takeLatest("UPLOAD_FILES", uploadFilesWorker);
  75. yield takeLatest("USER_PAGE", userPageWorker);
  76. yield takeLatest("USERS_PAGE", usersPageWorker);
  77. yield takeLatest("USERS_SEARCH_PAGE", usersSearchPageWorker);
  78. yield takeLatest("USER_UPDATE", userUpdateWorker);
  79. yield takeEvery("PROMISES_CLEAR", promisesClearWorker);
  80. yield takeLatest("CATEGORIES_SEARCH_PAGE", categoriesSearchPageWorker);
  81. }