listReducer.js 1.9 KB
'use strict';

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

const {
	SET_LIST_ID,
	SET_CATEGORY_NAME,

    MESSAGE_LIST_REQUEST,
    MESSAGE_LIST_SUCCESS,
    MESSAGE_LIST_FAILURE,

	DELETE_MESSAGE_LIST_ITEM_REQUEST,
	DELETE_MESSAGE_LIST_ITEM_SUCCESS,
	DELETE_MESSAGE_LIST_ITEM_FAILURE,

	MESSAGE_LIST_CHANGE_EDIT_STATUS,
	MESSAGE_LIST_CHANGE_SELECTED_STATUS,

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

const initialState = new InitialState;

export default function listReducer(state=initialState, action) {
    switch(action.type) {
    	case SET_LIST_ID: {
    		return state.set('listId', action.payload);
    	}

		case SET_CATEGORY_NAME: {
			return state.set('categoryName', action.payload);
		}

    	case MESSAGE_LIST_REQUEST: {
    		return state.set('isFetching', true)
			.set('error', null);
    	}

    	case MESSAGE_LIST_SUCCESS: {
    		let {
				list,
				currentPage,
				pageCount,
				total,
				endReached,
				shouldShowEmpty,
			} = action.payload;

			let newState = state.set('isFetching', false)
			.set('error', null)
			.set('list', Immutable.fromJS(list))
			.set('currentPage', currentPage)
			.set('pageCount', pageCount)
			.set('total', total)
			.set('endReached', endReached)
			.set('shouldShowEmpty', shouldShowEmpty);

			return newState;
		}

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


		case DELETE_MESSAGE_LIST_ITEM_REQUEST: {
			let list = action.payload;
			return state.set('list', Immutable.fromJS(list));
		}

		case MESSAGE_LIST_CHANGE_EDIT_STATUS: {
			return state.set('isEditing', action.payload);
		}

		case MESSAGE_LIST_CHANGE_SELECTED_STATUS: {
			let {list, selectionList} = action.payload;
			return state.set('list', Immutable.fromJS(list))
			.set('selectionList', Immutable.fromJS(selectionList));
		}
    }

    return state;
}