| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- import {
- attemptAddOffer,
- attemptEditOffer,
- attemptEditOfferAsAdmin,
- attemptFetchFeaturedOffers,
- attemptFetchOffers,
- attemptFetchOneOffer,
- attemptFetchProfileOffersAsAdmin,
- attemptPinOffer,
- attemptRemoveOffer,
- attemptRemoveOfferAsAdmin,
- } 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,
- addProfileOffers,
- clearSelectedOffer,
- // 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";
- import {
- KEY_NAME,
- KEY_PAGE,
- KEY_SIZE,
- KEY_SORTBY,
- } from "../../constants/queryStringConstants";
- import { selectQueryString } from "../selectors/filtersSelectors";
- import { setQueryString } from "../actions/filters/filtersActions";
-
- 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 userId = yield select(selectUserId);
- const offerData = payload.payload.offerData;
- const formData = new FormData();
- formData.append("category[name]", offerData.category.name);
- formData.append(
- "condition",
- offerData.condition === "Novo"
- ? "novo"
- : offerData.condition === "Polovno"
- ? "polovno"
- : "kao novo"
- );
- 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);
- console.log(formData);
- yield call(attemptAddOffer, userId, 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 {
- let offerId = payload.payload;
- console.log("sagabb", payload.payload);
- const queryObject = new URLSearchParams();
- if (typeof payload.payload === "object") {
- offerId = payload.payload.offerId;
- queryObject.set("view", "true");
- }
- const data = yield call(attemptFetchOneOffer, {
- offerId,
- queryObject,
- });
- if (!data?.data) throw new Error();
- yield put(clearSelectedOffer());
- 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.offers));
- yield put(setTotalOffers(data.data.total));
- 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.offers.slice(0, 2)));
- yield put(fetchMineHeaderOffersSuccess());
- } catch (e) {
- yield put(fetchMineHeaderOffersError());
- console.dir(e);
- }
- }
-
- function* fetchProfileOffers(payload) {
- try {
- console.log(payload.payload);
- let userId;
-
- if (typeof payload.payload === "object") {
- userId = payload.payload.idProfile;
- } else userId = payload.payload;
-
- if (!userId || userId?.length === 0)
- throw new Error("User id is not defined!");
-
- let queryString = new URLSearchParams();
- queryString.set(KEY_SIZE, 10);
- if (payload.payload[KEY_PAGE]) {
- queryString.set(KEY_PAGE, payload.payload.page);
- if (payload.payload.searchValue?.length > 0)
- queryString.set(KEY_NAME, payload.payload.searchValue);
- queryString.set(KEY_SORTBY, payload.payload.sortOption.queryString);
- yield put(setQueryString(queryString.toString()));
- } else {
- queryString = yield select(selectQueryString);
- }
-
- console.log(queryString.toString());
- let data;
- if (payload.payload.isAdmin) {
- data = yield call(
- attemptFetchProfileOffersAsAdmin,
- userId,
- convertQueryStringForBackend(queryString)
- );
- } else {
- data = yield call(
- attemptFetchProfileOffers,
- userId,
- convertQueryStringForBackend(queryString)
- );
- }
- if (payload.payload.append) {
- yield put(addProfileOffers(data.data.offers));
- } else {
- yield put(setProfileOffers(data.data.offers));
- }
- yield put(setTotalOffers(data.data.total));
- 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 userId = yield select(selectUserId);
- const offerId = payload.payload.offerId;
- if (payload.payload.isAdmin) yield call(attemptRemoveOfferAsAdmin, offerId);
- else yield call(attemptRemoveOffer, userId, 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 userId = yield select(selectUserId);
- 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.toLowerCase());
- 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);
- if (payload.payload.isAdmin) {
- yield call(attemptEditOfferAsAdmin, offerId, formData);
- } else {
- yield call(attemptEditOffer, userId, 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),
- ]);
- }
|