haggleActions.js 7.46 KB
'use strict';

import ReactNative from 'react-native';
import haggleService from '../../services/haggleService';

const Platform = require('Platform');

const {
    PRODUCT_LIST_REQUEST,
    PRODUCT_LIST_SUCCESS,
    PRODUCT_LIST_FAILURE,
    SET_SELECTED_CATEGORY,
    SHOW_HASCUT_ALERT,
    HAGGLE_STATUS_SUCCESS,
    REFRESH_PRODUCT_LIST,
    MYHAGGLE_PRODUCT_LIST_REQUEST,
    MYHAGGLE_PRODUCT_LIST_SUCCESS,
    MYHAGGLE_PRODUCT_LIST_FAILURE,
    RESOURCE_INFO_REQUEST,
    RESOURCE_INFO_SUCCESS,
    RESOURCE_INFO_FAILURE,
} = require('../../constants/actionTypes').default;

export function setSelectedCategoryType(index) {
    return {
      type: SET_SELECTED_CATEGORY,
      payload: index
    };
}

export function setSelectedCategory(index) {
    return (dispatch, getState) => {
        dispatch(setSelectedCategoryType(index));
        let {haggle} = getState();
        let productList = haggle.productList;
        let myproductList = haggle.myHaggleProductList;
        let list = productList.list ? productList.list.toArray() : [];
        let myList = myproductList.list ? myproductList.list.toArray() : [];

        if (index == 0 && list.length == 0) {
          dispatch(getHaggleProductList());
        }else if (index == 1 && myList.length == 0){
          dispatch(getMyHaggleProductList());
        }
    };
}

export function refreshProductList(index) {
    return (dispatch, getState) => {

        dispatch({
            type: REFRESH_PRODUCT_LIST,
            payload: {index}
        });

        if (index == 0) {
          dispatch(getHaggleProductList());
        }else if (index == 1){
          dispatch(getMyHaggleProductList());
        }

    };
}

export function showHasCutAlert() {
    return {
        type: SHOW_HASCUT_ALERT,
    };
}

export function productListRequest() {
    return {
        type: PRODUCT_LIST_REQUEST,
    };
}

export function productListSuccess(json) {
    return {
        type: PRODUCT_LIST_SUCCESS,
        payload: json
    };
}

export function haggleStatusSuccess(json) {
    return {
        type: HAGGLE_STATUS_SUCCESS,
        payload: json
    };
}

export function productListFailure(error) {
    return {
        type: PRODUCT_LIST_FAILURE,
        payload: error
    };
}

export function myHaggleProductListRequest() {
    return {
        type: MYHAGGLE_PRODUCT_LIST_REQUEST,
    };
}

export function myHaggleProductListSuccess(json) {
    return {
        type: MYHAGGLE_PRODUCT_LIST_SUCCESS,
        payload: json
    };
}

export function myHaggleProductListFailure(error) {
    return {
        type: MYHAGGLE_PRODUCT_LIST_FAILURE,
        payload: error
    };
}
export function getResourceRequest() {
    return {
        type: RESOURCE_INFO_REQUEST,
    };
}

export function getResourceSuccess(json) {
    return {
        type: RESOURCE_INFO_SUCCESS,
        payload: json
    };
}

export function getResourceFailure(error) {
    return {
        type: RESOURCE_INFO_FAILURE,
        payload: error
    };
}

export function getHaggleProductList() {
    return (dispatch, getState) => {
        let {app, haggle} = getState();
        let list = haggle.productList;
        /**
         * page: 0, //当前页面
         * page_size: 20, //每页显示的数量
         * total: 0, //总共多少条
         * page_total: 0, //总共多少页
         * endReached: false, //到达底部
         */

        if (list.isFetching || list.endReached || list.error || (!list.endReached && list.page_total === 1)) {
            return;
        }

        let page = list.page + 1;
        let pageSize = list.page_size;
        dispatch(productListRequest());
        return new haggleService(app.host).fetchHaggleProductList(page, pageSize)
            .then(json => {
                let payload = json;
                payload.endReached = (payload.page === payload.page_total) && (payload.page_total !== 1);
                if (payload.page > 1) {
                    let oldList = list.list.toJS();
                    let newList = [...oldList, ...payload.list];
                    payload.list = newList;
                }
                dispatch(productListSuccess(payload));
            })
            .catch(error => {
                dispatch(productListFailure(error));
            });
    };
}

export function getMyHaggleProductList() {
    return (dispatch, getState) => {
        let {app, haggle} = getState();
        let list = haggle.myHaggleProductList;

        /**
         * page: 0, //当前页面
         * page_size: 20, //每页显示的数量
         * total: 0, //总共多少条
         * page_total: 0, //总共多少页
         * endReached: false, //到达底部
         */

        if (list.isFetching || list.endReached || list.error || (!list.endReached && list.page_total === 1)) {
            return;
        }

        let page = list.page + 1;
        let pageSize = list.page_size;
        let fetchMyHaggleProductList = (uid) => {
            dispatch(myHaggleProductListRequest());
            return new haggleService(app.host).fetchMyHaggleProductList(uid, page, pageSize)
                .then(json => {
                    let payload = json;
                    payload.endReached = (payload.page === payload.page_total) && (payload.page_total !== 1);
                    if (payload.page > 1) {
                        let oldList = list.list.toJS();
                        let newList = [...oldList, ...payload.list];
                        payload.list = newList;
                    }
                    dispatch(myHaggleProductListSuccess(payload));
                })
                .catch(error => {
                    dispatch(myHaggleProductListFailure(error));
                });
        };

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

        			});
        		});

    };
}

export function getHaggleStatus(productSkn, activityId, callBack) {
    return (dispatch, getState) => {
        let {app} = getState();

        let fetchHaggleStatus = (uid) => {
            return new haggleService(app.host).fetcheProductHaggleStatus(uid, activityId, productSkn)
                .then(json => {
                  let payload = json;
                  dispatch(haggleStatusSuccess(payload));
                  callBack && typeof callBack === 'function' && callBack(payload)
                })
                .catch(error => {
                });
        };

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

              });
            });

    };
}

export function getResourceInfo(callback) {
    return (dispatch, getState) => {
        let {app} = getState();
        dispatch(getResourceRequest());
        return new haggleService(app.host).fetchResourceInfo('84c207985a995658669e019ce98171ed')
            .then(json => {
                dispatch(getResourceSuccess(json));
                callback && typeof callback === 'function' && callback(json)
            })
            .catch(error => {
                dispatch(getResourceFailure(error));
            });
    };
}