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