fastExpressActions.js 2.83 KB
'use strict';

import ReactNative from 'react-native';
import FastExpressService from '../../services/fastExpressService';
import Immutable, {Map} from 'immutable';
const {
	SET_TYPE,
    SET_SIMILAR_PRODUCT_INDEX,

    GET_FASTEXPRESS_INFO_REQUEST,
    GET_FASTEXPRESS_INFO_SUCCESS,
    GET_FASTEXPRESS_INFO_FAILURE,

    GET_FASTEXPRESS_PRODUCT_REQUEST,
    GET_FASTEXPRESS_PRODUCT_SUCCESS,
    GET_FASTEXPRESS_PRODUCT_FAILURE,

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

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



export function setSimilarIndex(rowID) {
    return (dispatch, getState) => {
        dispatch( {
            type: SET_SIMILAR_PRODUCT_INDEX,
            payload: {rowID},
        });
    }
}


export function getFastExpressInfo() {
    return (dispatch, getState) => {
        let {app, fastExpress} = getState();

        return new FastExpressService(app.host).getFastExpressInfo()
        .then(json => {
            dispatch(getFastExpressInfoSuccess(json));
        })
        .catch(error => {
            dispatch(getFastExpressInfoFailure());
        });
    };
}


export function getFastProductList() {
	return (dispatch, getState) => {
		let {app, fastExpress} = getState();

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

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

		dispatch(getFastProductRequest());

		return new FastExpressService(app.host).getFastExpressProduct(channel, page)
        .then(json => {
            let payload = parseUtils.parsePageInfoList(json);

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

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

			dispatch(getFastProductSuccess(payload));
		})
		.catch(error => {
			dispatch(getFastProductFailure());
		});
	};
}


export function getFastExpressInfoRequest() {
    return {
        type: GET_FASTEXPRESS_INFO_REQUEST,
    };
}

export function getFastExpressInfoSuccess(json) {
    return {
        type: GET_FASTEXPRESS_INFO_SUCCESS,
        payload: json
    }
}

export function getFastExpressInfoFailure(error) {
    return {
        type: GET_FASTEXPRESS_INFO_FAILURE,
        payload: error
    }
}


export function getFastProductRequest() {
    return {
        type: GET_FASTEXPRESS_PRODUCT_REQUEST,
    };
}

export function getFastProductSuccess(json) {
    return {
        type: GET_FASTEXPRESS_PRODUCT_SUCCESS,
        payload: json
    }
}

export function getFastProductFailure(error) {
    return {
        type: GET_FASTEXPRESS_PRODUCT_FAILURE,
        payload: error
    }
}