redux-store-templates
Version:
Set of helpers to create useful and commonly used redux store patterns
109 lines (86 loc) • 4.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createAddIds = exports.createRemoveById = exports.createAddById = exports.applyRemoveIds = exports.createUpdateById = exports.applyAddIds = void 0;
var _utils = require("./utils");
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
var applyAddIds = function applyAddIds() {
var ids = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var addIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var idsToAdd = (0, _utils.readAsArray)(addIds);
return _toConsumableArray(ids.filter(function (id) {
return !idsToAdd.includes(id);
})).concat(_toConsumableArray(idsToAdd));
};
exports.applyAddIds = applyAddIds;
var createUpdateById = function createUpdateById(idName) {
return function () {
var byId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var updates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var itemsUpdates = (0, _utils.readAsArray)(updates); // return byId with updated items
return itemsUpdates.reduce(function (acc, curr) {
var idOfItemToBeUpdated = curr[idName];
var itemToBeUpdated = byId[idOfItemToBeUpdated];
if (!idOfItemToBeUpdated || !itemToBeUpdated) {
// don't do anything if update has no corresponding existing item
return acc;
}
return _objectSpread({}, acc, _defineProperty({}, idOfItemToBeUpdated, _objectSpread({}, itemToBeUpdated, curr)));
}, byId);
};
};
exports.createUpdateById = createUpdateById;
var applyRemoveIds = function applyRemoveIds() {
var ids = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var removeIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var idsToRemove = (0, _utils.readAsArray)(removeIds);
return ids.filter(function (id) {
return !idsToRemove.includes(id);
});
};
exports.applyRemoveIds = applyRemoveIds;
var createAddById = function createAddById(keyName) {
return function () {
var byId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var items = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var itemsToAdd = (0, _utils.readAsArray)(items);
var add = itemsToAdd.reduce(function (acc, curr) {
return _objectSpread({}, acc, _defineProperty({}, curr[keyName], curr));
}, {});
return _objectSpread({}, byId, add);
};
};
exports.createAddById = createAddById;
var createRemoveById = function createRemoveById(keyName) {
return function () {
var byId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var removeIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var idsToRemove = (0, _utils.readAsArray)(removeIds);
return Object.keys(byId).filter(function (key) {
return !idsToRemove.includes(key);
}).map(function (key) {
return byId[key];
}).reduce(function (acc, curr) {
return _objectSpread({}, acc, _defineProperty({}, curr[keyName], curr));
}, {});
};
};
exports.createRemoveById = createRemoveById;
var createAddIds = function createAddIds(keyName) {
return function () {
var ids = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var items = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var itemsToAdd = (0, _utils.readAsArray)(items);
var addIds = itemsToAdd.map(function (item) {
return item[keyName];
});
return applyAddIds(ids, addIds);
};
};
exports.createAddIds = createAddIds;