@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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartstate',
6
- version: '2.0.9',
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDRDQUE0QztDQUMxRCxDQUFBIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5jbGFzc2VzLnNtYXJ0c3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHN0YXRlLmNsYXNzZXMuc21hcnRzdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBR3JCO1FBRk8saUJBQVksR0FBeUQsRUFBRSxDQUFDO0lBRWhFLENBQUM7SUFFaEI7Ozs7Ozs7O09BUUc7SUFDSSxZQUFZLENBQ2pCLGdCQUE0QyxFQUM1QyxVQUF3QixFQUN4QixRQUF5QztRQUV6QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQXVCLENBQUMsRUFBRTtZQUM5QyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFBRTtnQkFDcEQsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLGdCQUFnQiw0REFBNEQsQ0FDaEYsQ0FBQzthQUNIO1lBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUE4QyxDQUFDO1NBQ3pGO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxnQkFBZ0IsNkRBQTZELENBQ2pGLENBQUM7YUFDSDtZQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBYyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZSxDQUNyQixhQUFnQyxFQUNoQyxpQkFBOEI7UUFFOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQWlDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLFFBQVEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQW9CLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDbkQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIn0=
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
- constructor(nameArg: TStatePartName);
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<void>;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlcGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxTQUFTO0lBTXBCLFlBQVksT0FBdUI7UUFKNUIsVUFBSyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFpQixDQUFDO1FBRXpELHVCQUFrQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7UUFHbEUsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxDQUFDLFdBQTBCO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2pCLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDeEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDO1FBQ0YsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxnQ0FBZ0M7WUFDckMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsZ0NBQWdDLEVBQzFFO1lBQ0EsT0FBTztTQUNS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
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
- export { isohash, smartjson, smartpromise, smartrx };
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
- export { isohash, smartjson, smartpromise, smartrx };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdGF0ZS5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzdGF0ZS5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFFL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDIn0=
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.9",
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.6.0"
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/**/*",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartstate',
6
- version: '2.0.9',
6
+ version: '2.0.11',
7
7
  description: 'a package that handles state in a good way'
8
8
  }
@@ -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
- constructor(nameArg: TStatePartName) {
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
  /**
@@ -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 };