@datorama/akita
Version:
State Management Tailored-Made for JS Applications
41 lines • 3.38 kB
JavaScript
/**
* @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