Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import {takeEvery, put, select, call} from 'redux-saga/effects';
- import {
- requestAddToCart,
- setCart,
- setCartError,
- requestCreateCart,
- requestRemoveToCart,
- requestSetGift,
- decriceProductQuantity,
- requestUpdateCart,
- requestAddCouponToProduct,
- requestAddAddressToCart,
- requestAddCardToCart,
- requestResetCart,
- requestCreateCartSuccess,
- successAddAddressToCart,
- successAddCardToCart
- } from './actions';
- import {getCart} from './selectors';
- import {getCustomerEmail} from '../customerProfile/selectors';
- import {alertShow, updateSelectedShippingCompany} from '../../utils/helpers';
- import {checkIncludes} from '../../utils/helpers';
- import * as network from '../../API/APIFunctions';
- import * as path from '../../API/APIConstants';
- import NavigationService from '../../utils/navigation/NavigationService';
- export function* addToCart({payload}) {
- const id_product = payload.id_product;
- const id_person = payload.id_person;
- try {
- const cart = yield select(getCart);
- if (!checkIncludes(cart, payload.id_product, payload.id_person)) {
- cart.push({
- ...payload,
- count: 1,
- coupon: '',
- isGift: false,
- carrier: payload.carrier.filter((c) => +c.active).map((item) => ({...item, selected: false}))
- });
- } else {
- cart.map(item =>
- {if (item.id_person === id_person && item.id_product === id_product) {item.count = ++item.count; }});
- }
- yield put(setCart(cart));
- } catch (error) {
- yield put(setCartError(error.message));
- alertShow(error);
- }
- }
- function* removeFromCartFlow({payload}) {
- const id_product = payload.id_product;
- try {
- const cart = yield select(getCart);
- const newCart = cart.filter(item => item.id_product !== id_product);
- yield put(setCart(newCart));
- } catch (error) {
- alertShow(error);
- yield put(setCartError(error.message));
- }
- }
- function* setGiftFlow({payload}) {
- const id_product = payload.id_product;
- const id_person = payload.id_person;
- try {
- const cart = yield select(getCart);
- cart.map(item =>
- (item.id_product === id_product && item.id_person === id_person) && ({...item, isGift: !item.isGift}));
- yield put(setCart(cart));
- } catch (error) {
- yield put(setCartError(error.message));
- }
- }
- export function* updateCartProductQuantity({payload}) {
- const id_product = payload.id_product;
- const id_person = payload.id_person;
- try {
- let cart = yield select(getCart);
- if (checkIncludes(cart, payload.id_product, payload.id_person)) {
- cart = cart.map((item) => {
- if (item.id_person === id_person && item.id_product === id_product && +item.count > 1) {
- return {
- ...item,
- count: --item.count
- };
- }
- return item;
- });
- }
- yield put(setCart(cart));
- } catch (error) {
- yield put(setCartError(error.message));
- alertShow(error);
- }
- }
- function* addProductCoupon({payload}) {
- const id_product = payload.id_product;
- const id_person = payload.id_person;
- try {
- let cart = yield select(getCart);
- cart = cart.map(item => {
- if (item.id_product === id_product && item.id_person === id_person) {
- return {
- ...item,
- coupon: payload.coupon
- };
- }
- return item;
- });
- yield put(setCart(cart));
- } catch (error) {
- yield put(setCartError(error.message));
- }
- }
- function* updateCart({payload}) {
- try {
- const cart = yield select(getCart);
- const newCart = yield updateSelectedShippingCompany(cart, payload.productId, payload.item, payload.seller);
- yield put(setCart(newCart));
- } catch (error) {
- alertShow('Something went wrong.\nPlease try again later.');
- yield put(setCartError(error.message));
- }
- }
- export function* createACart({payload}) {
- const body = JSON.stringify(payload);
- try {
- const resp = yield call(network.apiPost, path.API_URL + path.CREATE_CART, body);
- if (resp.status === 200) {
- yield put(requestCreateCartSuccess());
- NavigationService.navigate('BuyBillingView');
- } else {
- yield put(setCartError(''));
- alertShow('Something went wrong.\nPlease try again later.');
- }
- } catch (e) {
- console.error('Error', e);
- }
- }
- export function* addAddressToCart({payload}) {
- const body = JSON.stringify(payload);
- try {
- const resp = yield call(network.apiPost, path.API_URL + path.CERT_ADD_ADDRESS, body);
- if (resp.status === 200) {
- yield put(successAddAddressToCart());
- NavigationService.navigate('CardDetails');
- } else {
- yield put(setCartError(''));
- alertShow('Something went wrong.\nPlease try again later.');
- }
- } catch (e) {
- console.error('Error', e);
- }
- }
- export function* addCardToCart({payload}) {
- const body = JSON.stringify(payload);
- try {
- const userEmail = yield select(getCustomerEmail);
- const resp = yield call(network.apiPostToken, path.CART_ADD_CARD, body);
- if (resp.status === 200) {
- yield put(successAddCardToCart());
- const object = yield resp.json();
- if (object.resultCode === 'Authorised') {
- yield put(requestResetCart());
- NavigationService.navigate('ThankYou', {email: userEmail});
- } else {
- alertShow(object.refusalReason);
- }
- } else {
- yield put(setCartError(''));
- alertShow('Something went wrong.\nPlease try again later.');
- }
- } catch (e) {
- console.error('Error', e);
- }
- }
- export default function* () {
- yield takeEvery(requestAddToCart, addToCart);
- yield takeEvery(requestUpdateCart, updateCart);
- yield takeEvery(requestRemoveToCart, removeFromCartFlow);
- yield takeEvery(requestSetGift, setGiftFlow);
- yield takeEvery(decriceProductQuantity, updateCartProductQuantity);
- yield takeEvery(requestAddCouponToProduct, addProductCoupon);
- yield takeEvery(requestCreateCart, createACart);
- yield takeEvery(requestAddAddressToCart, addAddressToCart);
- yield takeEvery(requestAddCardToCart, addCardToCart);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement