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; } }