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