import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import { LIST_ADDER_RESET, LIST_ADDER_SETUP, LIST_ADDER_LISTS_FETCH_REQUEST, LIST_ADDER_LISTS_FETCH_SUCCESS, LIST_ADDER_LISTS_FETCH_FAIL, LIST_EDITOR_ADD_SUCCESS, LIST_EDITOR_REMOVE_SUCCESS, } from '../actions/lists'; const initialState = ImmutableMap({ accountId: null, lists: ImmutableMap({ items: ImmutableList(), loaded: false, isLoading: false, }), }); export default function listAdderReducer(state = initialState, action) { switch(action.type) { case LIST_ADDER_RESET: return initialState; case LIST_ADDER_SETUP: return state.withMutations(map => { map.set('accountId', action.account.get('id')); }); case LIST_ADDER_LISTS_FETCH_REQUEST: return state.setIn(['lists', 'isLoading'], true); case LIST_ADDER_LISTS_FETCH_FAIL: return state.setIn(['lists', 'isLoading'], false); case LIST_ADDER_LISTS_FETCH_SUCCESS: return state.update('lists', lists => lists.withMutations(map => { map.set('isLoading', false); map.set('loaded', true); map.set('items', ImmutableList(action.lists.map(item => item.id))); })); case LIST_EDITOR_ADD_SUCCESS: return state.updateIn(['lists', 'items'], list => list.unshift(action.listId)); case LIST_EDITOR_REMOVE_SUCCESS: return state.updateIn(['lists', 'items'], list => list.filterNot(item => item === action.listId)); default: return state; } }