categoryBActions.js 5.59 KB
'use strict';

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

    GET_CATEGORY_B_LIST_REQUEST,
    GET_CATEGORY_B_LIST_SUCCESS,
    GET_CATEGORY_B_LIST_FAILURE,

    GET_CATEGORY_B_SUBDETAIL_REQUEST,
    GET_CATEGORY_B_SUBDETAIL_SUCCESS,
    GET_CATEGORY_B_SUBDETAIL_FAILURE,

	SET_CURRENT_CATEGORY_B,
	SET_CURRENT_CHANNEL_B,

	SET_CURRENT_CATEGORY_B_SUBDETAIL_FROM_CACHE,

	JUMP_TO_CATEGORY,

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

export function getCategoryBList(channel_id) {
	return (dispatch, getState) => {
		let {app, classify} = getState();

		dispatch(getCategoryBListRequest());

		return new CategoryBService(app.host).getCategoryBList()
        .then(json => {
			dispatch(getCategoryBListSuccess(json));

			dispatch(getCategoryBFirstSubCategoryDetail(channel_id));
		})
		.catch(error => {
			dispatch(getCategoryBListFailure());
		});
	};
}


/**
 * 获取子分类的数据,逻辑上先判断缓存数据是否存在,不存在则从网络获取
 **/
export function getCategoryBSubCategoryDetail(category_id, category_value){

	return (dispatch, getState) => {

		let {categoryB} = getState();

		let currentChannelId = categoryB.currentChannelId;

		//检查缓存是否存在数据,如果不存在则获取
        let cache = categoryB.cacheSubCateData;
        let key = getSubDetailCacheKey(currentChannelId, category_id);
        let categoryData = cache.get(key);

        //设置当前的类别信息
        dispatch(setCurrentCateB(category_id, category_value));

		//未命中,访问网络数据
        if (!categoryData) {
            // console.log("chenlin", "未命中缓存,调用接口访问数据:" + key);
            dispatch(getCategoryBSubDetail(currentChannelId, category_id, category_value));
        }
        //已命中,展示缓存数据
        else{
            // console.log("chenlin", "命中缓存:" + JSON.stringify(categoryData));
            dispatch(getCategoryBSubDetailData(categoryData));
        }

	};
}

/**
 *	获取子分类
 **/
function getSubDetailCacheKey(channel_id, category_id){
	let key = "CHA_" + channel_id + "_CAT_" + category_id;
	return key;
}


/**
 * 网络获取子分类的数据
 **/
export function getCategoryBSubDetail(channel_id, category_id, category_value) {
	return (dispatch, getState) => {
		let {app} = getState();

		dispatch(getCategoryBSubDetailRequest());

		return new CategoryBService(app.host).getCategoryBSubDetail(channel_id, category_id)
        .then(json => {
        	let payload = parseCategoryBSubDetail(channel_id, category_id, json);
			dispatch(getCategoryBSubDetailSuccess(payload));
		})
		.catch(error => {
			dispatch(getCategoryBSubDetailFailure());
		});
	};
}

/**
 *获取指定channel的第一个分类数据
 **/
export function getCategoryBFirstSubCategoryDetail(channel_id) {

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

		let categoryList = categoryB.categoryList;

		let category = null;
		if(channel_id == '1'){
			category = categoryList.get('boy').get(0);
		}
		else if(channel_id == '2'){
			category = categoryList.get('girl').get(0);
		}
		else if(channel_id == '3'){
			category = categoryList.get('kids').get(0);
		}
		else if(channel_id == '4'){
			category = categoryList.get('lifestyle').get(0);
		}
		dispatch(getCategoryBSubCategoryDetail(category.get('category_id'), category.get('category_name')));
	};
}


/**
 *在尾部添加一个MORE
 **/
function parseCategoryBSubDetail(channel_id, category_id, data) {
	if(!data){
		return;
	}

	if(data.sortInfo){
		let more = {
            category_name: 'more',
            parent_id: category_id,
            relation_parameter:{},
            data_type:'text',
        };
		data.sortInfo.push(more);
	}

	let key = getSubDetailCacheKey(channel_id, category_id);
	// let newData = {
	// 	bannerInfo: data.bannerInfo,
	// 	sortInfo: data.sortInfo,
	// 	brandInfo: data.brandInfo,		
	// }

	// console.log("chenlin", "parseCategoryBSubDetail处理后的JSON数据:" + JSON.stringify(data));


	return {key: key, data: data};

}


export function getCategoryBListRequest() {
    return {
        type: GET_CATEGORY_B_LIST_REQUEST,
    };
}

export function getCategoryBListSuccess(json) {
    return {
        type: GET_CATEGORY_B_LIST_SUCCESS,
        payload: json
    }
}

export function getCategoryBListFailure(error) {
    return {
        type: GET_CATEGORY_B_LIST_FAILURE,
        payload: error
    }
}

export function getCategoryBSubDetailRequest() {
    return {
        type: GET_CATEGORY_B_SUBDETAIL_REQUEST,
    };
}

export function getCategoryBSubDetailSuccess(json) {
    return {
        type: GET_CATEGORY_B_SUBDETAIL_SUCCESS,
        payload: json
    }
}

export function getCategoryBSubDetailFailure(error) {
    return {
        type: GET_CATEGORY_B_SUBDETAIL_FAILURE,
        payload: error
    }
}


export function setCurrentCateB(categoryId, categoryValue){
	return {
        type: SET_CURRENT_CATEGORY_B,
        payload: {id: categoryId, value : categoryValue}
    }
}

export function setCurrentChannelB(channelId, channelValue){
	return {
        type: SET_CURRENT_CHANNEL_B,
        payload: {id: channelId, value : channelValue}
    }
}

export function getCategoryBSubDetailData(categoryData) {
	return {
        type: SET_CURRENT_CATEGORY_B_SUBDETAIL_FROM_CACHE,
        payload: categoryData
    }
}


export function jumpToCategory(value, index, channelId){
	ReactNative.NativeModules.YH_CommonHelper.jumpToCategory(value, parseInt(index), parseInt(channelId));
	return {
        type: JUMP_TO_CATEGORY,
        payload: value
    }
}