requestStatsActions.js 2.52 KB
'use strict';
import Request from '../../services/Request';
import RequestStatsService from '../../services/HomeService';

const {
    REQUEST_STATS_REQUEST,
    REQUEST_STATS_SUCCESS,
    REQUEST_STATS_FAILURE,
    REQUEST_STATS_CLEAN,
    CHOOSE_REQUEST_START_DATE,
    CHOOSE_REQUEST_END_DATE,
    SHOW_REQUEST_DATEPICKER_IOS,
    SELECT_REQUEST_DATE_IOS,
} = require('../../constants/actionTypes').default;

export function chooseStartDate(startDay) {
    return {
        type: CHOOSE_REQUEST_START_DATE,
        payload: startDay,
    }
}

export function chooseEndDate(endDay) {
    return {
        type: CHOOSE_REQUEST_END_DATE,
        payload: endDay,
    }
}

export function newDatePicked(pickedDate, isStartDate) {
    return (dispatch, getState) => {
        if(isStartDate) {
            dispatch(chooseStartDate(pickedDate));
        } else {
            dispatch(chooseEndDate(pickedDate));
        }
        const {requestStats, home} = getState();
        let params = {
            page: requestStats.currentPage + 1,
            size: 20,
            beginTime: requestStats.startDay,
            endTime: requestStats.endDay,
            shopId: home.shopId,
        }
        dispatch(requestData(params));
    };
}

export function showDatePickerIOS(isShowDatePickerIOS, isStartDate) {
    return {
        type: SHOW_REQUEST_DATEPICKER_IOS,
        isShowDatePickerIOS: isShowDatePickerIOS,
        isStartDate: isStartDate,
    }
}

export function selectedDateIOS(selectedDate, isStartDate) {
    return {
        type: SELECT_REQUEST_DATE_IOS,
        selectedDate: selectedDate,
        isStartDate: isStartDate,
    }
}


export function request() {
    return {
        type: REQUEST_STATS_REQUEST,
    }
}

export function success(json) {
    return {
        type: REQUEST_STATS_SUCCESS,
        payload: json,
    }
}

export function failure(error) {
    return {
        type: REQUEST_STATS_FAILURE,
        payload: error,
    }
}

export function requestData(params) {
    return (dispatch, getState) => {

        const {requestStats} = getState();

        if (requestStats.currentPage >= requestStats.pageCount || requestStats.isFetching) {//Last page reached....
            return;
        }

        dispatch(request());
        return new RequestStatsService()
        .requestStatsData(params)
        .then(json => {
            dispatch(success(json));
        })
        .catch(error => {
            dispatch(failure(error));
        })
    };
}

export function requestStatsClean() {
	return {
		type: REQUEST_STATS_CLEAN,
	}
}