29 lines
857 B
JavaScript
29 lines
857 B
JavaScript
import { Map, List } from 'immutable';
|
|
import {
|
|
fetchListType,
|
|
editInListType,
|
|
} from './types';
|
|
import { success } from '../tools';
|
|
|
|
|
|
const listInitialState = Map({
|
|
list: List(),
|
|
});
|
|
|
|
export const getListInitialState = () => listInitialState;
|
|
|
|
export const createListReducer = (name, fromJS = r => r, idKey = `${ name }Id`) => {
|
|
const FETCH_LIST_SUCCESS = success(fetchListType(name));
|
|
const EDIT_IN_LIST = editInListType(name);
|
|
return (state = listInitialState, action = {}) => {
|
|
switch (action.type) {
|
|
case FETCH_LIST_SUCCESS:
|
|
return state.set('list', List(action.data).map(fromJS));
|
|
case EDIT_IN_LIST:
|
|
const itemIndex = state.get('list').findIndex(item => item[ idKey ] === action.item[ idKey ])
|
|
return state.mergeIn([ 'list', itemIndex ], action.item);
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
}
|