birthActions.js 4.3 KB
'use strict';

import ReactNative from 'react-native';
import BirthService from '../../services/birthService';
import Immutable, {Map} from 'immutable';
const {

    SET_SHOW_ALERT_STATUS,
    SET_BIRTH_COUPON_NOT_SUPPORT,

    GET_BIRTH_PRODUCT_REQUEST,
    GET_BIRTH_PRODUCT_SUCCESS,
    GET_BIRTH_PRODUCT_FAILURE,

} = require('../../constants/actionTypes').default;

import parseUtils from '../../utils/parseUtils';



export function getCoupon(){

    return (dispatch, getState) => {
        let {app, birth} = getState();

        let validateGetBirthCoupon = (uid) => {

            return new BirthService(app.host).validateGetBirthCoupon(uid)
            .then(json => {

                let is_support = json.is_support;
                //支持领券则跳转至我的生日券页面
                if(is_support == "Y" || is_support == "y"){
                    let url = `http://m.yohobuy.com?openby:yohobuy={"action":"go.birthCoupons","params":{}}`;
                    ReactNative.NativeModules.YH_CommonHelper.jumpWithUrl(url);
                }
                else{
                    //弹出不支持原因
                    dispatch(setBirthCouponNotSupport(json));
                }
            })
            .catch(error => {
            });
        };

        ReactNative.NativeModules.YH_CommonHelper.uid()
        .then(uid => {
            validateGetBirthCoupon(uid);
        })
        .catch(error => {
            ReactNative.NativeModules.YH_CommonHelper.login()
            .then(uid => {
                validateGetBirthCoupon(uid);
            })
            .catch(error => {
            });
        });

    };
}

export function setBirthCouponNotSupport(json) {
    return {
        type: SET_BIRTH_COUPON_NOT_SUPPORT,
        payload: json
    }
}

export function setShowAlertStatus(isShow) {
    return {
        type: SET_SHOW_ALERT_STATUS,
        payload: isShow
    }
}


export function getBirthProductList() {
	return (dispatch, getState) => {
		let {app, birth} = getState();

        if (birth.get('isFetching') || birth.get('endReached')) {
            return;
        }

        let channel = app.channel;
        let page = birth.get('currentPage') + 1;

		dispatch(getBirthProductRequest());

		return new BirthService(app.host).getBirthProductList(channel, page)
        .then(json => {

            //生成Rec_ID
            let rec_id = parseUtils.getRecId();
            let payload = parseUtils.parsePageInfoList(json, rec_id);

            //获取的产品列表进行曝光上传大数据
            dispatch(dataExposure(payload, rec_id));

            if (payload.currentPage > 1) {
                let oldList = birth.get('list').toJS();
                let newList = [...oldList, ...payload.list];
                payload.list = newList;
            }

            //商品列表是否到末页
            payload.endReached = (payload.list.length == 0) || (payload.currentPage == payload.pageCount);

			dispatch(getBirthProductSuccess(payload));
		})
		.catch(error => {
			dispatch(getBirthProductFailure());
		});
	};
}


export function getBirthProductRequest() {
    return {
        type: GET_BIRTH_PRODUCT_REQUEST,
    };
}

export function getBirthProductSuccess(json) {
    return {
        type: GET_BIRTH_PRODUCT_SUCCESS,
        payload: json
    }
}

export function getBirthProductFailure(error) {
    return {
        type: GET_BIRTH_PRODUCT_FAILURE,
        payload: error
    }
}

function dataExposure(payload, rec_id){
    return (dispatch, getState) => {

        try {
            let productIds = "";
            let productCount = 0;

            //product list数据
            let productList = payload.list;
            if(productList && productList.length > 0){

                productCount = productList.length;
                productList.map((item, i) => {
                    if(i > 0)
                        productIds = productIds + "," + item.product_id;
                    else
                        productIds = item.product_id;
                });
            }

            let params = {
                TYPE_ID: 8,
                TOTAL: productCount,
                PRD_LIST: productIds,
                REC_ID: rec_id,
            };

            ReactNative.NativeModules.YH_CommonHelper.logEvent('YB_GOODS_LIST', params);
        }
        catch(error) {
        }
    };
}