@datorama/akita
Version:
State Management Tailored-Made for JS Applications
1,222 lines • 76.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { isEmpty } from './isEmpty';
import { setEntities } from './setEntities';
import { Store } from './store';
import { getActiveEntities } from './getActiveEntities';
import { addEntities } from './addEntities';
import { coerceArray } from './coerceArray';
import { removeEntities } from './removeEntities';
import { getInitialEntitiesState } from './getInitialEntitiesState';
import { isDefined } from './isDefined';
import { updateEntities } from './updateEntities';
import { transaction } from './transaction';
import { isNil } from './isNil';
import { isFunction } from './isFunction';
import { isUndefined } from './isUndefined';
import { logAction, setAction } from './actions';
import { isDev } from './env';
import { hasEntity } from './hasEntity';
import { Subject } from 'rxjs';
import { EntityActions } from './entityActions';
import { DEFAULT_ID_KEY } from './defaultIDKey';
/**
*
* Store for managing a collection of entities
*
* \@example
*
* export interface WidgetsState extends EntityState<Widget> { }
*
* \@StoreConfig({ name: 'widgets' })
* export class WidgetsStore extends EntityStore<WidgetsState> {
* constructor() {
* super();
* }
* }
*
*
* @template S, EntityType, IDType
*/
var EntityStore = /** @class */ (function (_super) {
tslib_1.__extends(EntityStore, _super);
function EntityStore(initialState, options) {
if (initialState === void 0) { initialState = {}; }
if (options === void 0) { options = {}; }
var _this = _super.call(this, tslib_1.__assign({}, getInitialEntitiesState(), initialState), options) || this;
_this.options = options;
_this.entityActions = new Subject();
return _this;
}
Object.defineProperty(EntityStore.prototype, "selectEntityAction$", {
// @internal
get:
// @internal
/**
* @return {?}
*/
function () {
return this.entityActions.asObservable();
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityStore.prototype, "idKey", {
// @internal
get:
// @internal
/**
* @return {?}
*/
function () {
return ((/** @type {?} */ (this.config))).idKey || this.options.idKey || DEFAULT_ID_KEY;
},
enumerable: true,
configurable: true
});
/**
*
* Replace current collection with provided collection
*
* @example
*
* this.store.set([Entity, Entity])
* this.store.set({ids: [], entities: {}})
* this.store.set({ 1: {}, 2: {}})
*
*/
/**
*
* Replace current collection with provided collection
*
* \@example
*
* this.store.set([Entity, Entity])
* this.store.set({ids: [], entities: {}})
* this.store.set({ 1: {}, 2: {}})
*
* @param {?} entities
* @return {?}
*/
EntityStore.prototype.set = /**
*
* Replace current collection with provided collection
*
* \@example
*
* this.store.set([Entity, Entity])
* this.store.set({ids: [], entities: {}})
* this.store.set({ 1: {}, 2: {}})
*
* @param {?} entities
* @return {?}
*/
function (entities) {
var _this = this;
if (isNil(entities))
return;
isDev() && setAction('Set Entity');
/** @type {?} */
var isNativePreAdd = this.akitaPreAddEntity === EntityStore.prototype.akitaPreAddEntity;
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) {
return setEntities({
state: state,
entities: entities,
idKey: _this.idKey,
preAddEntity: _this.akitaPreAddEntity,
isNativePreAdd: isNativePreAdd
});
}));
this.setHasCache(true, { restartTTL: true });
if (this.hasInitialUIState()) {
this.handleUICreation();
}
this.entityActions.next({ type: EntityActions.Set, ids: this.ids });
};
/**
* Add entities
*
* @example
*
* this.store.add([Entity, Entity])
* this.store.add(Entity)
* this.store.add(Entity, { prepend: true })
*
* this.store.add(Entity, { loading: false })
*/
/**
* Add entities
*
* \@example
*
* this.store.add([Entity, Entity])
* this.store.add(Entity)
* this.store.add(Entity, { prepend: true })
*
* this.store.add(Entity, { loading: false })
* @param {?} entities
* @param {?=} options
* @return {?}
*/
EntityStore.prototype.add = /**
* Add entities
*
* \@example
*
* this.store.add([Entity, Entity])
* this.store.add(Entity)
* this.store.add(Entity, { prepend: true })
*
* this.store.add(Entity, { loading: false })
* @param {?} entities
* @param {?=} options
* @return {?}
*/
function (entities, options) {
if (options === void 0) { options = { loading: false }; }
/** @type {?} */
var collection = coerceArray(entities);
if (isEmpty(collection))
return;
/** @type {?} */
var data = addEntities({
state: this._value(),
preAddEntity: this.akitaPreAddEntity,
entities: collection,
idKey: this.idKey,
options: options
});
if (data) {
isDev() && setAction('Add Entity');
data.newState.loading = options.loading;
this._setState((/**
* @return {?}
*/
function () { return data.newState; }));
if (this.hasInitialUIState()) {
this.handleUICreation(true);
}
this.entityActions.next({ type: EntityActions.Add, ids: data.newIds });
}
};
/**
* @param {?} idsOrFnOrState
* @param {?=} newStateOrFn
* @return {?}
*/
EntityStore.prototype.update = /**
* @param {?} idsOrFnOrState
* @param {?=} newStateOrFn
* @return {?}
*/
function (idsOrFnOrState, newStateOrFn) {
var _this = this;
if (isUndefined(newStateOrFn)) {
_super.prototype.update.call(this, (/** @type {?} */ (idsOrFnOrState)));
return;
}
/** @type {?} */
var ids = [];
if (isFunction(idsOrFnOrState)) {
// We need to filter according the predicate function
ids = this.ids.filter((/**
* @param {?} id
* @return {?}
*/
function (id) { return ((/** @type {?} */ (idsOrFnOrState)))(_this.entities[id]); }));
}
else {
// If it's nil we want all of them
ids = isNil(idsOrFnOrState) ? this.ids : coerceArray((/** @type {?} */ (idsOrFnOrState)));
}
if (isEmpty(ids))
return;
isDev() && setAction('Update Entity', ids);
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) {
return updateEntities({
idKey: _this.idKey,
ids: ids,
preUpdateEntity: _this.akitaPreUpdateEntity,
state: state,
newStateOrFn: newStateOrFn
});
}));
this.entityActions.next({ type: EntityActions.Update, ids: ids });
};
/**
*
* Create or update
*
* @example
*
* store.upsert(1, { active: true })
* store.upsert([2, 3], { active: true })
* store.upsert([2, 3], entity => ({ isOpen: !entity.isOpen}))
*
*/
/**
*
* Create or update
*
* \@example
*
* store.upsert(1, { active: true })
* store.upsert([2, 3], { active: true })
* store.upsert([2, 3], entity => ({ isOpen: !entity.isOpen}))
*
* @param {?} ids
* @param {?} newState
* @param {?=} options
* @return {?}
*/
EntityStore.prototype.upsert = /**
*
* Create or update
*
* \@example
*
* store.upsert(1, { active: true })
* store.upsert([2, 3], { active: true })
* store.upsert([2, 3], entity => ({ isOpen: !entity.isOpen}))
*
* @param {?} ids
* @param {?} newState
* @param {?=} options
* @return {?}
*/
function (ids, newState, options) {
var _this = this;
if (options === void 0) { options = {}; }
/** @type {?} */
var toArray = coerceArray(ids);
/** @type {?} */
var predicate = (/**
* @param {?} isUpdate
* @return {?}
*/
function (isUpdate) { return (/**
* @param {?} id
* @return {?}
*/
function (id) { return hasEntity(_this.entities, id) === isUpdate; }); });
/** @type {?} */
var isClassBased = isFunction(options.baseClass);
/** @type {?} */
var updateIds = toArray.filter(predicate(true));
/** @type {?} */
var newEntities = toArray.filter(predicate(false)).map((/**
* @param {?} id
* @return {?}
*/
function (id) {
var _a;
/** @type {?} */
var entity = isFunction(newState) ? newState((/** @type {?} */ ({}))) : newState;
/** @type {?} */
var withId = tslib_1.__assign({}, ((/** @type {?} */ (entity))), (_a = {}, _a[_this.idKey] = id, _a));
if (isClassBased) {
return new options.baseClass(withId);
}
return withId;
}));
// it can be any of the three types
this.update((/** @type {?} */ (updateIds)), (/** @type {?} */ (newState)));
this.add(newEntities);
isDev() && logAction('Upsert Entity');
};
/**
*
* Upsert entity collection (idKey must be present)
*
* @example
*
* store.upsertMany([ { id: 1 }, { id: 2 }]);
*
* store.upsertMany([ { id: 1 }, { id: 2 }], { loading: true });
* store.upsertMany([ { id: 1 }, { id: 2 }], { baseClass: Todo });
*
*/
/**
*
* Upsert entity collection (idKey must be present)
*
* \@example
*
* store.upsertMany([ { id: 1 }, { id: 2 }]);
*
* store.upsertMany([ { id: 1 }, { id: 2 }], { loading: true });
* store.upsertMany([ { id: 1 }, { id: 2 }], { baseClass: Todo });
*
* @param {?} entities
* @param {?=} options
* @return {?}
*/
EntityStore.prototype.upsertMany = /**
*
* Upsert entity collection (idKey must be present)
*
* \@example
*
* store.upsertMany([ { id: 1 }, { id: 2 }]);
*
* store.upsertMany([ { id: 1 }, { id: 2 }], { loading: true });
* store.upsertMany([ { id: 1 }, { id: 2 }], { baseClass: Todo });
*
* @param {?} entities
* @param {?=} options
* @return {?}
*/
function (entities, options) {
if (options === void 0) { options = {}; }
var e_1, _a;
/** @type {?} */
var addedIds = [];
/** @type {?} */
var updatedIds = [];
/** @type {?} */
var updatedEntities = {};
try {
// Update the state directly to optimize performance
for (var entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next(); !entities_1_1.done; entities_1_1 = entities_1.next()) {
var entity = entities_1_1.value;
/** @type {?} */
var withPreCheckHook = this.akitaPreCheckEntity(entity);
/** @type {?} */
var id = withPreCheckHook[this.idKey];
if (hasEntity(this.entities, id)) {
/** @type {?} */
var prev = this._value().entities[id];
/** @type {?} */
var merged = tslib_1.__assign({}, this._value().entities[id], withPreCheckHook);
/** @type {?} */
var next = options.baseClass ? new options.baseClass(merged) : merged;
/** @type {?} */
var withHook = this.akitaPreUpdateEntity(prev, next);
/** @type {?} */
var nextId = withHook[this.idKey];
updatedEntities[nextId] = withHook;
updatedIds.push(nextId);
}
else {
/** @type {?} */
var newEntity = options.baseClass ? new options.baseClass(withPreCheckHook) : withPreCheckHook;
/** @type {?} */
var withHook = this.akitaPreAddEntity(newEntity);
/** @type {?} */
var nextId = withHook[this.idKey];
addedIds.push(nextId);
updatedEntities[nextId] = withHook;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
}
finally { if (e_1) throw e_1.error; }
}
isDev() && logAction('Upsert Many');
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) { return (tslib_1.__assign({}, state, { ids: addedIds.length ? tslib_1.__spread(state.ids, addedIds) : state.ids, entities: tslib_1.__assign({}, state.entities, updatedEntities), loading: !!options.loading })); }));
updatedIds.length && this.entityActions.next({ type: EntityActions.Update, ids: updatedIds });
addedIds.length && this.entityActions.next({ type: EntityActions.Add, ids: addedIds });
if (addedIds.length && this.hasUIStore()) {
this.handleUICreation(true);
}
};
/**
*
* Replace one or more entities (except the id property)
*
*
* @example
*
* this.store.replace(5, newEntity)
* this.store.replace([1,2,3], newEntity)
*/
/**
*
* Replace one or more entities (except the id property)
*
*
* \@example
*
* this.store.replace(5, newEntity)
* this.store.replace([1,2,3], newEntity)
* @param {?} ids
* @param {?} newState
* @return {?}
*/
EntityStore.prototype.replace = /**
*
* Replace one or more entities (except the id property)
*
*
* \@example
*
* this.store.replace(5, newEntity)
* this.store.replace([1,2,3], newEntity)
* @param {?} ids
* @param {?} newState
* @return {?}
*/
function (ids, newState) {
var e_2, _a;
/** @type {?} */
var toArray = coerceArray(ids);
if (isEmpty(toArray))
return;
/** @type {?} */
var replaced = {};
try {
for (var toArray_1 = tslib_1.__values(toArray), toArray_1_1 = toArray_1.next(); !toArray_1_1.done; toArray_1_1 = toArray_1.next()) {
var id = toArray_1_1.value;
newState[this.idKey] = id;
replaced[id] = newState;
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (toArray_1_1 && !toArray_1_1.done && (_a = toArray_1.return)) _a.call(toArray_1);
}
finally { if (e_2) throw e_2.error; }
}
isDev() && setAction('Replace Entity', ids);
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) { return (tslib_1.__assign({}, state, { entities: tslib_1.__assign({}, state.entities, replaced) })); }));
};
/**
*
* Move entity inside the collection
*
*
* @example
*
* this.store.move(fromIndex, toIndex)
*/
/**
*
* Move entity inside the collection
*
*
* \@example
*
* this.store.move(fromIndex, toIndex)
* @param {?} from
* @param {?} to
* @return {?}
*/
EntityStore.prototype.move = /**
*
* Move entity inside the collection
*
*
* \@example
*
* this.store.move(fromIndex, toIndex)
* @param {?} from
* @param {?} to
* @return {?}
*/
function (from, to) {
/** @type {?} */
var ids = this.ids.slice();
ids.splice(to < 0 ? ids.length + to : to, 0, ids.splice(from, 1)[0]);
isDev() && setAction('Move Entity');
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) { return (tslib_1.__assign({}, state, { entities: tslib_1.__assign({}, state.entities), ids: ids })); }));
};
/**
* @param {?=} idsOrFn
* @return {?}
*/
EntityStore.prototype.remove = /**
* @param {?=} idsOrFn
* @return {?}
*/
function (idsOrFn) {
var _this = this;
if (isEmpty(this.ids))
return;
/** @type {?} */
var idPassed = isDefined(idsOrFn);
// null means remove all
/** @type {?} */
var ids = [];
if (isFunction(idsOrFn)) {
ids = this.ids.filter((/**
* @param {?} entityId
* @return {?}
*/
function (entityId) { return idsOrFn(_this.entities[entityId]); }));
}
else {
ids = idPassed ? coerceArray(idsOrFn) : null;
}
if (isEmpty(ids))
return;
isDev() && setAction('Remove Entity', ids);
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) { return removeEntities({ state: state, ids: ids }); }));
if (ids === null) {
this.setHasCache(false);
}
this.handleUIRemove(ids);
this.entityActions.next({ type: EntityActions.Remove, ids: ids });
};
/**
*
* Update the active entity
*
* @example
*
* this.store.updateActive({ completed: true })
* this.store.updateActive(active => {
* return {
* config: {
* ..active.config,
* date
* }
* }
* })
*/
/**
*
* Update the active entity
*
* \@example
*
* this.store.updateActive({ completed: true })
* this.store.updateActive(active => {
* return {
* config: {
* ..active.config,
* date
* }
* }
* })
* @param {?} newStateOrCallback
* @return {?}
*/
EntityStore.prototype.updateActive = /**
*
* Update the active entity
*
* \@example
*
* this.store.updateActive({ completed: true })
* this.store.updateActive(active => {
* return {
* config: {
* ..active.config,
* date
* }
* }
* })
* @param {?} newStateOrCallback
* @return {?}
*/
function (newStateOrCallback) {
/** @type {?} */
var ids = coerceArray(this.active);
isDev() && setAction('Update Active', ids);
this.update(ids, (/** @type {?} */ (newStateOrCallback)));
};
/**
* @param {?} idOrOptions
* @return {?}
*/
EntityStore.prototype.setActive = /**
* @param {?} idOrOptions
* @return {?}
*/
function (idOrOptions) {
/** @type {?} */
var active = getActiveEntities(idOrOptions, this.ids, this.active);
if (active === undefined) {
return;
}
isDev() && setAction('Set Active', active);
this._setActive(active);
};
/**
* Add active entities
*
* @example
*
* store.addActive(2);
* store.addActive([3, 4, 5]);
*/
/**
* Add active entities
*
* \@example
*
* store.addActive(2);
* store.addActive([3, 4, 5]);
* @template T
* @param {?} ids
* @return {?}
*/
EntityStore.prototype.addActive = /**
* Add active entities
*
* \@example
*
* store.addActive(2);
* store.addActive([3, 4, 5]);
* @template T
* @param {?} ids
* @return {?}
*/
function (ids) {
var _this = this;
/** @type {?} */
var toArray = coerceArray(ids);
if (isEmpty(toArray))
return;
/** @type {?} */
var everyExist = toArray.every((/**
* @param {?} id
* @return {?}
*/
function (id) { return _this.active.indexOf(id) > -1; }));
if (everyExist)
return;
isDev() && setAction('Add Active', ids);
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) {
/**
* Protect against case that one of the items in the array exist
* @type {?}
*/
var uniques = Array.from(new Set(tslib_1.__spread(((/** @type {?} */ (state.active))), toArray)));
return tslib_1.__assign({}, state, { active: uniques });
}));
};
/**
* Remove active entities
*
* @example
*
* store.removeActive(2)
* store.removeActive([3, 4, 5])
*/
/**
* Remove active entities
*
* \@example
*
* store.removeActive(2)
* store.removeActive([3, 4, 5])
* @template T
* @param {?} ids
* @return {?}
*/
EntityStore.prototype.removeActive = /**
* Remove active entities
*
* \@example
*
* store.removeActive(2)
* store.removeActive([3, 4, 5])
* @template T
* @param {?} ids
* @return {?}
*/
function (ids) {
var _this = this;
/** @type {?} */
var toArray = coerceArray(ids);
if (isEmpty(toArray))
return;
/** @type {?} */
var someExist = toArray.some((/**
* @param {?} id
* @return {?}
*/
function (id) { return _this.active.indexOf(id) > -1; }));
if (!someExist)
return;
isDev() && setAction('Remove Active', ids);
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) {
return tslib_1.__assign({}, state, { active: Array.isArray(state.active) ? state.active.filter((/**
* @param {?} currentId
* @return {?}
*/
function (currentId) { return toArray.indexOf(currentId) === -1; })) : null });
}));
};
/**
* Toggle active entities
*
* @example
*
* store.toggle(2)
* store.toggle([3, 4, 5])
*/
/**
* Toggle active entities
*
* \@example
*
* store.toggle(2)
* store.toggle([3, 4, 5])
* @template T
* @param {?} ids
* @return {?}
*/
EntityStore.prototype.toggleActive = /**
* Toggle active entities
*
* \@example
*
* store.toggle(2)
* store.toggle([3, 4, 5])
* @template T
* @param {?} ids
* @return {?}
*/
function (ids) {
var _this = this;
/** @type {?} */
var toArray = coerceArray(ids);
/** @type {?} */
var filterExists = (/**
* @param {?} remove
* @return {?}
*/
function (remove) { return (/**
* @param {?} id
* @return {?}
*/
function (id) { return _this.active.includes(id) === remove; }); });
/** @type {?} */
var remove = toArray.filter(filterExists(true));
/** @type {?} */
var add = toArray.filter(filterExists(false));
this.removeActive(remove);
this.addActive(add);
isDev() && logAction('Toggle Active');
};
/**
*
* Create sub UI store for managing Entity's UI state
*
* @example
*
* export type ProductUI = {
* isLoading: boolean;
* isOpen: boolean
* }
*
* interface ProductsUIState extends EntityState<ProductUI> {}
*
* export class ProductsStore EntityStore<ProductsState, Product> {
* ui: EntityUIStore<ProductsUIState, ProductUI>;
*
* constructor() {
* super();
* this.createUIStore();
* }
*
* }
*/
/**
*
* Create sub UI store for managing Entity's UI state
*
* \@example
*
* export type ProductUI = {
* isLoading: boolean;
* isOpen: boolean
* }
*
* interface ProductsUIState extends EntityState<ProductUI> {}
*
* export class ProductsStore EntityStore<ProductsState, Product> {
* ui: EntityUIStore<ProductsUIState, ProductUI>;
*
* constructor() {
* super();
* this.createUIStore();
* }
*
* }
* @param {?=} initialState
* @param {?=} storeConfig
* @return {?}
*/
EntityStore.prototype.createUIStore = /**
*
* Create sub UI store for managing Entity's UI state
*
* \@example
*
* export type ProductUI = {
* isLoading: boolean;
* isOpen: boolean
* }
*
* interface ProductsUIState extends EntityState<ProductUI> {}
*
* export class ProductsStore EntityStore<ProductsState, Product> {
* ui: EntityUIStore<ProductsUIState, ProductUI>;
*
* constructor() {
* super();
* this.createUIStore();
* }
*
* }
* @param {?=} initialState
* @param {?=} storeConfig
* @return {?}
*/
function (initialState, storeConfig) {
if (initialState === void 0) { initialState = {}; }
if (storeConfig === void 0) { storeConfig = {}; }
/** @type {?} */
var defaults = { name: "UI/" + this.storeName, idKey: this.idKey };
this.ui = new EntityUIStore(initialState, tslib_1.__assign({}, defaults, storeConfig));
return this.ui;
};
// @internal
// @internal
/**
* @return {?}
*/
EntityStore.prototype.destroy =
// @internal
/**
* @return {?}
*/
function () {
_super.prototype.destroy.call(this);
if (this.ui instanceof EntityStore) {
this.ui.destroy();
}
this.entityActions.complete();
};
// @internal
// @internal
/**
* @param {?} _
* @param {?} nextEntity
* @return {?}
*/
EntityStore.prototype.akitaPreUpdateEntity =
// @internal
/**
* @param {?} _
* @param {?} nextEntity
* @return {?}
*/
function (_, nextEntity) {
return nextEntity;
};
// @internal
// @internal
/**
* @param {?} newEntity
* @return {?}
*/
EntityStore.prototype.akitaPreAddEntity =
// @internal
/**
* @param {?} newEntity
* @return {?}
*/
function (newEntity) {
return newEntity;
};
// @internal
// @internal
/**
* @param {?} newEntity
* @return {?}
*/
EntityStore.prototype.akitaPreCheckEntity =
// @internal
/**
* @param {?} newEntity
* @return {?}
*/
function (newEntity) {
return newEntity;
};
Object.defineProperty(EntityStore.prototype, "ids", {
get: /**
* @private
* @return {?}
*/
function () {
return this._value().ids;
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityStore.prototype, "entities", {
get: /**
* @private
* @return {?}
*/
function () {
return this._value().entities;
},
enumerable: true,
configurable: true
});
Object.defineProperty(EntityStore.prototype, "active", {
get: /**
* @private
* @return {?}
*/
function () {
return this._value().active;
},
enumerable: true,
configurable: true
});
/**
* @private
* @param {?} ids
* @return {?}
*/
EntityStore.prototype._setActive = /**
* @private
* @param {?} ids
* @return {?}
*/
function (ids) {
this._setState((/**
* @param {?} state
* @return {?}
*/
function (state) {
return tslib_1.__assign({}, state, { active: ids });
}));
};
/**
* @private
* @param {?=} add
* @return {?}
*/
EntityStore.prototype.handleUICreation = /**
* @private
* @param {?=} add
* @return {?}
*/
function (add) {
var _this = this;
if (add === void 0) { add = false; }
/** @type {?} */
var ids = this.ids;
/** @type {?} */
var isFunc = isFunction(this.ui._akitaCreateEntityFn);
/** @type {?} */
var uiEntities;
/** @type {?} */
var createFn = (/**
* @param {?} id
* @return {?}
*/
function (id) {
var _a;
/** @type {?} */
var current = _this.entities[id];
/** @type {?} */
var ui = isFunc ? _this.ui._akitaCreateEntityFn(current) : _this.ui._akitaCreateEntityFn;
return tslib_1.__assign((_a = {}, _a[_this.idKey] = current[_this.idKey], _a), ui);
});
if (add) {
uiEntities = this.ids.filter((/**
* @param {?} id
* @return {?}
*/
function (id) { return isUndefined(_this.ui.entities[id]); })).map(createFn);
}
else {
uiEntities = ids.map(createFn);
}
add ? this.ui.add(uiEntities) : this.ui.set(uiEntities);
};
/**
* @private
* @return {?}
*/
EntityStore.prototype.hasInitialUIState = /**
* @private
* @return {?}
*/
function () {
return this.hasUIStore() && isUndefined(this.ui._akitaCreateEntityFn) === false;
};
/**
* @private
* @param {?} ids
* @return {?}
*/
EntityStore.prototype.handleUIRemove = /**
* @private
* @param {?} ids
* @return {?}
*/
function (ids) {
if (this.hasUIStore()) {
this.ui.remove(ids);
}
};
/**
* @private
* @return {?}
*/
EntityStore.prototype.hasUIStore = /**
* @private
* @return {?}
*/
function () {
return this.ui instanceof EntityUIStore;
};
var _a;
tslib_1.__decorate([
transaction(),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [Object, Object, Object]),
tslib_1.__metadata("design:returntype", void 0)
], EntityStore.prototype, "upsert", null);
tslib_1.__decorate([
transaction(),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [typeof (_a = typeof T !== "undefined" && T) === "function" ? _a : Object]),
tslib_1.__metadata("design:returntype", void 0)
], EntityStore.prototype, "toggleActive", null);
return EntityStore;
}(Store));
export { EntityStore };
if (false) {
/** @type {?} */
EntityStore.prototype.ui;
/**
* @type {?}
* @private
*/
EntityStore.prototype.entityActions;
/**
* @type {?}
* @protected
*/
EntityStore.prototype.options;
}
// @internal
/**
* @template UIState, DEPRECATED
*/
var
// @internal
/**
* @template UIState, DEPRECATED
*/
EntityUIStore = /** @class */ (function (_super) {
tslib_1.__extends(EntityUIStore, _super);
function EntityUIStore(initialState, storeConfig) {
if (initialState === void 0) { initialState = {}; }
if (storeConfig === void 0) { storeConfig = {}; }
return _super.call(this, initialState, storeConfig) || this;
}
/**
*
* Set the initial UI entity state. This function will determine the entity's
* initial state when we call `set()` or `add()`.
*
* @example
*
* constructor() {
* super();
* this.createUIStore().setInitialEntityState(entity => ({ isLoading: false, isOpen: true }));
* this.createUIStore().setInitialEntityState({ isLoading: false, isOpen: true });
* }
*
*/
/**
*
* Set the initial UI entity state. This function will determine the entity's
* initial state when we call `set()` or `add()`.
*
* \@example
*
* constructor() {
* super();
* this.createUIStore().setInitialEntityState(entity => ({ isLoading: false, isOpen: true }));
* this.createUIStore().setInitialEntityState({ isLoading: false, isOpen: true });
* }
*
* @template EntityUI, Entity
* @param {?} createFn
* @return {?}
*/
EntityUIStore.prototype.setInitialEntityState = /**
*
* Set the initial UI entity state. This function will determine the entity's
* initial state when we call `set()` or `add()`.
*
* \@example
*
* constructor() {
* super();
* this.createUIStore().setInitialEntityState(entity => ({ isLoading: false, isOpen: true }));
* this.createUIStore().setInitialEntityState({ isLoading: false, isOpen: true });
* }
*
* @template EntityUI, Entity
* @param {?} createFn
* @return {?}
*/
function (createFn) {
this._akitaCreateEntityFn = createFn;
};
return EntityUIStore;
}(EntityStore));
// @internal
/**
* @template UIState, DEPRECATED
*/
export { EntityUIStore };
if (false) {
/** @type {?} */
EntityUIStore.prototype._akitaCreateEntityFn;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5U3RvcmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvYWtpdGEvIiwic291cmNlcyI6WyJzcmMvZW50aXR5U3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMz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