redux-boost
Version:
52 lines (38 loc) • 1.54 kB
JavaScript
import _defineProperty from 'babel-runtime/helpers/defineProperty';
import _slicedToArray from 'babel-runtime/helpers/slicedToArray';
var _createReducer;
import { createReducer } from 'redux-yo';
import { update } from '../utils';
import { requestActions } from '../requests/actions';
import { dataActions } from './actions';
var initialState = {};
var entitiesUpdate = function entitiesUpdate(state, entities) {
return Object.entries(entities).reduce(function (acc, _ref) {
var _ref2 = _slicedToArray(_ref, 2),
key = _ref2[0],
value = _ref2[1];
var operation = state[key] ? '$merge' : '$set';
acc[key] = _defineProperty({}, operation, value);
return acc;
}, {});
};
export var dataReducer = createReducer((_createReducer = {}, _defineProperty(_createReducer, requestActions.fetchSuccess, function (state, _ref3) {
var entities = _ref3.entities;
if (entities) {
return update(state, entitiesUpdate(state, entities));
}
return state;
}), _defineProperty(_createReducer, dataActions.setEntities, function (state, entities) {
return update(state, {
entities: entitiesUpdate(state, entities)
});
}), _defineProperty(_createReducer, dataActions.deleteEntities, function (state, entities) {
var updates = Object.entries(entities).reduce(function (acc, _ref4) {
var _ref5 = _slicedToArray(_ref4, 2),
key = _ref5[0],
ids = _ref5[1];
acc[key] = { $unset: ids };
return acc;
}, {});
return update(state, updates);
}), _createReducer), initialState);