Higher-order reducer for store entities received from normalizr and makes it easy to handle them.
npm install --save redux-entities
import { combineReducers } from 'redux';
import { entitiesReducer } from 'redux-entities';
import { merge, omit } from 'lodash';
function contacts(state = {}, action) {
const { type, payload } = action;
switch (type) {
case UPDATE_CONTACT:
case REMOVE_CONTACT:
return merge({}, state, { [payload.id]: {
...state[payload.id],
isPending: true
}});
case UPDATE_CONTACT_SUCCESS:
return merge({}, state, { [payload.id]: {
...state[payload.id],
isPending: false
}});
case REMOVE_CONTACT_SUCCESS:
return omit(state, meta.id);
default:
return state;
}
}
export default combineReducers({
contacts: entitiesReducer(contacts, 'contacts')
});
import { combineEntitiesReducers } from 'redux-entities';
import { contacts, groups, images, notes } from './entities';
export default combineEntitiesReducers({
contacts,
groups,
images,
notes
});
If you want to use Immutable
with Redux
please check out this version of the library: redux-entities-immutable