index.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { put, call, takeLeading } from 'redux-saga/effects'
  2. import {
  3. actionAddLike,
  4. actionDeleteLike,
  5. actionFindLikes,
  6. } from '../../../actions/query/likeQuery'
  7. import {
  8. actionChangeLikeType,
  9. actionAddLikePostFeedType,
  10. } from '../../../actions/types/likeTypes'
  11. import { promiseWorker } from '../promise'
  12. function* changeLikeWorker({ likeId, postId }) {
  13. const changeOneLike = () =>
  14. likeId ? actionDeleteLike(likeId, postId) : actionAddLike(postId)
  15. yield call(promiseWorker, changeOneLike())
  16. return yield call(promiseWorker, actionFindLikes(postId))
  17. }
  18. function* changeLikePostWorker({ likeId, postId }) {
  19. const { likes } = yield call(changeLikeWorker, { likeId, postId })
  20. if (likes) {
  21. yield put(actionChangeLikeType(likes))
  22. }
  23. }
  24. function* changeLikePostFeedWorker({ likeId, postId }) {
  25. const { likes } = yield call(changeLikeWorker, { likeId, postId })
  26. if (likes) {
  27. yield put(actionAddLikePostFeedType(likes))
  28. }
  29. }
  30. export function* changeLikePostWatcher() {
  31. yield takeLeading('CHANGE_LIKE_POST', changeLikePostWorker)
  32. }
  33. export function* changeLikePostFeedWatcher() {
  34. yield takeLeading('CHANGE_LIKE_POST_FEED', changeLikePostFeedWorker)
  35. }