@ngxs/store 3.8.1-dev.master-c0944d0 → 3.8.1-dev.master-94c82c4
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.
|
@@ -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
|
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) {
|