UNPKG

react-redux-fetch

Version:

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

60 lines (42 loc) 2.05 kB
'use strict'; exports.__esModule = true; exports.default = createAddToListAction; var _seamlessImmutable = require('seamless-immutable'); var _seamlessImmutable2 = _interopRequireDefault(_seamlessImmutable); var _at = require('lodash/at'); var _at2 = _interopRequireDefault(_at); var _filter = require('lodash/filter'); var _filter2 = _interopRequireDefault(_filter); var _isArray = require('lodash/isArray'); var _isArray2 = _interopRequireDefault(_isArray); var _find2 = require('lodash/find'); var _find3 = _interopRequireDefault(_find2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function createAddToListAction(state, action) { if (action.request.meta && action.request.meta.removeFromList) { var _action$request$meta$ = action.request.meta.removeFromList, path = _action$request$meta$.path, idName = _action$request$meta$.idName, id = _action$request$meta$.id; // state.value var stateValue = path ? (0, _at2.default)(state.value, path)[0] : state.value; // action.value var actionValue = path ? (0, _at2.default)(action.value, path)[0] : action.value; // [action.value] var actionValueList = !(0, _isArray2.default)(actionValue) ? [actionValue] : actionValue; // meta.removeFromList.id var idsInMeta = id ? id instanceof Array ? id : [id] : []; // eslint-disable-line if (!(0, _isArray2.default)(stateValue)) { throw Error("Cannot use 'meta.removeFromList' if the value in the state is not an array!"); } var newStateValue = (0, _filter2.default)(stateValue, function (item) { var _find; return !(0, _find3.default)(actionValueList, (_find = {}, _find[idName] = item[idName], _find)) && idsInMeta.indexOf(item[idName]) === -1; } // eslint-disable-line max-len ); return Object.assign({}, action, { value: path ? _seamlessImmutable2.default.from(state.value).setIn(path.split('.'), newStateValue, { deep: true }) : newStateValue }); } return action; }