@ngxs/store 3.8.1-dev.master-c0944d0 → 3.8.1-dev.master-84a340f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/ngxs-store.umd.js +47 -44
- package/bundles/ngxs-store.umd.js.map +1 -1
- package/esm2015/src/internal/state-context-factory.js +25 -27
- package/esm2015/src/selectors/create-model-selector.js +11 -9
- package/esm2015/src/selectors/create-pick-selector.js +5 -3
- package/esm2015/src/selectors/create-property-selectors.js +8 -6
- package/fesm2015/ngxs-store.js +45 -41
- package/fesm2015/ngxs-store.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
+
import { isStateOperator } from '@ngxs/store/operators';
|
|
2
3
|
import { setValue, getValue } from '../utils/utils';
|
|
3
4
|
import { InternalStateOperations } from '../internal/state-operations';
|
|
4
5
|
import { simplePatch } from './state-operators';
|
|
@@ -17,43 +18,21 @@ export class StateContextFactory {
|
|
|
17
18
|
*/
|
|
18
19
|
createStateContext(mappedStore) {
|
|
19
20
|
const root = this._internalStateOperations.getRootStateOperations();
|
|
20
|
-
function getState(currentAppState) {
|
|
21
|
-
return getValue(currentAppState, mappedStore.path);
|
|
22
|
-
}
|
|
23
|
-
function setStateValue(currentAppState, newValue) {
|
|
24
|
-
const newAppState = setValue(currentAppState, mappedStore.path, newValue);
|
|
25
|
-
root.setState(newAppState);
|
|
26
|
-
return newAppState;
|
|
27
|
-
// In doing this refactoring I noticed that there is a 'bug' where the
|
|
28
|
-
// application state is returned instead of this state slice.
|
|
29
|
-
// This has worked this way since the beginning see:
|
|
30
|
-
// https://github.com/ngxs/store/blame/324c667b4b7debd8eb979006c67ca0ae347d88cd/src/state-factory.ts
|
|
31
|
-
// This needs to be fixed, but is a 'breaking' change.
|
|
32
|
-
// I will do this fix in a subsequent PR and we can decide how to handle it.
|
|
33
|
-
}
|
|
34
|
-
function setStateFromOperator(currentAppState, stateOperator) {
|
|
35
|
-
const local = getState(currentAppState);
|
|
36
|
-
const newValue = stateOperator(local);
|
|
37
|
-
return setStateValue(currentAppState, newValue);
|
|
38
|
-
}
|
|
39
|
-
function isStateOperator(value) {
|
|
40
|
-
return typeof value === 'function';
|
|
41
|
-
}
|
|
42
21
|
return {
|
|
43
22
|
getState() {
|
|
44
23
|
const currentAppState = root.getState();
|
|
45
|
-
return getState(currentAppState);
|
|
24
|
+
return getState(currentAppState, mappedStore.path);
|
|
46
25
|
},
|
|
47
26
|
patchState(val) {
|
|
48
27
|
const currentAppState = root.getState();
|
|
49
28
|
const patchOperator = simplePatch(val);
|
|
50
|
-
return setStateFromOperator(currentAppState, patchOperator);
|
|
29
|
+
return setStateFromOperator(root, currentAppState, patchOperator, mappedStore.path);
|
|
51
30
|
},
|
|
52
31
|
setState(val) {
|
|
53
32
|
const currentAppState = root.getState();
|
|
54
33
|
return isStateOperator(val)
|
|
55
|
-
? setStateFromOperator(currentAppState, val)
|
|
56
|
-
: setStateValue(currentAppState, val);
|
|
34
|
+
? setStateFromOperator(root, currentAppState, val, mappedStore.path)
|
|
35
|
+
: setStateValue(root, currentAppState, val, mappedStore.path);
|
|
57
36
|
},
|
|
58
37
|
dispatch(actions) {
|
|
59
38
|
return root.dispatch(actions);
|
|
@@ -67,4 +46,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
67
46
|
type: Injectable,
|
|
68
47
|
args: [{ providedIn: 'root' }]
|
|
69
48
|
}], ctorParameters: function () { return [{ type: i1.InternalStateOperations }]; } });
|
|
70
|
-
|
|
49
|
+
function setStateValue(root, currentAppState, newValue, path) {
|
|
50
|
+
const newAppState = setValue(currentAppState, path, newValue);
|
|
51
|
+
root.setState(newAppState);
|
|
52
|
+
return newAppState;
|
|
53
|
+
// In doing this refactoring I noticed that there is a 'bug' where the
|
|
54
|
+
// application state is returned instead of this state slice.
|
|
55
|
+
// This has worked this way since the beginning see:
|
|
56
|
+
// https://github.com/ngxs/store/blame/324c667b4b7debd8eb979006c67ca0ae347d88cd/src/state-factory.ts
|
|
57
|
+
// This needs to be fixed, but is a 'breaking' change.
|
|
58
|
+
// I will do this fix in a subsequent PR and we can decide how to handle it.
|
|
59
|
+
}
|
|
60
|
+
function setStateFromOperator(root, currentAppState, stateOperator, path) {
|
|
61
|
+
const local = getState(currentAppState, path);
|
|
62
|
+
const newValue = stateOperator(local);
|
|
63
|
+
return setStateValue(root, currentAppState, newValue, path);
|
|
64
|
+
}
|
|
65
|
+
function getState(currentAppState, path) {
|
|
66
|
+
return getValue(currentAppState, path);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtY29udGV4dC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL2ludGVybmFsL3N0YXRlLWNvbnRleHQtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBZ0MsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJdEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQUVoRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQW9CLHdCQUFpRDtRQUFqRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQXlCO0lBQUcsQ0FBQztJQUV6RTs7T0FFRztJQUNILGtCQUFrQixDQUFJLFdBQXdCO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRXBFLE9BQU87WUFDTCxRQUFRO2dCQUNOLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxRQUFRLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsVUFBVSxDQUFDLEdBQWU7Z0JBQ3hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLG9CQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsUUFBUSxDQUFDLEdBQXlCO2dCQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BFLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFDRCxRQUFRLENBQUMsT0FBb0I7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7O29JQTdCVSxtQkFBbUI7d0lBQW5CLG1CQUFtQixjQUROLE1BQU07NEZBQ25CLG1CQUFtQjtrQkFEL0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBaUNsQyxTQUFTLGFBQWEsQ0FDcEIsSUFBMEIsRUFDMUIsZUFBb0IsRUFDcEIsUUFBVyxFQUNYLElBQVk7SUFFWixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sV0FBVyxDQUFDO0lBQ25CLHNFQUFzRTtJQUN0RSw2REFBNkQ7SUFDN0Qsb0RBQW9EO0lBQ3BELG9HQUFvRztJQUNwRyxzREFBc0Q7SUFDdEQsNEVBQTRFO0FBQzlFLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixJQUEwQixFQUMxQixlQUFvQixFQUNwQixhQUErQixFQUMvQixJQUFZO0lBRVosTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBeUIsQ0FBQyxDQUFDO0lBQzFELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBSSxlQUFvQixFQUFFLElBQVk7SUFDckQsT0FBTyxRQUFRLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEV4aXN0aW5nU3RhdGUsIFN0YXRlT3BlcmF0b3IsIGlzU3RhdGVPcGVyYXRvciB9IGZyb20gJ0BuZ3hzL3N0b3JlL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFN0YXRlQ29udGV4dCB9IGZyb20gJy4uL3N5bWJvbHMnO1xuaW1wb3J0IHsgTWFwcGVkU3RvcmUsIFN0YXRlT3BlcmF0aW9ucyB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5pbXBvcnQgeyBzZXRWYWx1ZSwgZ2V0VmFsdWUgfSBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgeyBJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyB9IGZyb20gJy4uL2ludGVybmFsL3N0YXRlLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgc2ltcGxlUGF0Y2ggfSBmcm9tICcuL3N0YXRlLW9wZXJhdG9ycyc7XG5cbi8qKlxuICogU3RhdGUgQ29udGV4dCBmYWN0b3J5IGNsYXNzXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RhdGVDb250ZXh0RmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ludGVybmFsU3RhdGVPcGVyYXRpb25zOiBJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucykge31cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzdGF0ZSBjb250ZXh0XG4gICAqL1xuICBjcmVhdGVTdGF0ZUNvbnRleHQ8VD4obWFwcGVkU3RvcmU6IE1hcHBlZFN0b3JlKTogU3RhdGVDb250ZXh0PFQ+IHtcbiAgICBjb25zdCByb290ID0gdGhpcy5faW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnMuZ2V0Um9vdFN0YXRlT3BlcmF0aW9ucygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFN0YXRlKCk6IFQge1xuICAgICAgICBjb25zdCBjdXJyZW50QXBwU3RhdGUgPSByb290LmdldFN0YXRlKCk7XG4gICAgICAgIHJldHVybiBnZXRTdGF0ZShjdXJyZW50QXBwU3RhdGUsIG1hcHBlZFN0b3JlLnBhdGgpO1xuICAgICAgfSxcbiAgICAgIHBhdGNoU3RhdGUodmFsOiBQYXJ0aWFsPFQ+KTogVCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcHBTdGF0ZSA9IHJvb3QuZ2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgcGF0Y2hPcGVyYXRvciA9IHNpbXBsZVBhdGNoPFQ+KHZhbCk7XG4gICAgICAgIHJldHVybiBzZXRTdGF0ZUZyb21PcGVyYXRvcihyb290LCBjdXJyZW50QXBwU3RhdGUsIHBhdGNoT3BlcmF0b3IsIG1hcHBlZFN0b3JlLnBhdGgpO1xuICAgICAgfSxcbiAgICAgIHNldFN0YXRlKHZhbDogVCB8IFN0YXRlT3BlcmF0b3I8VD4pOiBUIHtcbiAgICAgICAgY29uc3QgY3VycmVudEFwcFN0YXRlID0gcm9vdC5nZXRTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gaXNTdGF0ZU9wZXJhdG9yKHZhbClcbiAgICAgICAgICA/IHNldFN0YXRlRnJvbU9wZXJhdG9yKHJvb3QsIGN1cnJlbnRBcHBTdGF0ZSwgdmFsLCBtYXBwZWRTdG9yZS5wYXRoKVxuICAgICAgICAgIDogc2V0U3RhdGVWYWx1ZShyb290LCBjdXJyZW50QXBwU3RhdGUsIHZhbCwgbWFwcGVkU3RvcmUucGF0aCk7XG4gICAgICB9LFxuICAgICAgZGlzcGF0Y2goYWN0aW9uczogYW55IHwgYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHJvb3QuZGlzcGF0Y2goYWN0aW9ucyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZVZhbHVlPFQ+KFxuICByb290OiBTdGF0ZU9wZXJhdGlvbnM8YW55PixcbiAgY3VycmVudEFwcFN0YXRlOiBhbnksXG4gIG5ld1ZhbHVlOiBULFxuICBwYXRoOiBzdHJpbmdcbik6IGFueSB7XG4gIGNvbnN0IG5ld0FwcFN0YXRlID0gc2V0VmFsdWUoY3VycmVudEFwcFN0YXRlLCBwYXRoLCBuZXdWYWx1ZSk7XG4gIHJvb3Quc2V0U3RhdGUobmV3QXBwU3RhdGUpO1xuICByZXR1cm4gbmV3QXBwU3RhdGU7XG4gIC8vIEluIGRvaW5nIHRoaXMgcmVmYWN0b3JpbmcgSSBub3RpY2VkIHRoYXQgdGhlcmUgaXMgYSAnYnVnJyB3aGVyZSB0aGVcbiAgLy8gYXBwbGljYXRpb24gc3RhdGUgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGlzIHN0YXRlIHNsaWNlLlxuICAvLyBUaGlzIGhhcyB3b3JrZWQgdGhpcyB3YXkgc2luY2UgdGhlIGJlZ2lubmluZyBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3hzL3N0b3JlL2JsYW1lLzMyNGM2NjdiNGI3ZGViZDhlYjk3OTAwNmM2N2NhMGFlMzQ3ZDg4Y2Qvc3JjL3N0YXRlLWZhY3RvcnkudHNcbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCwgYnV0IGlzIGEgJ2JyZWFraW5nJyBjaGFuZ2UuXG4gIC8vIEkgd2lsbCBkbyB0aGlzIGZpeCBpbiBhIHN1YnNlcXVlbnQgUFIgYW5kIHdlIGNhbiBkZWNpZGUgaG93IHRvIGhhbmRsZSBpdC5cbn1cblxuZnVuY3Rpb24gc2V0U3RhdGVGcm9tT3BlcmF0b3I8VD4oXG4gIHJvb3Q6IFN0YXRlT3BlcmF0aW9uczxhbnk+LFxuICBjdXJyZW50QXBwU3RhdGU6IGFueSxcbiAgc3RhdGVPcGVyYXRvcjogU3RhdGVPcGVyYXRvcjxUPixcbiAgcGF0aDogc3RyaW5nXG4pIHtcbiAgY29uc3QgbG9jYWwgPSBnZXRTdGF0ZShjdXJyZW50QXBwU3RhdGUsIHBhdGgpO1xuICBjb25zdCBuZXdWYWx1ZSA9IHN0YXRlT3BlcmF0b3IobG9jYWwgYXMgRXhpc3RpbmdTdGF0ZTxUPik7XG4gIHJldHVybiBzZXRTdGF0ZVZhbHVlKHJvb3QsIGN1cnJlbnRBcHBTdGF0ZSwgbmV3VmFsdWUsIHBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZTxUPihjdXJyZW50QXBwU3RhdGU6IGFueSwgcGF0aDogc3RyaW5nKTogVCB7XG4gIHJldHVybiBnZXRWYWx1ZShjdXJyZW50QXBwU3RhdGUsIHBhdGgpO1xufVxuIl19
|
|
@@ -3,12 +3,14 @@ import { ensureValidSelector, ensureValueProvided } from './selector-checks.util
|
|
|
3
3
|
export function createModelSelector(selectorMap) {
|
|
4
4
|
const selectorKeys = Object.keys(selectorMap);
|
|
5
5
|
const selectors = Object.values(selectorMap);
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
7
|
+
ensureValidSelectorMap({
|
|
8
|
+
prefix: '[createModelSelector]',
|
|
9
|
+
selectorMap,
|
|
10
|
+
selectorKeys,
|
|
11
|
+
selectors
|
|
12
|
+
});
|
|
13
|
+
}
|
|
12
14
|
return createSelector(selectors, (...args) => {
|
|
13
15
|
return selectorKeys.reduce((obj, key, index) => {
|
|
14
16
|
obj[key] = args[index];
|
|
@@ -16,13 +18,13 @@ export function createModelSelector(selectorMap) {
|
|
|
16
18
|
}, {});
|
|
17
19
|
});
|
|
18
20
|
}
|
|
19
|
-
function ensureValidSelectorMap({ prefix, selectorMap, selectorKeys, selectors
|
|
21
|
+
function ensureValidSelectorMap({ prefix, selectorMap, selectorKeys, selectors }) {
|
|
20
22
|
ensureValueProvided(selectorMap, { prefix, noun: 'selector map' });
|
|
21
23
|
ensureValueProvided(typeof selectorMap === 'object', { prefix, noun: 'valid selector map' });
|
|
22
24
|
ensureValueProvided(selectorKeys.length, { prefix, noun: 'non-empty selector map' });
|
|
23
25
|
selectors.forEach((selector, index) => ensureValidSelector(selector, {
|
|
24
26
|
prefix,
|
|
25
|
-
noun: `selector for the '${selectorKeys[index]}' property
|
|
27
|
+
noun: `selector for the '${selectorKeys[index]}' property`
|
|
26
28
|
}));
|
|
27
29
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGVsLXNlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL3NlbGVjdG9ycy9jcmVhdGUtbW9kZWwtc2VsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBYWxGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBd0IsV0FBYztJQUN2RSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFN0MsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFO1FBQ2pELHNCQUFzQixDQUFJO1lBQ3hCLE1BQU0sRUFBRSx1QkFBdUI7WUFDL0IsV0FBVztZQUNYLFlBQVk7WUFDWixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO1FBQzNDLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDNUMsR0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFxQixDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFxQixDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUF3QixFQUNyRCxNQUFNLEVBQ04sV0FBVyxFQUNYLFlBQVksRUFDWixTQUFTLEVBTVY7SUFDQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbkUsbUJBQW1CLENBQUMsT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDN0YsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDcEMsbUJBQW1CLENBQUMsUUFBUSxFQUFFO1FBQzVCLE1BQU07UUFDTixJQUFJLEVBQUUscUJBQXFCLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWTtLQUMzRCxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJy4vY3JlYXRlLXNlbGVjdG9yJztcbmltcG9ydCB7IGVuc3VyZVZhbGlkU2VsZWN0b3IsIGVuc3VyZVZhbHVlUHJvdmlkZWQgfSBmcm9tICcuL3NlbGVjdG9yLWNoZWNrcy51dGlsJztcbmltcG9ydCB7IFR5cGVkU2VsZWN0b3IgfSBmcm9tICcuL3NlbGVjdG9yLXR5cGVzLnV0aWwnO1xuXG5pbnRlcmZhY2UgU2VsZWN0b3JNYXAge1xuICBba2V5OiBzdHJpbmddOiBUeXBlZFNlbGVjdG9yPGFueT47XG59XG5cbnR5cGUgTW9kZWxTZWxlY3RvcjxUIGV4dGVuZHMgU2VsZWN0b3JNYXA+ID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBNYXBwZWRSZXN1bHQ8VD47XG5cbnR5cGUgTWFwcGVkUmVzdWx0PFRTZWxlY3Rvck1hcD4gPSB7XG4gIFtQIGluIGtleW9mIFRTZWxlY3Rvck1hcF06IFRTZWxlY3Rvck1hcFtQXSBleHRlbmRzIFR5cGVkU2VsZWN0b3I8aW5mZXIgUj4gPyBSIDogbmV2ZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxTZWxlY3RvcjxUIGV4dGVuZHMgU2VsZWN0b3JNYXA+KHNlbGVjdG9yTWFwOiBUKTogTW9kZWxTZWxlY3RvcjxUPiB7XG4gIGNvbnN0IHNlbGVjdG9yS2V5cyA9IE9iamVjdC5rZXlzKHNlbGVjdG9yTWFwKTtcbiAgY29uc3Qgc2VsZWN0b3JzID0gT2JqZWN0LnZhbHVlcyhzZWxlY3Rvck1hcCk7XG5cbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgIGVuc3VyZVZhbGlkU2VsZWN0b3JNYXA8VD4oe1xuICAgICAgcHJlZml4OiAnW2NyZWF0ZU1vZGVsU2VsZWN0b3JdJyxcbiAgICAgIHNlbGVjdG9yTWFwLFxuICAgICAgc2VsZWN0b3JLZXlzLFxuICAgICAgc2VsZWN0b3JzXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0b3JzLCAoLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBzZWxlY3RvcktleXMucmVkdWNlKChvYmosIGtleSwgaW5kZXgpID0+IHtcbiAgICAgIChvYmogYXMgYW55KVtrZXldID0gYXJnc1tpbmRleF07XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9IGFzIE1hcHBlZFJlc3VsdDxUPik7XG4gIH0pIGFzIE1vZGVsU2VsZWN0b3I8VD47XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVZhbGlkU2VsZWN0b3JNYXA8VCBleHRlbmRzIFNlbGVjdG9yTWFwPih7XG4gIHByZWZpeCxcbiAgc2VsZWN0b3JNYXAsXG4gIHNlbGVjdG9yS2V5cyxcbiAgc2VsZWN0b3JzXG59OiB7XG4gIHByZWZpeDogc3RyaW5nO1xuICBzZWxlY3Rvck1hcDogVDtcbiAgc2VsZWN0b3JLZXlzOiBzdHJpbmdbXTtcbiAgc2VsZWN0b3JzOiBUeXBlZFNlbGVjdG9yPGFueT5bXTtcbn0pIHtcbiAgZW5zdXJlVmFsdWVQcm92aWRlZChzZWxlY3Rvck1hcCwgeyBwcmVmaXgsIG5vdW46ICdzZWxlY3RvciBtYXAnIH0pO1xuICBlbnN1cmVWYWx1ZVByb3ZpZGVkKHR5cGVvZiBzZWxlY3Rvck1hcCA9PT0gJ29iamVjdCcsIHsgcHJlZml4LCBub3VuOiAndmFsaWQgc2VsZWN0b3IgbWFwJyB9KTtcbiAgZW5zdXJlVmFsdWVQcm92aWRlZChzZWxlY3RvcktleXMubGVuZ3RoLCB7IHByZWZpeCwgbm91bjogJ25vbi1lbXB0eSBzZWxlY3RvciBtYXAnIH0pO1xuICBzZWxlY3RvcnMuZm9yRWFjaCgoc2VsZWN0b3IsIGluZGV4KSA9PlxuICAgIGVuc3VyZVZhbGlkU2VsZWN0b3Ioc2VsZWN0b3IsIHtcbiAgICAgIHByZWZpeCxcbiAgICAgIG5vdW46IGBzZWxlY3RvciBmb3IgdGhlICcke3NlbGVjdG9yS2V5c1tpbmRleF19JyBwcm9wZXJ0eWBcbiAgICB9KVxuICApO1xufVxuIl19
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { createSelector } from './create-selector';
|
|
2
2
|
import { ensureValidSelector } from './selector-checks.util';
|
|
3
3
|
export function createPickSelector(selector, keys) {
|
|
4
|
-
|
|
4
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
5
|
+
ensureValidSelector(selector, { prefix: '[createPickSelector]' });
|
|
6
|
+
}
|
|
5
7
|
const validKeys = keys.filter(Boolean);
|
|
6
|
-
const selectors = validKeys.map(
|
|
8
|
+
const selectors = validKeys.map(key => createSelector([selector], (s) => s[key]));
|
|
7
9
|
return createSelector([...selectors], (...props) => {
|
|
8
10
|
return validKeys.reduce((acc, key, index) => {
|
|
9
11
|
acc[key] = props[index];
|
|
@@ -11,4 +13,4 @@ export function createPickSelector(selector, keys) {
|
|
|
11
13
|
}, {});
|
|
12
14
|
});
|
|
13
15
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpY2stc2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc2VsZWN0b3JzL2NyZWF0ZS1waWNrLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU83RCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQStCLEVBQy9CLElBQWU7SUFFZixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEVBQUU7UUFDakQsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztLQUNuRTtJQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sY0FBYyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBaUMsRUFBRSxFQUFFO1FBQzdFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFnQyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICcuL2NyZWF0ZS1zZWxlY3Rvcic7XG5pbXBvcnQgeyBlbnN1cmVWYWxpZFNlbGVjdG9yIH0gZnJvbSAnLi9zZWxlY3Rvci1jaGVja3MudXRpbCc7XG5pbXBvcnQgeyBUeXBlZFNlbGVjdG9yIH0gZnJvbSAnLi9zZWxlY3Rvci10eXBlcy51dGlsJztcblxudHlwZSBLZXlzVG9WYWx1ZXM8VCwgS2V5cyBleHRlbmRzIChrZXlvZiBUKVtdPiA9IHtcbiAgW0luZGV4IGluIGtleW9mIEtleXNdOiBLZXlzW0luZGV4XSBleHRlbmRzIGtleW9mIFQgPyBUW0tleXNbSW5kZXhdXSA6IG5ldmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBpY2tTZWxlY3RvcjxUTW9kZWwsIEtleXMgZXh0ZW5kcyAoa2V5b2YgVE1vZGVsKVtdPihcbiAgc2VsZWN0b3I6IFR5cGVkU2VsZWN0b3I8VE1vZGVsPixcbiAga2V5czogWy4uLktleXNdXG4pIHtcbiAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgIGVuc3VyZVZhbGlkU2VsZWN0b3Ioc2VsZWN0b3IsIHsgcHJlZml4OiAnW2NyZWF0ZVBpY2tTZWxlY3Rvcl0nIH0pO1xuICB9XG4gIGNvbnN0IHZhbGlkS2V5cyA9IGtleXMuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBzZWxlY3RvcnMgPSB2YWxpZEtleXMubWFwKGtleSA9PiBjcmVhdGVTZWxlY3Rvcihbc2VsZWN0b3JdLCAoczogVE1vZGVsKSA9PiBzW2tleV0pKTtcbiAgcmV0dXJuIGNyZWF0ZVNlbGVjdG9yKFsuLi5zZWxlY3RvcnNdLCAoLi4ucHJvcHM6IEtleXNUb1ZhbHVlczxUTW9kZWwsIEtleXM+KSA9PiB7XG4gICAgcmV0dXJuIHZhbGlkS2V5cy5yZWR1Y2UoKGFjYywga2V5LCBpbmRleCkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBwcm9wc1tpbmRleF07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFBpY2s8VE1vZGVsLCBLZXlzW251bWJlcl0+KTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { createSelector } from './create-selector';
|
|
2
2
|
import { ensureValidSelector } from './selector-checks.util';
|
|
3
3
|
export function createPropertySelectors(parentSelector) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
5
|
+
ensureValidSelector(parentSelector, {
|
|
6
|
+
prefix: '[createPropertySelectors]',
|
|
7
|
+
noun: 'parent selector'
|
|
8
|
+
});
|
|
9
|
+
}
|
|
8
10
|
const cache = {};
|
|
9
11
|
return new Proxy({}, {
|
|
10
12
|
get(_target, prop) {
|
|
@@ -12,7 +14,7 @@ export function createPropertySelectors(parentSelector) {
|
|
|
12
14
|
createSelector([parentSelector], (s) => s === null || s === void 0 ? void 0 : s[prop]);
|
|
13
15
|
cache[prop] = selector;
|
|
14
16
|
return selector;
|
|
15
|
-
}
|
|
17
|
+
}
|
|
16
18
|
});
|
|
17
19
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb3BlcnR5LXNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9zZWxlY3RvcnMvY3JlYXRlLXByb3BlcnR5LXNlbGVjdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTN0QsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxjQUFtQztJQUVuQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEVBQUU7UUFDakQsbUJBQW1CLENBQUMsY0FBYyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSwyQkFBMkI7WUFDbkMsSUFBSSxFQUFFLGlCQUFpQjtTQUN4QixDQUFDLENBQUM7S0FDSjtJQUNELE1BQU0sS0FBSyxHQUF1QyxFQUFFLENBQUM7SUFDckQsT0FBTyxJQUFJLEtBQUssQ0FDZCxFQUEwQyxFQUMxQztRQUNFLEdBQUcsQ0FBQyxPQUFZLEVBQUUsSUFBa0I7WUFDbEMsTUFBTSxRQUFRLEdBQ1osS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVixjQUFjLENBQ2IsQ0FBQyxjQUFjLENBQUMsRUFDaEIsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRyxJQUFJLENBQUMsQ0FDa0IsQ0FBQztZQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3ZCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7S0FDeUMsQ0FDN0MsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJy4vY3JlYXRlLXNlbGVjdG9yJztcbmltcG9ydCB7IGVuc3VyZVZhbGlkU2VsZWN0b3IgfSBmcm9tICcuL3NlbGVjdG9yLWNoZWNrcy51dGlsJztcbmltcG9ydCB7IFNlbGVjdG9yRGVmIH0gZnJvbSAnLi9zZWxlY3Rvci10eXBlcy51dGlsJztcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlTZWxlY3RvcnM8VE1vZGVsPiA9IHtcbiAgW1AgaW4ga2V5b2YgTm9uTnVsbGFibGU8VE1vZGVsPl0tPzogKFxuICAgIG1vZGVsOiBUTW9kZWxcbiAgKSA9PiBUTW9kZWwgZXh0ZW5kcyBudWxsIHwgdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTm9uTnVsbGFibGU8VE1vZGVsPltQXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eVNlbGVjdG9yczxUTW9kZWw+KFxuICBwYXJlbnRTZWxlY3RvcjogU2VsZWN0b3JEZWY8VE1vZGVsPlxuKTogUHJvcGVydHlTZWxlY3RvcnM8VE1vZGVsPiB7XG4gIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICBlbnN1cmVWYWxpZFNlbGVjdG9yKHBhcmVudFNlbGVjdG9yLCB7XG4gICAgICBwcmVmaXg6ICdbY3JlYXRlUHJvcGVydHlTZWxlY3RvcnNdJyxcbiAgICAgIG5vdW46ICdwYXJlbnQgc2VsZWN0b3InXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgY2FjaGU6IFBhcnRpYWw8UHJvcGVydHlTZWxlY3RvcnM8VE1vZGVsPj4gPSB7fTtcbiAgcmV0dXJuIG5ldyBQcm94eTxQcm9wZXJ0eVNlbGVjdG9yczxUTW9kZWw+PihcbiAgICB7fSBhcyB1bmtub3duIGFzIFByb3BlcnR5U2VsZWN0b3JzPFRNb2RlbD4sXG4gICAge1xuICAgICAgZ2V0KF90YXJnZXQ6IGFueSwgcHJvcDoga2V5b2YgVE1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID1cbiAgICAgICAgICBjYWNoZVtwcm9wXSB8fFxuICAgICAgICAgIChjcmVhdGVTZWxlY3RvcihcbiAgICAgICAgICAgIFtwYXJlbnRTZWxlY3Rvcl0sXG4gICAgICAgICAgICAoczogVE1vZGVsKSA9PiBzPy5bcHJvcF1cbiAgICAgICAgICApIGFzIFByb3BlcnR5U2VsZWN0b3JzPFRNb2RlbD5bdHlwZW9mIHByb3BdKTtcbiAgICAgICAgY2FjaGVbcHJvcF0gPSBzZWxlY3RvcjtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfVxuICAgIH0gYXMgUHJveHlIYW5kbGVyPFByb3BlcnR5U2VsZWN0b3JzPFRNb2RlbD4+XG4gICk7XG59XG4iXX0=
|
package/fesm2015/ngxs-store.js
CHANGED
|
@@ -5,6 +5,7 @@ import { memoize, INITIAL_STATE_TOKEN, NgxsBootstrapper, ɵNGXS_STATE_CONTEXT_FA
|
|
|
5
5
|
import { isPlatformServer } from '@angular/common';
|
|
6
6
|
import { Observable, Subject, BehaviorSubject, of, forkJoin, throwError, EMPTY, from, isObservable } from 'rxjs';
|
|
7
7
|
import { filter, map, share, shareReplay, take, exhaustMap, mergeMap, defaultIfEmpty, catchError, takeUntil, distinctUntilChanged, tap, startWith, pairwise } from 'rxjs/operators';
|
|
8
|
+
import { isStateOperator } from '@ngxs/store/operators';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Returns the type from an action instance/class.
|
|
@@ -1137,43 +1138,21 @@ class StateContextFactory {
|
|
|
1137
1138
|
*/
|
|
1138
1139
|
createStateContext(mappedStore) {
|
|
1139
1140
|
const root = this._internalStateOperations.getRootStateOperations();
|
|
1140
|
-
function getState(currentAppState) {
|
|
1141
|
-
return getValue(currentAppState, mappedStore.path);
|
|
1142
|
-
}
|
|
1143
|
-
function setStateValue(currentAppState, newValue) {
|
|
1144
|
-
const newAppState = setValue(currentAppState, mappedStore.path, newValue);
|
|
1145
|
-
root.setState(newAppState);
|
|
1146
|
-
return newAppState;
|
|
1147
|
-
// In doing this refactoring I noticed that there is a 'bug' where the
|
|
1148
|
-
// application state is returned instead of this state slice.
|
|
1149
|
-
// This has worked this way since the beginning see:
|
|
1150
|
-
// https://github.com/ngxs/store/blame/324c667b4b7debd8eb979006c67ca0ae347d88cd/src/state-factory.ts
|
|
1151
|
-
// This needs to be fixed, but is a 'breaking' change.
|
|
1152
|
-
// I will do this fix in a subsequent PR and we can decide how to handle it.
|
|
1153
|
-
}
|
|
1154
|
-
function setStateFromOperator(currentAppState, stateOperator) {
|
|
1155
|
-
const local = getState(currentAppState);
|
|
1156
|
-
const newValue = stateOperator(local);
|
|
1157
|
-
return setStateValue(currentAppState, newValue);
|
|
1158
|
-
}
|
|
1159
|
-
function isStateOperator(value) {
|
|
1160
|
-
return typeof value === 'function';
|
|
1161
|
-
}
|
|
1162
1141
|
return {
|
|
1163
1142
|
getState() {
|
|
1164
1143
|
const currentAppState = root.getState();
|
|
1165
|
-
return getState(currentAppState);
|
|
1144
|
+
return getState(currentAppState, mappedStore.path);
|
|
1166
1145
|
},
|
|
1167
1146
|
patchState(val) {
|
|
1168
1147
|
const currentAppState = root.getState();
|
|
1169
1148
|
const patchOperator = simplePatch(val);
|
|
1170
|
-
return setStateFromOperator(currentAppState, patchOperator);
|
|
1149
|
+
return setStateFromOperator(root, currentAppState, patchOperator, mappedStore.path);
|
|
1171
1150
|
},
|
|
1172
1151
|
setState(val) {
|
|
1173
1152
|
const currentAppState = root.getState();
|
|
1174
1153
|
return isStateOperator(val)
|
|
1175
|
-
? setStateFromOperator(currentAppState, val)
|
|
1176
|
-
: setStateValue(currentAppState, val);
|
|
1154
|
+
? setStateFromOperator(root, currentAppState, val, mappedStore.path)
|
|
1155
|
+
: setStateValue(root, currentAppState, val, mappedStore.path);
|
|
1177
1156
|
},
|
|
1178
1157
|
dispatch(actions) {
|
|
1179
1158
|
return root.dispatch(actions);
|
|
@@ -1187,6 +1166,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1187
1166
|
type: Injectable,
|
|
1188
1167
|
args: [{ providedIn: 'root' }]
|
|
1189
1168
|
}], ctorParameters: function () { return [{ type: InternalStateOperations }]; } });
|
|
1169
|
+
function setStateValue(root, currentAppState, newValue, path) {
|
|
1170
|
+
const newAppState = setValue(currentAppState, path, newValue);
|
|
1171
|
+
root.setState(newAppState);
|
|
1172
|
+
return newAppState;
|
|
1173
|
+
// In doing this refactoring I noticed that there is a 'bug' where the
|
|
1174
|
+
// application state is returned instead of this state slice.
|
|
1175
|
+
// This has worked this way since the beginning see:
|
|
1176
|
+
// https://github.com/ngxs/store/blame/324c667b4b7debd8eb979006c67ca0ae347d88cd/src/state-factory.ts
|
|
1177
|
+
// This needs to be fixed, but is a 'breaking' change.
|
|
1178
|
+
// I will do this fix in a subsequent PR and we can decide how to handle it.
|
|
1179
|
+
}
|
|
1180
|
+
function setStateFromOperator(root, currentAppState, stateOperator, path) {
|
|
1181
|
+
const local = getState(currentAppState, path);
|
|
1182
|
+
const newValue = stateOperator(local);
|
|
1183
|
+
return setStateValue(root, currentAppState, newValue, path);
|
|
1184
|
+
}
|
|
1185
|
+
function getState(currentAppState, path) {
|
|
1186
|
+
return getValue(currentAppState, path);
|
|
1187
|
+
}
|
|
1190
1188
|
|
|
1191
1189
|
const stateNameRegex = new RegExp('^[a-zA-Z0-9_]+$');
|
|
1192
1190
|
function ensureStateNameIsValid(name) {
|
|
@@ -2226,12 +2224,14 @@ function ensureValueProvided(value, context = {}) {
|
|
|
2226
2224
|
function createModelSelector(selectorMap) {
|
|
2227
2225
|
const selectorKeys = Object.keys(selectorMap);
|
|
2228
2226
|
const selectors = Object.values(selectorMap);
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2227
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2228
|
+
ensureValidSelectorMap({
|
|
2229
|
+
prefix: '[createModelSelector]',
|
|
2230
|
+
selectorMap,
|
|
2231
|
+
selectorKeys,
|
|
2232
|
+
selectors
|
|
2233
|
+
});
|
|
2234
|
+
}
|
|
2235
2235
|
return createSelector(selectors, (...args) => {
|
|
2236
2236
|
return selectorKeys.reduce((obj, key, index) => {
|
|
2237
2237
|
obj[key] = args[index];
|
|
@@ -2239,20 +2239,22 @@ function createModelSelector(selectorMap) {
|
|
|
2239
2239
|
}, {});
|
|
2240
2240
|
});
|
|
2241
2241
|
}
|
|
2242
|
-
function ensureValidSelectorMap({ prefix, selectorMap, selectorKeys, selectors
|
|
2242
|
+
function ensureValidSelectorMap({ prefix, selectorMap, selectorKeys, selectors }) {
|
|
2243
2243
|
ensureValueProvided(selectorMap, { prefix, noun: 'selector map' });
|
|
2244
2244
|
ensureValueProvided(typeof selectorMap === 'object', { prefix, noun: 'valid selector map' });
|
|
2245
2245
|
ensureValueProvided(selectorKeys.length, { prefix, noun: 'non-empty selector map' });
|
|
2246
2246
|
selectors.forEach((selector, index) => ensureValidSelector(selector, {
|
|
2247
2247
|
prefix,
|
|
2248
|
-
noun: `selector for the '${selectorKeys[index]}' property
|
|
2248
|
+
noun: `selector for the '${selectorKeys[index]}' property`
|
|
2249
2249
|
}));
|
|
2250
2250
|
}
|
|
2251
2251
|
|
|
2252
2252
|
function createPickSelector(selector, keys) {
|
|
2253
|
-
|
|
2253
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2254
|
+
ensureValidSelector(selector, { prefix: '[createPickSelector]' });
|
|
2255
|
+
}
|
|
2254
2256
|
const validKeys = keys.filter(Boolean);
|
|
2255
|
-
const selectors = validKeys.map(
|
|
2257
|
+
const selectors = validKeys.map(key => createSelector([selector], (s) => s[key]));
|
|
2256
2258
|
return createSelector([...selectors], (...props) => {
|
|
2257
2259
|
return validKeys.reduce((acc, key, index) => {
|
|
2258
2260
|
acc[key] = props[index];
|
|
@@ -2262,10 +2264,12 @@ function createPickSelector(selector, keys) {
|
|
|
2262
2264
|
}
|
|
2263
2265
|
|
|
2264
2266
|
function createPropertySelectors(parentSelector) {
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2267
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2268
|
+
ensureValidSelector(parentSelector, {
|
|
2269
|
+
prefix: '[createPropertySelectors]',
|
|
2270
|
+
noun: 'parent selector'
|
|
2271
|
+
});
|
|
2272
|
+
}
|
|
2269
2273
|
const cache = {};
|
|
2270
2274
|
return new Proxy({}, {
|
|
2271
2275
|
get(_target, prop) {
|
|
@@ -2273,7 +2277,7 @@ function createPropertySelectors(parentSelector) {
|
|
|
2273
2277
|
createSelector([parentSelector], (s) => s === null || s === void 0 ? void 0 : s[prop]);
|
|
2274
2278
|
cache[prop] = selector;
|
|
2275
2279
|
return selector;
|
|
2276
|
-
}
|
|
2280
|
+
}
|
|
2277
2281
|
});
|
|
2278
2282
|
}
|
|
2279
2283
|
|