feedReducer.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { addAnswers } from "../../actions/types/commentTypes"
  2. export const feedReducer = (
  3. state = {},
  4. {
  5. type,
  6. newPosts = [],
  7. postId,
  8. postsFeed,
  9. postsFeedCount,
  10. newPostsFeedCount,
  11. newResult,
  12. commentId
  13. },
  14. ) => {
  15. const types = {
  16. 'ADD-POSTS': () => {
  17. return {
  18. ...state,
  19. postsFeed: state?.postsFeed
  20. ? [...state.postsFeed, ...newPosts]
  21. : [...newPosts],
  22. postsFeedCount: postsFeedCount ? postsFeedCount : newPostsFeedCount,
  23. }
  24. },
  25. 'COUNT': () => {
  26. return {
  27. ...state,
  28. postsFeedCount: postsFeedCount,
  29. }
  30. },
  31. 'POSTS': () => {
  32. return {
  33. ...state,
  34. postsFeed: postsFeed,
  35. }
  36. },
  37. 'CLEAR_POSTS': () => ({
  38. postsFeed: [],
  39. postsFeedCount: 0,
  40. }),
  41. 'LIKE_POST_FEED': () => ({
  42. ...state,
  43. postsFeed: postsFeed?.map((p) =>
  44. p._id === postId ? (p = { ...p, likes: [...newResult] }) : p,
  45. ),
  46. }),
  47. 'ADD_COMMENT_POSTS': () => ({
  48. ...state,
  49. postsFeed: postsFeed?.map((p) =>
  50. p._id === postId ? (p = { ...p, comments:
  51. [...newResult] }) : p,
  52. ),
  53. }),
  54. 'FEED-ANSWERS-COMMENT': () => ({
  55. ...state,
  56. postsFeed: ({
  57. ...state?.postsFeed?.map((p) =>
  58. p._id === postId && (p = {
  59. ...p, comments:
  60. addAnswers(state?.postsFeed?.p?.comments,
  61. commentId, newResult)
  62. })
  63. )
  64. })
  65. })
  66. }
  67. if (type in types) {
  68. return types[type]()
  69. }
  70. return state
  71. }