UNPKG

@datorama/akita

Version:

State Management Tailored-Made for JS Applications

44 lines 3.52 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { DEFAULT_ID_KEY } from './defaultIDKey'; import { arrayAdd } from './arrayAdd'; import { arrayUpdate } from './arrayUpdate'; import { isObject } from './isObject'; /** * Upsert item in a collection * * \@example * * * store.update(1, entity => ({ * comments: arrayUpsert(entity.comments, 1, { name: 'newComment' }) * })) * @template Root * @param {?} arr * @param {?} id * @param {?} obj * @param {?=} idKey * @return {?} */ export function arrayUpsert(arr, id, obj, idKey) { if (idKey === void 0) { idKey = DEFAULT_ID_KEY; } var _a; /** @type {?} */ var entityIsObject = isObject(obj); /** @type {?} */ var entityExists = arr.some((/** * @param {?} entity * @return {?} */ function (entity) { return (entityIsObject ? entity[idKey] === id : entity === id); })); if (entityExists) { return arrayUpdate(arr, id, obj, idKey); } else { return arrayAdd(arr, entityIsObject ? tslib_1.__assign({}, obj, (_a = {}, _a[idKey] = id, _a)) : obj); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlVcHNlcnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvYWtpdGEvIiwic291cmNlcyI6WyJzcmMvYXJyYXlVcHNlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWXRDLE1BQU0sVUFBVSxXQUFXLENBQXFCLEdBQVMsRUFBRSxFQUFNLEVBQUUsR0FBcUIsRUFBRSxLQUFzQjtJQUF0QixzQkFBQSxFQUFBLHNCQUFzQjs7O1FBQ3hHLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDOztRQUM5QixZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUk7Ozs7SUFBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLEVBQXZELENBQXVELEVBQUM7SUFDaEcsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekM7U0FBTTtRQUNMLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxzQkFBTSxHQUFHLGVBQUcsS0FBSyxJQUFHLEVBQUUsT0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDdEU7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERFRkFVTFRfSURfS0VZIH0gZnJvbSAnLi9kZWZhdWx0SURLZXknO1xuaW1wb3J0IHsgYXJyYXlBZGQgfSBmcm9tICcuL2FycmF5QWRkJztcbmltcG9ydCB7IGFycmF5VXBkYXRlIH0gZnJvbSAnLi9hcnJheVVwZGF0ZSc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4vaXNPYmplY3QnO1xuXG4vKipcbiAqIFVwc2VydCBpdGVtIGluIGEgY29sbGVjdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKlxuICpcbiAqIHN0b3JlLnVwZGF0ZSgxLCBlbnRpdHkgPT4gKHtcbiAqICAgY29tbWVudHM6IGFycmF5VXBzZXJ0KGVudGl0eS5jb21tZW50cywgMSwgeyBuYW1lOiAnbmV3Q29tbWVudCcgfSlcbiAqIH0pKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlVcHNlcnQ8Um9vdCBleHRlbmRzIGFueVtdPihhcnI6IFJvb3QsIGlkOiBJRCwgb2JqOiBQYXJ0aWFsPFJvb3RbMF0+LCBpZEtleSA9IERFRkFVTFRfSURfS0VZKTogUm9vdFswXVtdIHtcbiAgY29uc3QgZW50aXR5SXNPYmplY3QgPSBpc09iamVjdChvYmopO1xuICBjb25zdCBlbnRpdHlFeGlzdHMgPSBhcnIuc29tZShlbnRpdHkgPT4gKGVudGl0eUlzT2JqZWN0ID8gZW50aXR5W2lkS2V5XSA9PT0gaWQgOiBlbnRpdHkgPT09IGlkKSk7XG4gIGlmIChlbnRpdHlFeGlzdHMpIHtcbiAgICByZXR1cm4gYXJyYXlVcGRhdGUoYXJyLCBpZCwgb2JqLCBpZEtleSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFycmF5QWRkKGFyciwgZW50aXR5SXNPYmplY3QgPyB7IC4uLm9iaiwgW2lkS2V5XTogaWQgfSA6IG9iaik7XG4gIH1cbn1cbiJdfQ==