react-redux-fetch
Version:
A declarative and customizable way to fetch data for React components and manage that data in the Redux state
65 lines (44 loc) • 2 kB
JavaScript
exports.__esModule = true;
var _seamlessImmutable = require('seamless-immutable');
var _seamlessImmutable2 = _interopRequireDefault(_seamlessImmutable);
var _reduce = require('lodash/reduce');
var _reduce2 = _interopRequireDefault(_reduce);
var _container = require('../container');
var _container2 = _interopRequireDefault(_container);
var _actionTypes = require('../constants/actionTypes');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var INITIAL_STATE = {};
var handleCustomReducers = function handleCustomReducers(state, action) {
if (!_container2.default.hasDefinition('reducers')) {
return state;
}
var additionalReducers = _container2.default.getDefinition('reducers').getArguments();
return (0, _reduce2.default)(additionalReducers, function (s, additionalReducer, key) {
if (s[key]) {
return s.setIn([key], additionalReducer(s[key], action));
}
return s;
}, state);
};
var reducer = function reducer() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _seamlessImmutable2.default)(INITIAL_STATE);
var action = arguments[1];
var resourceName = action.resource && action.resource.name;
// If action has no 'resourceName', or doesn't include our custom prefix,
// we're not interested and we can return the state
if (!resourceName || action.type.indexOf(_actionTypes.PREFIX) === -1) {
return handleCustomReducers(state, action);
}
// If clearing a repository
if (action.type === _actionTypes.CLEAR) {
return state.without(resourceName);
}
// Otherwise
var allRequestConfigs = _container2.default.getDefinition('requestMethods').getArguments();
var stateLeaf = (0, _reduce2.default)(allRequestConfigs, function (s, requestConfig) {
return requestConfig.reducer(s, action);
}, state[resourceName]);
return handleCustomReducers(state.set(resourceName, stateLeaf), action);
};
exports.default = reducer;
;