| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- import {
- attemptAddOffer,
- attemptEditOffer,
- attemptFetchFeaturedOffers,
- attemptFetchOffers,
- attemptFetchOneOffer,
- attemptPinOffer,
- attemptRemoveOffer,
- } from "../../request/offersRequest";
- import {
- // OFFERS_ALL_FETCH,
- OFFERS_FEATURED_FETCH,
- OFFERS_FETCH,
- OFFERS_MINE_HEADER_FETCH,
- OFFERS_PROFILE_FETCH,
- OFFER_ADD,
- OFFER_EDIT,
- OFFER_PIN,
- OFFER_REMOVE,
- ONE_OFFER_FETCH,
- } from "../actions/offers/offersActionConstants";
- import {
- setOffers,
- setProfileOffers,
- fetchOneOfferSuccess,
- addOfferSuccess,
- fetchMineOffersSuccess,
- fetchProfileOffersSuccess,
- removeOfferSuccess,
- editOfferSuccess,
- fetchOffersSuccess,
- fetchOffersError,
- fetchMoreOffersSuccess,
- fetchMoreOffersError,
- addOfferError,
- fetchOneOfferError,
- fetchMineOffersError,
- fetchProfileOffersError,
- removeOfferError,
- editOfferError,
- clearFeaturedOffers,
- setMineHeaderOffers,
- fetchMineHeaderOffersSuccess,
- fetchMineHeaderOffersError,
- pinOfferSuccess,
- pinOfferError,
- // fetchAllOffersSuccess,
- // fetchAllOffersError,
- // setFeaturedOfferPage,
- } from "../actions/offers/offersActions";
- import { all, takeLatest, call, put, select } from "@redux-saga/core/effects";
- import {
- attemptFetchProfileOffers,
- attemptFetchMoreOffers,
- } from "../../request/offersRequest";
- import { convertQueryStringForBackend } from "../../util/helpers/queryHelpers";
- // import { setQueryString } from "../actions/filters/filtersActions";
- import {
- OFFERS_FETCH_MORE,
- OFFERS_MINE_FETCH,
- } from "../actions/offers/offersActionConstants";
- import {
- addOffers,
- addPinnedOffers,
- clearOffers,
- setMineOffers,
- setNoMoreOffersStatus,
- setPinnedOffers,
- setTotalOffers,
- } from "../actions/offers/offersActions";
- import { selectUserId } from "../selectors/loginSelectors";
- import {
- // selectFeaturedOfferPage,
- // selectOfferPage,
- selectOffers,
- selectPinnedOffers,
- selectTotalOffers,
- } from "../selectors/offersSelectors";
- // import history from "../utils/history";
- // import { NOT_FOUND_PAGE } from "../../constants/pages";
- import { makeErrorToastMessage } from "../utils/makeToastMessage";
- import i18next from "i18next";
-
- function* fetchOffers(payload) {
- try {
- yield put(clearOffers());
- const newQueryString = new URLSearchParams(
- convertQueryStringForBackend(payload.payload.queryString)
- );
- const data = yield call(
- attemptFetchOffers,
- "?" + newQueryString.toString()
- );
- yield put(setTotalOffers(data.data.total));
- yield put(setOffers(data.data.offers.filter((offer) => !offer.pinned)));
- yield put(
- setPinnedOffers(data.data.offers.filter((offer) => offer.pinned))
- );
- yield put(fetchOffersSuccess());
- } catch (e) {
- yield put(fetchOffersError());
- yield call(console.log, e);
- }
- }
-
- function* fetchFeaturedOffers(payload) {
- try {
- yield put(clearFeaturedOffers());
- const newQueryString = new URLSearchParams(
- convertQueryStringForBackend(payload.payload.queryString)
- );
- const data = yield call(
- attemptFetchFeaturedOffers,
- "?" + newQueryString.toString()
- );
- yield put(setPinnedOffers(data.data));
- yield put(fetchOffersSuccess());
- } catch (e) {
- yield put(fetchOffersError());
- yield call(console.log, e);
- }
- }
- function* fetchMoreOffers(payload) {
- try {
- const data = yield call(
- attemptFetchMoreOffers,
- payload.payload?.page,
- payload.payload?.queryString
- );
- // if (payload.payload.queryString) {
- // yield put(setQueryString(payload.payload.queryString));
- // }
- const oldOffers = yield select(selectOffers);
- const oldPinnedOffers = yield select(selectPinnedOffers);
- const totalNumberOfOffers = yield select(selectTotalOffers);
- if (oldOffers.length + oldPinnedOffers.length < totalNumberOfOffers) {
- yield put(addOffers(data.data.items.regularOffers));
- yield put(addPinnedOffers(data.data.items.pinnedOffers));
- }
- if (
- data.data.items.pinnedOffers.length +
- data.data.items.regularOffers.length <
- 10 ||
- data.data.items.pinnedOffers.length +
- data.data.items.regularOffers.length >
- data.data.total
- ) {
- yield put(setNoMoreOffersStatus(true));
- }
- yield put(fetchMoreOffersSuccess());
- } catch (e) {
- yield put(fetchMoreOffersError());
- console.dir(e);
- }
- }
-
- function* createOffer(payload) {
- try {
- console.log(payload);
- const offerData = payload.payload.offerData;
- const formData = new FormData();
- formData.append("category[name]", offerData.category.name);
- formData.append("condition", offerData.condition);
- formData.append("description", offerData.description);
- // formData.append("file", JSON.stringify(offerData.images))
- for (var i = 0; i < offerData.images.length; i++) {
- formData.append("file", offerData.images[i]);
- }
- formData.append("location[city]", offerData.location.city);
- formData.append("name", offerData.name);
- formData.append("subcategory", offerData.subcategory);
- yield call(attemptAddOffer, formData);
- yield put(addOfferSuccess());
- if (payload.payload.handleApiResponseSuccess) {
- yield call(payload.payload.handleApiResponseSuccess);
- }
- } catch (e) {
- yield put(addOfferError());
- console.dir(e);
- }
- }
-
- function* fetchOneOffer(payload) {
- try {
- const data = yield call(attemptFetchOneOffer, payload.payload);
- yield put(fetchOneOfferSuccess(data.data));
- } catch (e) {
- console.log(e.response.status);
- // if (e.response.status === 400) {
- // yield call(history.push, NOT_FOUND_PAGE);
- // }
- yield call(makeErrorToastMessage, i18next.t("apiErrors.offerNotFound"));
- yield put(fetchOneOfferError());
- }
- }
-
- // function* createOffer(payload) {
- function* fetchMineOffers() {
- try {
- const userId = yield select(selectUserId);
- const data = yield call(attemptFetchProfileOffers, userId);
- yield put(setMineOffers(data.data));
- yield put(fetchMineOffersSuccess());
- } catch (e) {
- yield put(fetchMineOffersError());
- console.dir(e);
- }
- }
- function* fetchMineHeaderOffers() {
- try {
- const userId = yield select(selectUserId);
- const data = yield call(attemptFetchProfileOffers, userId);
- yield put(setMineHeaderOffers(data.data.slice(0, 2)));
- yield put(fetchMineHeaderOffersSuccess());
- } catch (e) {
- yield put(fetchMineHeaderOffersError());
- console.dir(e);
- }
- }
-
- function* fetchProfileOffers(payload) {
- try {
- const userId = payload.payload;
- if (!userId || userId?.length === 0)
- throw new Error("User id is not defined!");
- const data = yield call(attemptFetchProfileOffers, userId);
- yield put(setProfileOffers(data.data));
- yield put(fetchProfileOffersSuccess());
- } catch (e) {
- console.dir(e);
- // if (e.response.status === 400) {
- // yield call(history.push, NOT_FOUND_PAGE);
- // }
- yield put(fetchProfileOffersError());
- }
- }
-
- function* removeOffer(payload) {
- try {
- const offerId = payload.payload.offerId;
- yield call(attemptRemoveOffer, offerId);
- yield put(removeOfferSuccess());
- if (payload.payload.handleApiResponseSuccess) {
- yield call(payload.payload.handleApiResponseSuccess);
- }
- } catch (e) {
- yield put(removeOfferError());
- console.dir(e);
- }
- }
- function* pinOffer(payload) {
- try {
- const offerId = payload.payload.offerId;
- yield call(attemptPinOffer, offerId);
- yield put(pinOfferSuccess());
- if (payload.payload.handleApiResponseSuccess) {
- yield call(payload.payload.handleApiResponseSuccess);
- }
- } catch (e) {
- yield put(pinOfferError());
- console.dir(e);
- }
- }
-
- function* editOffer(payload) {
- try {
- const offerId = payload.payload.offerId;
- // const editedData = payload.payload.offerData;
- const offerData = payload.payload.offerData;
- const formData = new FormData();
- formData.append("category[name]", offerData.category.name);
- formData.append("condition", offerData.condition);
- formData.append("description", offerData.description);
- // const oldImages = [];
- for (var i = 0; i < offerData.images.length; i++) {
- if (offerData.images[i] !== null) {
- if (typeof offerData.images[i] === "string") {
- formData.append("images[]", offerData.images[i]);
- } else {
- formData.append("file", offerData.images[i]);
- }
- }
- }
- // if (oldImages.length > 0) {
- // formData.append("images", JSON.stringify(oldImages));
- // }
- // if (oldImages.length === offerData.images.length) {
- // formData.append("file", "");
- // }
- formData.append("location[city]", offerData.location.city);
- formData.append("name", offerData.name);
- formData.append("subcategory", offerData.subcategory);
- yield call(attemptEditOffer, offerId, formData);
- yield put(editOfferSuccess());
- if (payload.payload.handleApiResponseSuccess) {
- yield call(payload.payload.handleApiResponseSuccess);
- }
- } catch (e) {
- yield put(editOfferError());
- console.dir(e);
- }
- }
-
- export default function* offersSaga() {
- yield all([
- takeLatest(OFFERS_FETCH, fetchOffers),
- takeLatest(OFFER_ADD, createOffer),
- takeLatest(ONE_OFFER_FETCH, fetchOneOffer),
- takeLatest(OFFERS_FETCH_MORE, fetchMoreOffers),
- takeLatest(OFFERS_MINE_FETCH, fetchMineOffers),
- takeLatest(OFFERS_PROFILE_FETCH, fetchProfileOffers),
- takeLatest(OFFER_REMOVE, removeOffer),
- takeLatest(OFFER_EDIT, editOffer),
- takeLatest(OFFERS_MINE_HEADER_FETCH, fetchMineHeaderOffers),
- takeLatest(OFFERS_FEATURED_FETCH, fetchFeaturedOffers),
- takeLatest(OFFER_PIN, pinOffer)
- // takeLatest(OFFERS_ALL_FETCH, fetchAllOffers),
- ]);
- }
|