browseReducer.js 2.2 KB
'use strict';

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

const {
	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);
    	}

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

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

			return newState;
    	}

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

		case SET_SELECTED_CATEGORY: {
			let {productList, index} = action.payload;
			return state.set('selectedCategoryIndex', index)
			.set('selectedProductList', Immutable.fromJS(productList))
		}

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

		case HISTORY_DELETE_SUCCESS: {
			let {productList, selectedProductList} = action.payload;
			let showEmpty = productList.size == 0;
			return state.set('isDeleting', false)
			.set('productList', productList)
			.set('selectedProductList', selectedProductList)
			.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('categoryList', List())
			.set('productList', List())
			.set('selectedProductList', List())
			.set('showEmpty', true);

		}
    }

    return state;
}