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
JavaScript
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;
}
;