UNPKG

@mini-rx/signal-store

Version:
44 lines 8.22 kB
import { DestroyRef, inject, untracked } from '@angular/core'; import { createFeatureStoreReducer, createMiniRxActionType, createUpdateFn, generateFeatureKey, generateId, miniRxError, undo, } from '@mini-rx/common'; import { storeCore } from './store-core'; import { createSelectableSignal } from './create-selectable-signal'; import { createRxEffectFn } from './create-rx-effect-fn'; import { createConnectFn } from './create-connect-fn'; export class FeatureStore { get featureKey() { return this._featureKey; } get state() { return untracked(() => this._state()); } constructor(featureKey, initialState, config = {}) { this._state = storeCore.appState.select((state) => state[this.featureKey]); this.updateState = (stateOrCallback, operationType, name) => { return storeCore.dispatch({ type: createMiniRxActionType(operationType, this.featureKey, name), stateOrCallback, featureId: this.featureId, }); }; this.setState = createUpdateFn(this.updateState); this.connect = createConnectFn(this.updateState); this.rxEffect = createRxEffectFn(); this.select = createSelectableSignal(this._state).select; this.featureId = generateId(); this._featureKey = generateFeatureKey(featureKey, config.multi); storeCore.addFeature(this._featureKey, createFeatureStoreReducer(this.featureId, initialState)); inject(DestroyRef).onDestroy(() => this.destroy()); } undo(action) { storeCore.hasUndoExtension ? storeCore.dispatch(undo(action)) : miniRxError('UndoExtension is not initialized.'); } destroy() { storeCore.removeFeature(this._featureKey); } } export function createFeatureStore(featureKey, initialState, config = {}) { return new FeatureStore(featureKey, initialState, config); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc2lnbmFsLXN0b3JlL3NyYy9saWIvZmVhdHVyZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUVILHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsY0FBYyxFQUVkLGtCQUFrQixFQUNsQixVQUFVLEVBRVYsV0FBVyxFQUdYLElBQUksR0FFUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0sT0FBTyxZQUFZO0lBR3JCLElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBS0QsSUFBSSxLQUFLO1FBQ0wsT0FBTyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQWNELFlBQVksVUFBa0IsRUFBRSxZQUF1QixFQUFFLFNBQTZCLEVBQUU7UUFuQmhGLFdBQU0sR0FBc0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ3pELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO1FBS00sZ0JBQVcsR0FBbUMsQ0FDbEQsZUFBMkMsRUFDM0MsYUFBNEIsRUFDNUIsSUFBd0IsRUFDRCxFQUFFO1lBQ3pCLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDdEIsSUFBSSxFQUFFLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztnQkFDbEUsZUFBZTtnQkFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDNUIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBb0JGLGFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFlBQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLGFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLFdBQU0sR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBcEJoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRSxTQUFTLENBQUMsVUFBVSxDQUNoQixJQUFJLENBQUMsV0FBVyxFQUNoQix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUMxRCxDQUFDO1FBRUYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQWM7UUFDZixTQUFTLENBQUMsZ0JBQWdCO1lBQ3RCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsV0FBVyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQU9PLE9BQU87UUFDWCxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0o7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLFVBQWtCLEVBQ2xCLFlBQWUsRUFDZixTQUE2QixFQUFFO0lBRS9CLE9BQU8sSUFBSSxZQUFZLENBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBTaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBY3Rpb24sXG4gICAgY3JlYXRlRmVhdHVyZVN0b3JlUmVkdWNlcixcbiAgICBjcmVhdGVNaW5pUnhBY3Rpb25UeXBlLFxuICAgIGNyZWF0ZVVwZGF0ZUZuLFxuICAgIEZlYXR1cmVTdG9yZUNvbmZpZyxcbiAgICBnZW5lcmF0ZUZlYXR1cmVLZXksXG4gICAgZ2VuZXJhdGVJZCxcbiAgICBNaW5pUnhBY3Rpb24sXG4gICAgbWluaVJ4RXJyb3IsXG4gICAgT3BlcmF0aW9uVHlwZSxcbiAgICBTdGF0ZU9yQ2FsbGJhY2ssXG4gICAgdW5kbyxcbiAgICBVcGRhdGVTdGF0ZUNhbGxiYWNrLFxufSBmcm9tICdAbWluaS1yeC9jb21tb24nO1xuaW1wb3J0IHsgc3RvcmVDb3JlIH0gZnJvbSAnLi9zdG9yZS1jb3JlJztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdGFibGVTaWduYWwgfSBmcm9tICcuL2NyZWF0ZS1zZWxlY3RhYmxlLXNpZ25hbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZUxpa2UgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBjcmVhdGVSeEVmZmVjdEZuIH0gZnJvbSAnLi9jcmVhdGUtcngtZWZmZWN0LWZuJztcbmltcG9ydCB7IGNyZWF0ZUNvbm5lY3RGbiB9IGZyb20gJy4vY3JlYXRlLWNvbm5lY3QtZm4nO1xuXG5leHBvcnQgY2xhc3MgRmVhdHVyZVN0b3JlPFN0YXRlVHlwZSBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBDb21wb25lbnRTdG9yZUxpa2U8U3RhdGVUeXBlPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mZWF0dXJlS2V5OiBzdHJpbmc7XG4gICAgZ2V0IGZlYXR1cmVLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZlYXR1cmVLZXk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhdGU6IFNpZ25hbDxTdGF0ZVR5cGU+ID0gc3RvcmVDb3JlLmFwcFN0YXRlLnNlbGVjdChcbiAgICAgICAgKHN0YXRlKSA9PiBzdGF0ZVt0aGlzLmZlYXR1cmVLZXldXG4gICAgKTtcbiAgICBnZXQgc3RhdGUoKTogU3RhdGVUeXBlIHtcbiAgICAgICAgcmV0dXJuIHVudHJhY2tlZCgoKSA9PiB0aGlzLl9zdGF0ZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVN0YXRlOiBVcGRhdGVTdGF0ZUNhbGxiYWNrPFN0YXRlVHlwZT4gPSAoXG4gICAgICAgIHN0YXRlT3JDYWxsYmFjazogU3RhdGVPckNhbGxiYWNrPFN0YXRlVHlwZT4sXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IE9wZXJhdGlvblR5cGUsXG4gICAgICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICk6IE1pbmlSeEFjdGlvbjxTdGF0ZVR5cGU+ID0+IHtcbiAgICAgICAgcmV0dXJuIHN0b3JlQ29yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBjcmVhdGVNaW5pUnhBY3Rpb25UeXBlKG9wZXJhdGlvblR5cGUsIHRoaXMuZmVhdHVyZUtleSwgbmFtZSksXG4gICAgICAgICAgICBzdGF0ZU9yQ2FsbGJhY2ssXG4gICAgICAgICAgICBmZWF0dXJlSWQ6IHRoaXMuZmVhdHVyZUlkLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZmVhdHVyZUtleTogc3RyaW5nLCBpbml0aWFsU3RhdGU6IFN0YXRlVHlwZSwgY29uZmlnOiBGZWF0dXJlU3RvcmVDb25maWcgPSB7fSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVJZCA9IGdlbmVyYXRlSWQoKTtcbiAgICAgICAgdGhpcy5fZmVhdHVyZUtleSA9IGdlbmVyYXRlRmVhdHVyZUtleShmZWF0dXJlS2V5LCBjb25maWcubXVsdGkpO1xuXG4gICAgICAgIHN0b3JlQ29yZS5hZGRGZWF0dXJlPFN0YXRlVHlwZT4oXG4gICAgICAgICAgICB0aGlzLl9mZWF0dXJlS2V5LFxuICAgICAgICAgICAgY3JlYXRlRmVhdHVyZVN0b3JlUmVkdWNlcih0aGlzLmZlYXR1cmVJZCwgaW5pdGlhbFN0YXRlKVxuICAgICAgICApO1xuXG4gICAgICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICAgIH1cblxuICAgIHVuZG8oYWN0aW9uOiBBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgc3RvcmVDb3JlLmhhc1VuZG9FeHRlbnNpb25cbiAgICAgICAgICAgID8gc3RvcmVDb3JlLmRpc3BhdGNoKHVuZG8oYWN0aW9uKSlcbiAgICAgICAgICAgIDogbWluaVJ4RXJyb3IoJ1VuZG9FeHRlbnNpb24gaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHNldFN0YXRlID0gY3JlYXRlVXBkYXRlRm4odGhpcy51cGRhdGVTdGF0ZSk7XG4gICAgY29ubmVjdCA9IGNyZWF0ZUNvbm5lY3RGbih0aGlzLnVwZGF0ZVN0YXRlKTtcbiAgICByeEVmZmVjdCA9IGNyZWF0ZVJ4RWZmZWN0Rm4oKTtcbiAgICBzZWxlY3QgPSBjcmVhdGVTZWxlY3RhYmxlU2lnbmFsKHRoaXMuX3N0YXRlKS5zZWxlY3Q7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN0b3JlQ29yZS5yZW1vdmVGZWF0dXJlKHRoaXMuX2ZlYXR1cmVLZXkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZlYXR1cmVTdG9yZTxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBmZWF0dXJlS2V5OiBzdHJpbmcsXG4gICAgaW5pdGlhbFN0YXRlOiBULFxuICAgIGNvbmZpZzogRmVhdHVyZVN0b3JlQ29uZmlnID0ge31cbik6IEZlYXR1cmVTdG9yZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBGZWF0dXJlU3RvcmU8VD4oZmVhdHVyZUtleSwgaW5pdGlhbFN0YXRlLCBjb25maWcpO1xufVxuIl19