feedReducer.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import { actionCatAll } from "../actions/actionCatAll";
  2. import { actionGoodsFind } from "../actions/actionGoodsFind";
  3. import { actionCatsFind } from "../actions/actionCatsFind";
  4. import { actionGoodsAll } from "../actions/actionGoodsAll";
  5. import { actionOrdersAll } from "../actions/actionOrdersAll";
  6. import { actionOrdersFind } from "../actions/actionOrdersFind";
  7. import { actionCategoryGoods } from "../actions/actionCategoryGoods";
  8. import { actionUsersFind } from "../actions/actionUsersFind";
  9. import { actionUsersAll } from "../actions/actionUsersAll";
  10. import { delay, put, takeLeading } from "redux-saga/effects";
  11. function feedReducer(state = { payload: [] }, { type, payload = [] }) {
  12. if (type === "FEED_ADD") {
  13. return {
  14. ...state,
  15. payload: [...new Map([...state["payload"], ...payload].map((item) => [item["_id"], item])).values()],
  16. };
  17. }
  18. if (type === "FEED_CLEAR") {
  19. return { payload: [] };
  20. }
  21. return state || { payload: [] };
  22. }
  23. const actionFeedAdd = (payload) => ({ type: "FEED_ADD", payload });
  24. const actionFeedClear = () => ({ type: "FEED_CLEAR" });
  25. const actionFeedGoods = ({ skip = 0, orderBy = "_id" }) => ({ type: "FEED_GOODS", payload: { skip, orderBy } });
  26. function* feedGoodsWorker(action) {
  27. const { skip = 0, orderBy = "_id" } = action.payload || {};
  28. yield put(actionGoodsAll({ skip, limit: 10, promiseName: "feedGoodsAll", orderBy }));
  29. yield delay(500);
  30. }
  31. const actionFeedCategoryGoods = ({ skip = 0, orderBy = "_id", category }) => ({
  32. type: "FEED_CATEGORY_GOODS",
  33. payload: { skip, orderBy, category },
  34. });
  35. function* feedCategoryGoodsWorker(action) {
  36. const { skip = 0, orderBy = "_id", category = {} } = action.payload || {};
  37. yield put(actionCategoryGoods({ skip, limit: 8, promiseName: "feedCategoryGoods", orderBy, category }));
  38. yield delay(500);
  39. }
  40. const actionFeedGoodsFind = ({ skip = 0, text = "", orderBy = "_id" }) => ({ type: "FEED_GOODS_FIND", payload: { skip, text, orderBy } });
  41. function* feedGoodsFindWorker(action) {
  42. const { skip = 0, text = "", orderBy = "_id" } = action.payload || {};
  43. yield put(actionGoodsFind({ skip, limit: 10, promiseName: "feedGoodsFind", text, orderBy }));
  44. yield delay(500);
  45. }
  46. const actionFeedCatsFind = ({ skip = 0, text = "", orderBy = "_id" }) => ({ type: "FEED_CATS_FIND", payload: { skip, text, orderBy } });
  47. function* feedCatsFindWorker(action) {
  48. const { skip = 0, text = "", orderBy = "_id" } = action.payload || {};
  49. yield put(actionCatsFind({ skip, promiseName: "feedCatsFind", text, limit: 10, orderBy }));
  50. yield delay(500);
  51. }
  52. const actionFeedCats = ({ skip = 0, orderBy = "_id" }) => ({ type: "FEED_CATS", payload: { skip, orderBy } });
  53. function* feedCatsWorker(action) {
  54. const { skip = 0, orderBy = "_id" } = action.payload || {};
  55. yield put(actionCatAll({ promiseName: "feedCatAll", skip, limit: 10, orderBy }));
  56. yield delay(500);
  57. }
  58. const actionFeedOrders = ({ skip = 0, orderBy = "_id", status = 0 }) => ({ type: "FEED_ORDERS", payload: { skip, orderBy, status } });
  59. function* feedOrdersWorker(action) {
  60. const { skip = 0, orderBy = "_id", status = 0 } = action.payload || {};
  61. yield put(actionOrdersAll({ skip, limit: 10, promiseName: "feedOrdersAll", orderBy, status }));
  62. yield delay(500);
  63. }
  64. const actionFeedOrdersFind = ({ skip = 0, text = "", orderBy = "_id", status = "0" }) => ({
  65. type: "FEED_ORDERS_FIND",
  66. payload: { skip, text, orderBy, status },
  67. });
  68. function* feedOrdersFindWorker(action) {
  69. const { skip = 0, text = "", orderBy = "_id", status = "0" } = action.payload || {};
  70. yield put(actionOrdersFind({ skip, limit: 10, promiseName: "feedOrdersFind", text, orderBy, status }));
  71. yield delay(500);
  72. }
  73. const actionFeedUsersFind = ({ skip = 0, text = "", orderBy = "_id" }) => ({ type: "FEED_USERS_FIND", payload: { skip, text, orderBy } });
  74. function* feedUsersFindWorker(action) {
  75. const { skip = 0, text = "", orderBy = "_id" } = action.payload || {};
  76. yield put(actionUsersFind({ skip, promiseName: "feedUsersFind", text, limit: 10, orderBy }));
  77. yield delay(500);
  78. }
  79. const actionFeedUsers = ({ skip = 0, orderBy = "_id" }) => ({ type: "FEED_USERS", payload: { skip, orderBy } });
  80. function* feedUsersWorker(action) {
  81. const { skip = 0, orderBy = "_id" } = action.payload || {};
  82. yield put(actionUsersAll({ promiseName: "feedUsersAll", skip, limit: 10, orderBy }));
  83. yield delay(500);
  84. }
  85. export function* feedWatcher() {
  86. yield takeLeading("FEED_GOODS", feedGoodsWorker);
  87. yield takeLeading("FEED_CATEGORY_GOODS", feedCategoryGoodsWorker);
  88. yield takeLeading("FEED_GOODS_FIND", feedGoodsFindWorker);
  89. yield takeLeading("FEED_CATS_FIND", feedCatsFindWorker);
  90. yield takeLeading("FEED_CATS", feedCatsWorker);
  91. yield takeLeading("FEED_ORDERS", feedOrdersWorker);
  92. yield takeLeading("FEED_ORDERS_FIND", feedOrdersFindWorker);
  93. yield takeLeading("FEED_USERS_FIND", feedUsersFindWorker);
  94. yield takeLeading("FEED_USERS", feedUsersWorker);
  95. }
  96. export {
  97. actionFeedCats,
  98. actionFeedCatsFind,
  99. actionFeedGoods,
  100. actionFeedClear,
  101. actionFeedAdd,
  102. actionFeedGoodsFind,
  103. feedReducer,
  104. actionFeedOrders,
  105. actionFeedOrdersFind,
  106. actionFeedCategoryGoods,
  107. actionFeedUsers,
  108. actionFeedUsersFind,
  109. };