promiseReducer.js 4.1 KB

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