UNPKG

react-redux-fetch

Version:

A declarative and customizable way to fetch data for React components and manage that data in the Redux state

66 lines (45 loc) 2.16 kB
'use strict'; 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; var immutableState = _seamlessImmutable2.default.isImmutable(state) ? state : (0, _seamlessImmutable2.default)(state); // 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(immutableState, action); } // If clearing a repository if (action.type === _actionTypes.CLEAR) { return immutableState.without(resourceName); } // Otherwise var allRequestConfigs = _container2.default.getDefinition('requestMethods').getArguments(); var stateLeaf = (0, _reduce2.default)(allRequestConfigs, function (s, requestConfig) { return requestConfig.reducer(s, action); }, immutableState[resourceName]); return handleCustomReducers(immutableState.set(resourceName, stateLeaf), action); }; exports.default = reducer;