UNPKG

@datorama/akita

Version:

State Management Tailored-Made for JS Applications

161 lines 13.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { coerceArray } from './coerceArray'; import { DEFAULT_ID_KEY } from './defaultIDKey'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { isArray } from './isArray'; import { isFunction } from './isFunction'; import { isEmpty } from './isEmpty'; // @internal /** * @template T * @param {?} collection * @param {?} idsOrPredicate * @param {?} idKey * @return {?} */ export function find(collection, idsOrPredicate, idKey) { var e_1, _a, e_2, _b; /** @type {?} */ var result = []; if (isFunction(idsOrPredicate)) { try { for (var collection_1 = tslib_1.__values(collection), collection_1_1 = collection_1.next(); !collection_1_1.done; collection_1_1 = collection_1.next()) { var entity = collection_1_1.value; if (idsOrPredicate(entity) === true) { result.push(entity); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (collection_1_1 && !collection_1_1.done && (_a = collection_1.return)) _a.call(collection_1); } finally { if (e_1) throw e_1.error; } } } else { /** @type {?} */ var toSet = coerceArray(idsOrPredicate).reduce((/** * @param {?} acc * @param {?} current * @return {?} */ function (acc, current) { return acc.add(current); }), new Set()); try { for (var collection_2 = tslib_1.__values(collection), collection_2_1 = collection_2.next(); !collection_2_1.done; collection_2_1 = collection_2.next()) { var entity = collection_2_1.value; if (toSet.has(entity[idKey])) { result.push(entity); } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (collection_2_1 && !collection_2_1.done && (_b = collection_2.return)) _b.call(collection_2); } finally { if (e_2) throw e_2.error; } } } return result; } // @internal /** * @template T * @return {?} */ export function distinctUntilArrayItemChanged() { return distinctUntilChanged((/** * @param {?} prevCollection * @param {?} currentCollection * @return {?} */ function (prevCollection, currentCollection) { if (prevCollection === currentCollection) { return true; } if (isArray(prevCollection) === false || isArray(currentCollection) === false) { return false; } if (isEmpty(prevCollection) && isEmpty(currentCollection)) { return true; } // if item is new in the current collection but not exist in the prev collection /** @type {?} */ var hasNewItem = hasChange(currentCollection, prevCollection); if (hasNewItem) { return false; } /** @type {?} */ var isOneOfItemReferenceChanged = hasChange(prevCollection, currentCollection); // return false means there is a change and we want to call next() return isOneOfItemReferenceChanged === false; })); } // @internal /** * @template T * @param {?} first * @param {?} second * @return {?} */ function hasChange(first, second) { /** @type {?} */ var hasChange = second.some((/** * @param {?} currentItem * @return {?} */ function (currentItem) { /** @type {?} */ var oldItem = first.find((/** * @param {?} prevItem * @return {?} */ function (prevItem) { return prevItem === currentItem; })); return oldItem === undefined; })); return hasChange; } /** * @template T * @param {?} idsOrPredicate * @param {?=} idKey * @return {?} */ export function arrayFind(idsOrPredicate, idKey) { return (/** * @param {?} source * @return {?} */ function (source) { return source.pipe(map((/** * @param {?} collection * @return {?} */ function (collection) { // which means the user deleted the root entity or set the collection to nil if (isArray(collection) === false) { return collection; } return find(collection, idsOrPredicate, idKey || DEFAULT_ID_KEY); })), distinctUntilArrayItemChanged(), map((/** * @param {?} value * @return {?} */ function (value) { if (isArray(value) === false) { return value; } if (isArray(idsOrPredicate) || isFunction(idsOrPredicate)) { return value; } return value[0]; }))); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlGaW5kLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2FraXRhLyIsInNvdXJjZXMiOlsic3JjL2FycmF5RmluZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7O0FBR3BDLE1BQU0sVUFBVSxJQUFJLENBQUksVUFBZSxFQUFFLGNBQW1DLEVBQUUsS0FBYTs7O1FBQ25GLE1BQU0sR0FBRyxFQUFFO0lBQ2pCLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFOztZQUM5QixLQUFxQixJQUFBLGVBQUEsaUJBQUEsVUFBVSxDQUFBLHNDQUFBLDhEQUFFO2dCQUE1QixJQUFNLE1BQU0sdUJBQUE7Z0JBQ2YsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQjthQUNGOzs7Ozs7Ozs7S0FDRjtTQUFNOztZQUNDLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTTs7Ozs7UUFBQyxVQUFDLEdBQUcsRUFBRSxPQUFPLElBQUssT0FBQSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFoQixDQUFnQixHQUFFLElBQUksR0FBRyxFQUFFLENBQUM7O1lBRS9GLEtBQXFCLElBQUEsZUFBQSxpQkFBQSxVQUFVLENBQUEsc0NBQUEsOERBQUU7Z0JBQTVCLElBQU0sTUFBTSx1QkFBQTtnQkFDZixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JCO2FBQ0Y7Ozs7Ozs7OztLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQzs7Ozs7O0FBR0QsTUFBTSxVQUFVLDZCQUE2QjtJQUMzQyxPQUFPLG9CQUFvQjs7Ozs7SUFBQyxVQUFDLGNBQW1CLEVBQUUsaUJBQXNCO1FBQ3RFLElBQUksY0FBYyxLQUFLLGlCQUFpQixFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLEtBQUssS0FBSyxFQUFFO1lBQzdFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUN6RCxPQUFPLElBQUksQ0FBQztTQUNiOzs7WUFHSyxVQUFVLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQztRQUUvRCxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7O1lBRUssMkJBQTJCLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQztRQUVoRixrRUFBa0U7UUFDbEUsT0FBTywyQkFBMkIsS0FBSyxLQUFLLENBQUM7SUFDL0MsQ0FBQyxFQUFDLENBQUM7QUFDTCxDQUFDOzs7Ozs7OztBQUdELFNBQVMsU0FBUyxDQUFJLEtBQVUsRUFBRSxNQUFXOztRQUNyQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUk7Ozs7SUFBQyxVQUFBLFdBQVc7O1lBQ2pDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsUUFBUSxJQUFJLE9BQUEsUUFBUSxLQUFLLFdBQVcsRUFBeEIsQ0FBd0IsRUFBQztRQUNoRSxPQUFPLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDL0IsQ0FBQyxFQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQzs7Ozs7OztBQTRCRCxNQUFNLFVBQVUsU0FBUyxDQUFJLGNBQW9ELEVBQUUsS0FBYztJQUMvRjs7OztJQUFPLFVBQVMsTUFBdUI7UUFDckMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixHQUFHOzs7O1FBQUMsVUFBQyxVQUFrQztZQUNyQyw0RUFBNEU7WUFDNUUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNqQyxPQUFPLFVBQVUsQ0FBQzthQUNuQjtZQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsRUFBQyxFQUNGLDZCQUE2QixFQUFFLEVBQy9CLEdBQUc7Ozs7UUFBQyxVQUFBLEtBQUs7WUFDUCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQzVCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3pELE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLEVBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQyxFQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEUywgSXRlbVByZWRpY2F0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuL2NvZXJjZUFycmF5JztcbmltcG9ydCB7IERFRkFVTFRfSURfS0VZIH0gZnJvbSAnLi9kZWZhdWx0SURLZXknO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4vaXNBcnJheSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICcuL2lzRW1wdHknO1xuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBmdW5jdGlvbiBmaW5kPFQ+KGNvbGxlY3Rpb246IFRbXSwgaWRzT3JQcmVkaWNhdGU6IElEUyB8IEl0ZW1QcmVkaWNhdGUsIGlkS2V5OiBzdHJpbmcpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGlmIChpc0Z1bmN0aW9uKGlkc09yUHJlZGljYXRlKSkge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChpZHNPclByZWRpY2F0ZShlbnRpdHkpID09PSB0cnVlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHRvU2V0ID0gY29lcmNlQXJyYXkoaWRzT3JQcmVkaWNhdGUpLnJlZHVjZSgoYWNjLCBjdXJyZW50KSA9PiBhY2MuYWRkKGN1cnJlbnQpLCBuZXcgU2V0KCkpO1xuXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgY29sbGVjdGlvbikge1xuICAgICAgaWYgKHRvU2V0LmhhcyhlbnRpdHlbaWRLZXldKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbnRpdHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEBpbnRlcm5hbFxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0VW50aWxBcnJheUl0ZW1DaGFuZ2VkPFQ+KCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUW10+IHtcbiAgcmV0dXJuIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2Q29sbGVjdGlvbjogVFtdLCBjdXJyZW50Q29sbGVjdGlvbjogVFtdKSA9PiB7XG4gICAgaWYgKHByZXZDb2xsZWN0aW9uID09PSBjdXJyZW50Q29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkocHJldkNvbGxlY3Rpb24pID09PSBmYWxzZSB8fCBpc0FycmF5KGN1cnJlbnRDb2xsZWN0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbXB0eShwcmV2Q29sbGVjdGlvbikgJiYgaXNFbXB0eShjdXJyZW50Q29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGlmIGl0ZW0gaXMgbmV3IGluIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gYnV0IG5vdCBleGlzdCBpbiB0aGUgcHJldiBjb2xsZWN0aW9uXG4gICAgY29uc3QgaGFzTmV3SXRlbSA9IGhhc0NoYW5nZShjdXJyZW50Q29sbGVjdGlvbiwgcHJldkNvbGxlY3Rpb24pO1xuXG4gICAgaWYgKGhhc05ld0l0ZW0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc09uZU9mSXRlbVJlZmVyZW5jZUNoYW5nZWQgPSBoYXNDaGFuZ2UocHJldkNvbGxlY3Rpb24sIGN1cnJlbnRDb2xsZWN0aW9uKTtcblxuICAgIC8vIHJldHVybiBmYWxzZSBtZWFucyB0aGVyZSBpcyBhIGNoYW5nZSBhbmQgd2Ugd2FudCB0byBjYWxsIG5leHQoKVxuICAgIHJldHVybiBpc09uZU9mSXRlbVJlZmVyZW5jZUNoYW5nZWQgPT09IGZhbHNlO1xuICB9KTtcbn1cblxuLy8gQGludGVybmFsXG5mdW5jdGlvbiBoYXNDaGFuZ2U8VD4oZmlyc3Q6IFRbXSwgc2Vjb25kOiBUW10pIHtcbiAgY29uc3QgaGFzQ2hhbmdlID0gc2Vjb25kLnNvbWUoY3VycmVudEl0ZW0gPT4ge1xuICAgIGNvbnN0IG9sZEl0ZW0gPSBmaXJzdC5maW5kKHByZXZJdGVtID0+IHByZXZJdGVtID09PSBjdXJyZW50SXRlbSk7XG4gICAgcmV0dXJuIG9sZEl0ZW0gPT09IHVuZGVmaW5lZDtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc0NoYW5nZTtcbn1cblxuLyoqXG4gKiBGaW5kIGl0ZW1zIGluIGEgY29sbGVjdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogIHNlbGVjdEVudGl0eSgxLCAnY29tbWVudHMnKS5waXBlKFxuICogICBhcnJheUZpbmQoY29tbWVudCA9PiBjb21tZW50LnRleHQgPSAndGV4dCcpXG4gKiApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUZpbmQ8VD4oaWRzOiBJdGVtUHJlZGljYXRlPFQ+LCBpZEtleT86IG5ldmVyKTogKHNvdXJjZTogT2JzZXJ2YWJsZTxUW10+KSA9PiBPYnNlcnZhYmxlPFRbXT47XG4vKipcbiAqIEBleGFtcGxlXG4gKlxuICogc2VsZWN0RW50aXR5KDEsICdjb21tZW50cycpLnBpcGUoXG4gKiAgIGFycmF5RmluZCgzKVxuICogKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlGaW5kPFQ+KGlkczogbnVtYmVyLCBpZEtleT86IHN0cmluZyk6IChzb3VyY2U6IE9ic2VydmFibGU8VFtdPikgPT4gT2JzZXJ2YWJsZTxUPjtcbi8qKlxuICogQGV4YW1wbGVcbiAqXG4gKiBzZWxlY3RFbnRpdHkoMSwgJ2NvbW1lbnRzJykucGlwZShcbiAqICAgYXJyYXlGaW5kKFsxLCAyLCAzXSlcbiAqIClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5RmluZDxUPihpZHM6IG51bWJlcltdLCBpZEtleT86IHN0cmluZyk6IChzb3VyY2U6IE9ic2VydmFibGU8VFtdPikgPT4gT2JzZXJ2YWJsZTxUW10+O1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5RmluZDxUPihpZHNPclByZWRpY2F0ZTogbnVtYmVyW10gfCBudW1iZXIgfCBJdGVtUHJlZGljYXRlPFQ+LCBpZEtleT86IHN0cmluZyk6IChzb3VyY2U6IE9ic2VydmFibGU8VFtdPikgPT4gT2JzZXJ2YWJsZTxUW10gfCBUPiB7XG4gIHJldHVybiBmdW5jdGlvbihzb3VyY2U6IE9ic2VydmFibGU8VFtdPikge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIG1hcCgoY29sbGVjdGlvbjogVFtdIHwgdW5kZWZpbmVkIHwgbnVsbCkgPT4ge1xuICAgICAgICAvLyB3aGljaCBtZWFucyB0aGUgdXNlciBkZWxldGVkIHRoZSByb290IGVudGl0eSBvciBzZXQgdGhlIGNvbGxlY3Rpb24gdG8gbmlsXG4gICAgICAgIGlmIChpc0FycmF5KGNvbGxlY3Rpb24pID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5kKGNvbGxlY3Rpb24sIGlkc09yUHJlZGljYXRlLCBpZEtleSB8fCBERUZBVUxUX0lEX0tFWSk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxBcnJheUl0ZW1DaGFuZ2VkKCksXG4gICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXJyYXkoaWRzT3JQcmVkaWNhdGUpIHx8IGlzRnVuY3Rpb24oaWRzT3JQcmVkaWNhdGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuICAgICAgfSlcbiAgICApO1xuICB9O1xufVxuIl19