UNPKG

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
'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; // 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;