@push.rocks/smartstate 2.0.9 → 2.0.11
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/dist_bundle/bundle.js +2114 -3
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/smartstate.classes.smartstate.d.ts +1 -1
- package/dist_ts/smartstate.classes.smartstate.js +1 -1
- package/dist_ts/smartstate.classes.statecollection.d.ts +8 -0
- package/dist_ts/smartstate.classes.statecollection.js +15 -0
- package/dist_ts/smartstate.classes.stateobservable.d.ts +10 -0
- package/dist_ts/smartstate.classes.stateobservable.js +15 -0
- package/dist_ts/smartstate.classes.statepart.d.ts +8 -3
- package/dist_ts/smartstate.classes.statepart.js +28 -4
- package/dist_ts/smartstate.plugins.d.ts +2 -1
- package/dist_ts/smartstate.plugins.js +3 -2
- package/package.json +4 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/smartstate.classes.smartstate.ts +1 -1
- package/ts/smartstate.classes.statepart.ts +32 -4
- package/ts/smartstate.plugins.ts +2 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartstate',
|
|
6
|
-
version: '2.0.
|
|
6
|
+
version: '2.0.10',
|
|
7
7
|
description: 'a package that handles state in a good way'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDRDQUE0QztDQUMxRCxDQUFBIn0=
|
|
@@ -16,7 +16,7 @@ export declare class Smartstate<StatePartNameType> {
|
|
|
16
16
|
* @param initialArg
|
|
17
17
|
* @param initMode
|
|
18
18
|
*/
|
|
19
|
-
getStatePart<PayloadType>(statePartNameArg: string & StatePartNameType, initialArg?: PayloadType, initMode?: 'soft' | 'mandatory' | 'force'): StatePart<StatePartNameType, PayloadType>;
|
|
19
|
+
getStatePart<PayloadType>(statePartNameArg: string & StatePartNameType, initialArg?: PayloadType, initMode?: 'soft' | 'mandatory' | 'force' | 'persistent'): StatePart<StatePartNameType, PayloadType>;
|
|
20
20
|
/**
|
|
21
21
|
* creates a statepart
|
|
22
22
|
* @param statePartName
|
|
@@ -42,4 +42,4 @@ export class Smartstate {
|
|
|
42
42
|
return newState;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5jbGFzc2VzLnNtYXJ0c3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHN0YXRlLmNsYXNzZXMuc21hcnRzdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBR3JCO1FBRk8saUJBQVksR0FBeUQsRUFBRSxDQUFDO0lBRWhFLENBQUM7SUFFaEI7Ozs7Ozs7O09BUUc7SUFDSSxZQUFZLENBQ2pCLGdCQUE0QyxFQUM1QyxVQUF3QixFQUN4QixRQUF3RDtRQUV4RCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQXVCLENBQUMsRUFBRTtZQUM5QyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFBRTtnQkFDcEQsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLGdCQUFnQiw0REFBNEQsQ0FDaEYsQ0FBQzthQUNIO1lBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUE4QyxDQUFDO1NBQ3pGO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxnQkFBZ0IsNkRBQTZELENBQ2pGLENBQUM7YUFDSDtZQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBYyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZSxDQUNyQixhQUFnQyxFQUNoQyxpQkFBOEI7UUFFOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQWlDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQW9CLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDbkQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StatePart } from './smartstate.classes.statepart';
|
|
2
|
+
/**
|
|
3
|
+
* A StatePartCollection is a collection of StateParts.
|
|
4
|
+
* It can be used for expressing interest in a certain set of StateParts.
|
|
5
|
+
*/
|
|
6
|
+
export declare class StatePartCollection<StatePartNameType, T> extends StatePart<StatePartNameType, T> {
|
|
7
|
+
constructor(nameArg: StatePartNameType);
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StatePartCollection = void 0;
|
|
4
|
+
const smartstate_classes_statepart_1 = require("./smartstate.classes.statepart");
|
|
5
|
+
/**
|
|
6
|
+
* A StatePartCollection is a collection of StateParts.
|
|
7
|
+
* It can be used for expressing interest in a certain set of StateParts.
|
|
8
|
+
*/
|
|
9
|
+
class StatePartCollection extends smartstate_classes_statepart_1.StatePart {
|
|
10
|
+
constructor(nameArg) {
|
|
11
|
+
super(nameArg);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.StatePartCollection = StatePartCollection;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZWNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUZBQTJEO0FBRTNEOzs7R0FHRztBQUNILE1BQWEsbUJBQTBDLFNBQVEsd0NBQStCO0lBQzVGLFlBQVksT0FBMEI7UUFDcEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQUpELGtEQUlDIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State observable observes a StatePart and notifies everyone interested
|
|
3
|
+
*/
|
|
4
|
+
export declare class StateObservable {
|
|
5
|
+
/**
|
|
6
|
+
* creates an observable from a StateCollection
|
|
7
|
+
*/
|
|
8
|
+
static fromStatePartCollection(filterArg?: () => any): void;
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StateObservable = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* State observable observes a StatePart and notifies everyone interested
|
|
6
|
+
*/
|
|
7
|
+
class StateObservable {
|
|
8
|
+
/**
|
|
9
|
+
* creates an observable from a StateCollection
|
|
10
|
+
*/
|
|
11
|
+
static fromStatePartCollection(filterArg) { }
|
|
12
|
+
constructor() { }
|
|
13
|
+
}
|
|
14
|
+
exports.StateObservable = StateObservable;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlb2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZW9ic2VydmFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFDMUI7O09BRUc7SUFDSSxNQUFNLENBQUMsdUJBQXVCLENBQUMsU0FBcUIsSUFBRyxDQUFDO0lBRS9ELGdCQUFlLENBQUM7Q0FDakI7QUFQRCwwQ0FPQyJ9
|
|
@@ -5,7 +5,12 @@ export declare class StatePart<TStatePartName, TStatePayload> {
|
|
|
5
5
|
state: plugins.smartrx.rxjs.Subject<TStatePayload>;
|
|
6
6
|
stateStore: TStatePayload;
|
|
7
7
|
private cumulativeDeferred;
|
|
8
|
-
|
|
8
|
+
private webStore;
|
|
9
|
+
constructor(nameArg: TStatePartName, webStoreOptions?: plugins.webstore.IWebStoreOptions);
|
|
10
|
+
/**
|
|
11
|
+
* initializes the webstore
|
|
12
|
+
*/
|
|
13
|
+
private initWebStore;
|
|
9
14
|
/**
|
|
10
15
|
* gets the state from the state store
|
|
11
16
|
*/
|
|
@@ -14,7 +19,7 @@ export declare class StatePart<TStatePartName, TStatePayload> {
|
|
|
14
19
|
* sets the stateStore to the new state
|
|
15
20
|
* @param newStateArg
|
|
16
21
|
*/
|
|
17
|
-
setState(newStateArg: TStatePayload): void
|
|
22
|
+
setState(newStateArg: TStatePayload): Promise<void>;
|
|
18
23
|
/**
|
|
19
24
|
* notifies of a change on the state
|
|
20
25
|
*/
|
|
@@ -35,7 +40,7 @@ export declare class StatePart<TStatePartName, TStatePayload> {
|
|
|
35
40
|
/**
|
|
36
41
|
* dispatches an action on the statepart level
|
|
37
42
|
*/
|
|
38
|
-
dispatchAction<T>(stateAction: StateAction<TStatePayload, T>, actionPayload: T): Promise<
|
|
43
|
+
dispatchAction<T>(stateAction: StateAction<TStatePayload, T>, actionPayload: T): Promise<TStatePayload>;
|
|
39
44
|
/**
|
|
40
45
|
* waits until a certain part of the state becomes available
|
|
41
46
|
* @param selectorFn
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
import * as plugins from './smartstate.plugins.js';
|
|
2
2
|
import { StateAction } from './smartstate.classes.stateaction.js';
|
|
3
3
|
export class StatePart {
|
|
4
|
-
constructor(nameArg) {
|
|
4
|
+
constructor(nameArg, webStoreOptions) {
|
|
5
5
|
this.state = new plugins.smartrx.rxjs.Subject();
|
|
6
6
|
this.cumulativeDeferred = plugins.smartpromise.cumulativeDefer();
|
|
7
|
+
this.webStore = null; // Add WebStore instance
|
|
7
8
|
this.name = nameArg;
|
|
9
|
+
// Initialize WebStore if webStoreOptions are provided
|
|
10
|
+
if (webStoreOptions) {
|
|
11
|
+
this.webStore = new plugins.webstore.WebStore(webStoreOptions);
|
|
12
|
+
this.initWebStore();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* initializes the webstore
|
|
17
|
+
*/
|
|
18
|
+
async initWebStore() {
|
|
19
|
+
if (this.webStore) {
|
|
20
|
+
await this.webStore.init();
|
|
21
|
+
const storedState = await this.webStore.get(String(this.name));
|
|
22
|
+
if (storedState) {
|
|
23
|
+
this.stateStore = storedState;
|
|
24
|
+
this.notifyChange();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
8
27
|
}
|
|
9
28
|
/**
|
|
10
29
|
* gets the state from the state store
|
|
@@ -16,9 +35,13 @@ export class StatePart {
|
|
|
16
35
|
* sets the stateStore to the new state
|
|
17
36
|
* @param newStateArg
|
|
18
37
|
*/
|
|
19
|
-
setState(newStateArg) {
|
|
38
|
+
async setState(newStateArg) {
|
|
20
39
|
this.stateStore = newStateArg;
|
|
21
40
|
this.notifyChange();
|
|
41
|
+
// Save state to WebStore if initialized
|
|
42
|
+
if (this.webStore) {
|
|
43
|
+
await this.webStore.set(String(this.name), newStateArg);
|
|
44
|
+
}
|
|
22
45
|
}
|
|
23
46
|
/**
|
|
24
47
|
* notifies of a change on the state
|
|
@@ -73,7 +96,8 @@ export class StatePart {
|
|
|
73
96
|
async dispatchAction(stateAction, actionPayload) {
|
|
74
97
|
await this.cumulativeDeferred.promise;
|
|
75
98
|
const newState = await stateAction.actionDef(this, actionPayload);
|
|
76
|
-
this.setState(newState);
|
|
99
|
+
await this.setState(newState);
|
|
100
|
+
return this.getState();
|
|
77
101
|
}
|
|
78
102
|
/**
|
|
79
103
|
* waits until a certain part of the state becomes available
|
|
@@ -100,4 +124,4 @@ export class StatePart {
|
|
|
100
124
|
this.setState(await resultPromise);
|
|
101
125
|
}
|
|
102
126
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlcGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxTQUFTO0lBUXBCLFlBQVksT0FBdUIsRUFBRSxlQUFtRDtRQU5qRixVQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQWlCLENBQUM7UUFFekQsdUJBQWtCLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUU1RCxhQUFRLEdBQW9ELElBQUksQ0FBQyxDQUFDLHdCQUF3QjtRQUdoRyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUVwQixzREFBc0Q7UUFDdEQsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFnQixlQUFlLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsWUFBWTtRQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO2dCQUM5QixJQUFJ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
|
|
@@ -2,4 +2,5 @@ import * as isohash from '@push.rocks/isohash';
|
|
|
2
2
|
import * as smartjson from '@push.rocks/smartjson';
|
|
3
3
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
4
4
|
import * as smartrx from '@push.rocks/smartrx';
|
|
5
|
-
|
|
5
|
+
import * as webstore from '@push.rocks/webstore';
|
|
6
|
+
export { isohash, smartjson, smartpromise, smartrx, webstore };
|
|
@@ -2,5 +2,6 @@ import * as isohash from '@push.rocks/isohash';
|
|
|
2
2
|
import * as smartjson from '@push.rocks/smartjson';
|
|
3
3
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
4
4
|
import * as smartrx from '@push.rocks/smartrx';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import * as webstore from '@push.rocks/webstore';
|
|
6
|
+
export { isohash, smartjson, smartpromise, smartrx, webstore };
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzdGF0ZS5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartstate",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.11",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "a package that handles state in a good way",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -19,14 +19,15 @@
|
|
|
19
19
|
"@git.zone/tsrun": "^1.2.46",
|
|
20
20
|
"@git.zone/tstest": "^1.0.81",
|
|
21
21
|
"@push.rocks/tapbundle": "^5.0.15",
|
|
22
|
-
"@types/node": "^20.
|
|
22
|
+
"@types/node": "^20.8.0"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@push.rocks/isohash": "^2.0.1",
|
|
26
26
|
"@push.rocks/lik": "^6.0.5",
|
|
27
27
|
"@push.rocks/smartjson": "^5.0.10",
|
|
28
28
|
"@push.rocks/smartpromise": "^4.0.3",
|
|
29
|
-
"@push.rocks/smartrx": "^3.0.6"
|
|
29
|
+
"@push.rocks/smartrx": "^3.0.6",
|
|
30
|
+
"@push.rocks/webstore": "^2.0.13"
|
|
30
31
|
},
|
|
31
32
|
"files": [
|
|
32
33
|
"ts/**/*",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -21,7 +21,7 @@ export class Smartstate<StatePartNameType> {
|
|
|
21
21
|
public getStatePart<PayloadType>(
|
|
22
22
|
statePartNameArg: string & StatePartNameType,
|
|
23
23
|
initialArg?: PayloadType,
|
|
24
|
-
initMode?: 'soft' | 'mandatory' | 'force'
|
|
24
|
+
initMode?: 'soft' | 'mandatory' | 'force' | 'persistent'
|
|
25
25
|
): StatePart<StatePartNameType, PayloadType> {
|
|
26
26
|
if (this.statePartMap[statePartNameArg as any]) {
|
|
27
27
|
if (initialArg && (!initMode || initMode !== 'soft')) {
|
|
@@ -7,8 +7,30 @@ export class StatePart<TStatePartName, TStatePayload> {
|
|
|
7
7
|
public stateStore: TStatePayload;
|
|
8
8
|
private cumulativeDeferred = plugins.smartpromise.cumulativeDefer();
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
private webStore: plugins.webstore.WebStore<TStatePayload> | null = null; // Add WebStore instance
|
|
11
|
+
|
|
12
|
+
constructor(nameArg: TStatePartName, webStoreOptions?: plugins.webstore.IWebStoreOptions) {
|
|
11
13
|
this.name = nameArg;
|
|
14
|
+
|
|
15
|
+
// Initialize WebStore if webStoreOptions are provided
|
|
16
|
+
if (webStoreOptions) {
|
|
17
|
+
this.webStore = new plugins.webstore.WebStore<TStatePayload>(webStoreOptions);
|
|
18
|
+
this.initWebStore();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* initializes the webstore
|
|
24
|
+
*/
|
|
25
|
+
private async initWebStore() {
|
|
26
|
+
if (this.webStore) {
|
|
27
|
+
await this.webStore.init();
|
|
28
|
+
const storedState = await this.webStore.get(String(this.name));
|
|
29
|
+
if (storedState) {
|
|
30
|
+
this.stateStore = storedState;
|
|
31
|
+
this.notifyChange();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
12
34
|
}
|
|
13
35
|
|
|
14
36
|
/**
|
|
@@ -22,9 +44,14 @@ export class StatePart<TStatePartName, TStatePayload> {
|
|
|
22
44
|
* sets the stateStore to the new state
|
|
23
45
|
* @param newStateArg
|
|
24
46
|
*/
|
|
25
|
-
public setState(newStateArg: TStatePayload) {
|
|
47
|
+
public async setState(newStateArg: TStatePayload) {
|
|
26
48
|
this.stateStore = newStateArg;
|
|
27
49
|
this.notifyChange();
|
|
50
|
+
|
|
51
|
+
// Save state to WebStore if initialized
|
|
52
|
+
if (this.webStore) {
|
|
53
|
+
await this.webStore.set(String(this.name), newStateArg);
|
|
54
|
+
}
|
|
28
55
|
}
|
|
29
56
|
|
|
30
57
|
/**
|
|
@@ -89,10 +116,11 @@ export class StatePart<TStatePartName, TStatePayload> {
|
|
|
89
116
|
/**
|
|
90
117
|
* dispatches an action on the statepart level
|
|
91
118
|
*/
|
|
92
|
-
public async dispatchAction<T>(stateAction: StateAction<TStatePayload, T>, actionPayload: T) {
|
|
119
|
+
public async dispatchAction<T>(stateAction: StateAction<TStatePayload, T>, actionPayload: T): Promise<TStatePayload> {
|
|
93
120
|
await this.cumulativeDeferred.promise;
|
|
94
121
|
const newState = await stateAction.actionDef(this, actionPayload);
|
|
95
|
-
this.setState(newState);
|
|
122
|
+
await this.setState(newState);
|
|
123
|
+
return this.getState();
|
|
96
124
|
}
|
|
97
125
|
|
|
98
126
|
/**
|
package/ts/smartstate.plugins.ts
CHANGED
|
@@ -2,5 +2,6 @@ import * as isohash from '@push.rocks/isohash';
|
|
|
2
2
|
import * as smartjson from '@push.rocks/smartjson';
|
|
3
3
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
4
4
|
import * as smartrx from '@push.rocks/smartrx';
|
|
5
|
+
import * as webstore from '@push.rocks/webstore';
|
|
5
6
|
|
|
6
|
-
export { isohash, smartjson, smartpromise, smartrx };
|
|
7
|
+
export { isohash, smartjson, smartpromise, smartrx, webstore };
|