brandReducer.js 8.84 KB
'use strict';

import InitialState from './brandInitialState';
import Immutable, {Map} from 'immutable';

const {
	SET_TYPE,

	SET_BRAND_FILTER,
	SET_BRAND_SELECTED_CHANNEL,
	SET_INITIALLISTSIZE,
	GET_BRAND_LIST_FOR_BOY_REQUEST,
	GET_BRAND_LIST_FOR_BOY_SUCCESS,
	GET_BRAND_LIST_FOR_BOY_FAILURE,

	GET_BRAND_LIST_FOR_GIRL_REQUEST,
	GET_BRAND_LIST_FOR_GIRL_SUCCESS,
	GET_BRAND_LIST_FOR_GIRL_FAILURE,

	GET_BRAND_LIST_FOR_KID_REQUEST,
	GET_BRAND_LIST_FOR_KID_SUCCESS,
	GET_BRAND_LIST_FOR_KID_FAILURE,

	GET_BRAND_LIST_FOR_LIFESTYLE_REQUEST,
	GET_BRAND_LIST_FOR_LIFESTYLE_SUCCESS,
	GET_BRAND_LIST_FOR_LIFESTYLE_FAILURE,

	GET_BRAND_RESOURCE_FOR_BOY_REQUEST,
	GET_BRAND_RESOURCE_FOR_BOY_SUCCESS,
	GET_BRAND_RESOURCE_FOR_BOY_FAILURE,

	GET_BRAND_RESOURCE_FOR_GIRL_REQUEST,
	GET_BRAND_RESOURCE_FOR_GIRL_SUCCESS,
	GET_BRAND_RESOURCE_FOR_GIRL_FAILURE,

	GET_BRAND_RESOURCE_FOR_KID_REQUEST,
	GET_BRAND_RESOURCE_FOR_KID_SUCCESS,
	GET_BRAND_RESOURCE_FOR_KID_FAILURE,

	GET_BRAND_RESOURCE_FOR_LIFESTYLE_REQUEST,
	GET_BRAND_RESOURCE_FOR_LIFESTYLE_SUCCESS,
	GET_BRAND_RESOURCE_FOR_LIFESTYLE_FAILURE,

	SET_BRAND_DATA_FOR_BOY,
	SET_BRAND_DATA_FOR_GIRL,
	SET_BRAND_DATA_FOR_KID,
	SET_BRAND_DATA_FOR_LIFESTYLE,

	BRAND_SHOW_SEARCH,
	FETCH_BRAND_SEARCH_HISTORY,
    INSERT_BRAND_SEARCH_HISTORY,
    CLEAR_BRAND_SEARCH_HISTORY,
    BRAND_HOT_KEYWORD_REQUEST,
    BRAND_HOT_KEYWORD_SUCCESS,
    BRAND_HOT_KEYWORD_FAILURE,
    FILTE_BRAND_LIST,
    SET_BRAND_KEYWORD,
} = require('../../constants/actionTypes').default;

const initialState = new InitialState;

export default function brandReducer(state=initialState, action) {
    switch(action.type) {

		case SET_BRAND_FILTER: {
			return state.set('brandFliter', action.payload);

		}

		case SET_BRAND_SELECTED_CHANNEL: {
			return state.set('selectedChannelId', action.payload);
		}

		case GET_BRAND_LIST_FOR_BOY_REQUEST:
		{
			return state.set('isFetching', true);
		}
		case GET_BRAND_LIST_FOR_BOY_SUCCESS:
		{
			let {
				all_list,
				hot_list,
				new_list,
				all_list_key,
			} = action.payload;

			return state.setIn(['brandListForBoy', 'all_list'], Immutable.fromJS(all_list))
			.setIn(['brandListForBoy', 'hot_list'], Immutable.fromJS(hot_list))
			.setIn(['brandListForBoy', 'new_list'], Immutable.fromJS(new_list))
			.setIn(['brandListForBoy', 'all_list_key'], Immutable.fromJS(all_list_key))
			.setIn(['brandListForBoy', 'hasSuccess'], true)
			.set('isFetching', false);

		}
		case GET_BRAND_LIST_FOR_BOY_FAILURE:
		{
			return state.setIn(['brandListForBoy', 'hasSuccess'], false)
			.set('isFetching', false);
		}
		case GET_BRAND_LIST_FOR_GIRL_REQUEST:
		{
			return state.set('isFetching', true);
		}
		case GET_BRAND_LIST_FOR_GIRL_SUCCESS:
		{
			let {
				all_list,
				hot_list,
				new_list,
				all_list_key,
			} = action.payload;

			return state.setIn(['brandListForGirl', 'all_list'], Immutable.fromJS(all_list))
			.setIn(['brandListForGirl', 'hot_list'], Immutable.fromJS(hot_list))
			.setIn(['brandListForGirl', 'new_list'], Immutable.fromJS(new_list))
			.setIn(['brandListForGirl', 'all_list_key'], Immutable.fromJS(all_list_key))
			.setIn(['brandListForGirl', 'hasSuccess'], true)
			.set('isFetching', false);
		}
		case GET_BRAND_LIST_FOR_GIRL_FAILURE:
		{
			return state.setIn(['brandListForGirl', 'hasSuccess'], false)
			.set('isFetching', false);
		}
		case GET_BRAND_LIST_FOR_KID_REQUEST:
		{
			return state.set('isFetching', true);
		}
		case GET_BRAND_LIST_FOR_KID_SUCCESS:
		{
			let {
				all_list,
				hot_list,
				new_list,
				all_list_key,
			} = action.payload;

			return state.setIn(['brandListForKid', 'all_list'], Immutable.fromJS(all_list))
			.setIn(['brandListForKid', 'hot_list'], Immutable.fromJS(hot_list))
			.setIn(['brandListForKid', 'new_list'], Immutable.fromJS(new_list))
			.setIn(['brandListForKid', 'all_list_key'], Immutable.fromJS(all_list_key))
			.setIn(['brandListForKid', 'hasSuccess'], true)
			.set('isFetching', false);
		}
		case GET_BRAND_LIST_FOR_KID_FAILURE:
		{
			return state.setIn(['brandListForKid', 'hasSuccess'], false)
			.set('isFetching', false);
		}
		case GET_BRAND_LIST_FOR_LIFESTYLE_REQUEST:
		{
			return state.set('isFetching', true);
		}
		case GET_BRAND_LIST_FOR_LIFESTYLE_SUCCESS:
		{
			let {
				all_list,
				hot_list,
				new_list,
				all_list_key,
			} = action.payload;

			return state.setIn(['brandListForLifeStyle', 'all_list'], Immutable.fromJS(all_list))
			.setIn(['brandListForLifeStyle', 'hot_list'], Immutable.fromJS(hot_list))
			.setIn(['brandListForLifeStyle', 'new_list'], Immutable.fromJS(new_list))
			.setIn(['brandListForLifeStyle', 'all_list_key'], Immutable.fromJS(all_list_key))
			.setIn(['brandListForLifeStyle', 'hasSuccess'], true)
			.set('isFetching', false);
		}
		case GET_BRAND_LIST_FOR_LIFESTYLE_FAILURE:
		{
			return state.setIn(['brandListForLifeStyle', 'hasSuccess'], false)
			.set('isFetching', false);
		}
		case GET_BRAND_RESOURCE_FOR_BOY_REQUEST:
		{
			return state;
		}
		case GET_BRAND_RESOURCE_FOR_BOY_SUCCESS:
		{
			let {
				banner,
				custom_brands,
				brandsText,
			} = action.payload;

			return state.setIn(['reourceForBoy', 'banner'], Immutable.fromJS(banner))
			.setIn(['reourceForBoy', 'custom_brands'], Immutable.fromJS(custom_brands))
			.setIn(['reourceForBoy', 'brandsText'], Immutable.fromJS(brandsText))
			.setIn(['reourceForBoy', 'hasSuccess'], true);
		}
		case GET_BRAND_RESOURCE_FOR_BOY_FAILURE:
		{
			return state.setIn(['reourceForBoy', 'hasSuccess'], false);
		}

		case GET_BRAND_RESOURCE_FOR_GIRL_REQUEST:
		{
			return state;
		}
		case GET_BRAND_RESOURCE_FOR_GIRL_SUCCESS:
		{
			let {
				banner,
				custom_brands,
				brandsText,
			} = action.payload;

			return state.setIn(['reourceForGirl', 'banner'], Immutable.fromJS(banner))
			.setIn(['reourceForGirl', 'custom_brands'], Immutable.fromJS(custom_brands))
			.setIn(['reourceForGirl', 'brandsText'], Immutable.fromJS(brandsText))
			.setIn(['reourceForGirl', 'hasSuccess'], true);
		}
		case GET_BRAND_RESOURCE_FOR_GIRL_FAILURE:
		{
			return state.setIn(['reourceForGirl', 'hasSuccess'], false);
		}

		case GET_BRAND_RESOURCE_FOR_KID_REQUEST:
		{
			return state;
		}
		case GET_BRAND_RESOURCE_FOR_KID_SUCCESS:
		{
			let {
				banner,
				custom_brands,
				brandsText,
			} = action.payload;

			return state.setIn(['reourceForKid', 'banner'], Immutable.fromJS(banner))
			.setIn(['reourceForKid', 'custom_brands'], Immutable.fromJS(custom_brands))
			.setIn(['reourceForKid', 'brandsText'], Immutable.fromJS(brandsText))
			.setIn(['reourceForKid', 'hasSuccess'], true);
		}
		case GET_BRAND_RESOURCE_FOR_KID_FAILURE:
		{
			return state.setIn(['reourceForKid', 'hasSuccess'], false);
		}

		case GET_BRAND_RESOURCE_FOR_LIFESTYLE_REQUEST:
		{
			return state;
		}
		case GET_BRAND_RESOURCE_FOR_LIFESTYLE_SUCCESS:
		{
			let {
				banner,
				custom_brands,
				brandsText,
			} = action.payload;

			return state.setIn(['reourceForLifeStyle', 'banner'], Immutable.fromJS(banner))
			.setIn(['reourceForLifeStyle', 'custom_brands'], Immutable.fromJS(custom_brands))
			.setIn(['reourceForLifeStyle', 'brandsText'], Immutable.fromJS(brandsText))
			.setIn(['reourceForLifeStyle', 'hasSuccess'], true);
		}
		case GET_BRAND_RESOURCE_FOR_LIFESTYLE_FAILURE:
		{
			return state.setIn(['reourceForLifeStyle', 'hasSuccess'], false);
		}

		case BRAND_SHOW_SEARCH: {
			return state.set('showSearch', action.payload);
		}

		case FETCH_BRAND_SEARCH_HISTORY:
    	case INSERT_BRAND_SEARCH_HISTORY:
    	case CLEAR_BRAND_SEARCH_HISTORY: {
    		return state.setIn(['search', 'history'], Immutable.fromJS(action.payload));
    	}

    	case BRAND_HOT_KEYWORD_REQUEST: {
			return state.setIn(['search', 'isFetching'], true)
			.setIn(['search', 'error'], null);
		}

		case BRAND_HOT_KEYWORD_SUCCESS: {
			let {list} = action.payload;
			return state.setIn(['search', 'isFetching'], false)
			.setIn(['search', 'error'], null)
			.setIn(['search', 'hot'], Immutable.fromJS(list));
		}

		case BRAND_HOT_KEYWORD_FAILURE: {
			return state.setIn(['search', 'isFetching'], false)
			.setIn(['search', 'error'], action.payload);
		}

		case FILTE_BRAND_LIST: {
			let {list, noData} = action.payload;
			return state.setIn(['search', 'filtedBrands'], Immutable.fromJS(list))
			.setIn(['search', 'noData'], noData);
		}

		case SET_BRAND_KEYWORD: {
			return state.setIn(['search', 'keyword'], action.payload);
		}

		case SET_BRAND_DATA_FOR_BOY: {
			return state.setIn(['brandListForBoy', 'all_list_key'], Immutable.fromJS(action.payload));;

		}case SET_BRAND_DATA_FOR_GIRL: {
			return state.setIn(['brandListForGirl', 'all_list_key'], Immutable.fromJS(action.payload));
		}

		case SET_BRAND_DATA_FOR_KID: {
			return state.setIn(['brandListForKid', 'all_list_key'], Immutable.fromJS(action.payload));
		}

		case SET_BRAND_DATA_FOR_LIFESTYLE: {
			return state.setIn(['brandListForLifeStyle', 'all_list_key'], Immutable.fromJS(action.payload));
		}
		case SET_INITIALLISTSIZE: {
			return state.set('initialListSize', action.payload);
		}
    }

    return state;
}