UNPKG

@datorama/akita

Version:

State Management Tailored-Made for JS Applications

41 lines 3.38 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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 = DEFAULT_ID_KEY) { /** @type {?} */ const entityIsObject = isObject(obj); /** @type {?} */ const entityExists = arr.some((/** * @param {?} entity * @return {?} */ entity => (entityIsObject ? entity[idKey] === id : entity === id))); if (entityExists) { return arrayUpdate(arr, id, obj, idKey); } else { return arrayAdd(arr, entityIsObject ? Object.assign({}, obj, { [idKey]: id }) : obj); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlVcHNlcnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvYWtpdGEvIiwic291cmNlcyI6WyJzcmMvYXJyYXlVcHNlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZdEMsTUFBTSxVQUFVLFdBQVcsQ0FBcUIsR0FBUyxFQUFFLEVBQU0sRUFBRSxHQUFxQixFQUFFLEtBQUssR0FBRyxjQUFjOztVQUN4RyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQzs7VUFDOUIsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJOzs7O0lBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxFQUFDO0lBQ2hHLElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3pDO1NBQU07UUFDTCxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsbUJBQU0sR0FBRyxJQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN0RTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgREVGQVVMVF9JRF9LRVkgfSBmcm9tICcuL2RlZmF1bHRJREtleSc7XG5pbXBvcnQgeyBhcnJheUFkZCB9IGZyb20gJy4vYXJyYXlBZGQnO1xuaW1wb3J0IHsgYXJyYXlVcGRhdGUgfSBmcm9tICcuL2FycmF5VXBkYXRlJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi9pc09iamVjdCc7XG5cbi8qKlxuICogVXBzZXJ0IGl0ZW0gaW4gYSBjb2xsZWN0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKlxuICogc3RvcmUudXBkYXRlKDEsIGVudGl0eSA9PiAoe1xuICogICBjb21tZW50czogYXJyYXlVcHNlcnQoZW50aXR5LmNvbW1lbnRzLCAxLCB7IG5hbWU6ICduZXdDb21tZW50JyB9KVxuICogfSkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVVwc2VydDxSb290IGV4dGVuZHMgYW55W10+KGFycjogUm9vdCwgaWQ6IElELCBvYmo6IFBhcnRpYWw8Um9vdFswXT4sIGlkS2V5ID0gREVGQVVMVF9JRF9LRVkpOiBSb290WzBdW10ge1xuICBjb25zdCBlbnRpdHlJc09iamVjdCA9IGlzT2JqZWN0KG9iaik7XG4gIGNvbnN0IGVudGl0eUV4aXN0cyA9IGFyci5zb21lKGVudGl0eSA9PiAoZW50aXR5SXNPYmplY3QgPyBlbnRpdHlbaWRLZXldID09PSBpZCA6IGVudGl0eSA9PT0gaWQpKTtcbiAgaWYgKGVudGl0eUV4aXN0cykge1xuICAgIHJldHVybiBhcnJheVVwZGF0ZShhcnIsIGlkLCBvYmosIGlkS2V5KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXJyYXlBZGQoYXJyLCBlbnRpdHlJc09iamVjdCA/IHsgLi4ub2JqLCBbaWRLZXldOiBpZCB9IDogb2JqKTtcbiAgfVxufVxuIl19