browseReducer.js 2.59 KB
'use strict';

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

const {
	HISTORY_SORT_LIST_REQUEST,
    HISTORY_SORT_LIST_SUCCESS,
    HISTORY_SORT_LIST_FAILURE,

	HISTORY_LIST_REQUEST,
    HISTORY_LIST_SUCCESS,
    HISTORY_LIST_FAILURE,

	SET_SELECTED_CATEGORY,

	HISTORY_DELETE_REQUEST,
    HISTORY_DELETE_SUCCESS,
    HISTORY_DELETE_FAILURE,

    HISTORY_CLEAR_REQUEST,
    HISTORY_CLEAR_SUCCESS,
    HISTORY_CLEAR_FAILURE,
} = require('../../constants/actionTypes').default;

const initialState = new InitialState;

export default function browseReducer(state=initialState, action) {
    switch(action.type) {
    	case HISTORY_LIST_REQUEST: {
    		return state.set('isFetching', true)
			.set('error', null)
			.set('curCategoryID', action.payload);
    	}
    	case HISTORY_SORT_LIST_REQUEST:{
    		return state.set('isFetching', true)
			.set('error', null);
    	}

    	case HISTORY_LIST_SUCCESS: {
    		let {
				productList,
				currentPage,
				page_total,
			} = action.payload;
			let showEmpty = productList.length == 0;

			let newState = state.set('isFetching', false)
			.set('error', null)
			.set('productList', Immutable.fromJS(productList))
			.set('page_total', Immutable.fromJS(page_total))
			.set('currentPage', currentPage)
			.set('showEmpty', showEmpty);
			return newState;
    	}

		case HISTORY_LIST_FAILURE:
		case HISTORY_SORT_LIST_FAILURE:{
			return state.set('isFetching', false)
			.set('error', action.payload);
		}

		case HISTORY_SORT_LIST_SUCCESS: {
			return state.set('isFetching', false)
			.set('categoryList', Immutable.fromJS(action.payload));
		}

		case SET_SELECTED_CATEGORY: {
			let {productList, index} = action.payload;
			return state.set('selectedCategoryIndex', index)
			.set('currentPage', 0)
			.set('productList',List());
		}

		case HISTORY_DELETE_REQUEST:
		case HISTORY_CLEAR_REQUEST: {
			return state.set('isDeleting', true);
		}

		case HISTORY_DELETE_SUCCESS: {
			let {productList} = action.payload;
			let showEmpty = productList.size == 0;

			console.log(showEmpty);

			return state.set('isDeleting', false)
						.set('productList', productList)
						.set('showEmpty', showEmpty);
		}

		case HISTORY_DELETE_FAILURE:
		case HISTORY_CLEAR_FAILURE: {
			return state.set('isDeleting', false);
		}


		case HISTORY_CLEAR_SUCCESS: {
			return state.set('isDeleting', false)
						.set('productList',  Immutable.fromJS([]))
						.set('categoryList',  Immutable.fromJS([]))
						.set('currentPage', 0)
						.set('page_total', 0)
						.set('selectedCategoryIndex', 0)
						.set('curCategoryID', 0);
		}
    }

    return state;
}