@veams/status-quo 1.10.0 â 1.11.0
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/.turbo/turbo-build.log +14 -12
- package/README.md +22 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -6
- package/dist/index.js.map +1 -1
- package/dist/observable/index.d.ts +5 -0
- package/dist/observable/index.js +6 -0
- package/dist/observable/index.js.map +1 -0
- package/dist/signals/index.d.ts +5 -0
- package/dist/signals/index.js +6 -0
- package/dist/signals/index.js.map +1 -0
- package/dist/store/index.d.ts +0 -2
- package/dist/store/index.js +0 -4
- package/dist/store/index.js.map +1 -1
- package/package.json +15 -1
- package/src/index.ts +0 -6
- package/src/observable/index.ts +5 -0
- package/src/signals/index.ts +5 -0
- package/src/store/index.ts +0 -4
- package/dist/hooks/__tests__/state-provider.spec.d.ts +0 -4
- package/dist/hooks/__tests__/state-provider.spec.js +0 -179
- package/dist/hooks/__tests__/state-provider.spec.js.map +0 -1
- package/dist/hooks/__tests__/state-selector.spec.d.ts +0 -4
- package/dist/hooks/__tests__/state-selector.spec.js +0 -499
- package/dist/hooks/__tests__/state-selector.spec.js.map +0 -1
- package/dist/hooks/__tests__/state-singleton.spec.d.ts +0 -4
- package/dist/hooks/__tests__/state-singleton.spec.js +0 -96
- package/dist/hooks/__tests__/state-singleton.spec.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -6
- package/dist/hooks/index.js +0 -7
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/state-actions.d.ts +0 -2
- package/dist/hooks/state-actions.js +0 -5
- package/dist/hooks/state-actions.js.map +0 -1
- package/dist/hooks/state-factory.d.ts +0 -7
- package/dist/hooks/state-factory.js +0 -13
- package/dist/hooks/state-factory.js.map +0 -1
- package/dist/hooks/state-handler.d.ts +0 -2
- package/dist/hooks/state-handler.js +0 -9
- package/dist/hooks/state-handler.js.map +0 -1
- package/dist/hooks/state-provider.d.ts +0 -14
- package/dist/hooks/state-provider.js +0 -24
- package/dist/hooks/state-provider.js.map +0 -1
- package/dist/hooks/state-singleton.d.ts +0 -6
- package/dist/hooks/state-singleton.js +0 -7
- package/dist/hooks/state-singleton.js.map +0 -1
- package/dist/hooks/state-subscription-selector.d.ts +0 -3
- package/dist/hooks/state-subscription-selector.js +0 -63
- package/dist/hooks/state-subscription-selector.js.map +0 -1
- package/dist/hooks/state-subscription.d.ts +0 -9
- package/dist/hooks/state-subscription.js +0 -53
- package/dist/hooks/state-subscription.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
>
|
|
12
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @veams/status-quo@1.10.0 build
|
|
4
|
+
> cross-env NODE_ENV=production npm-run-all compile
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
> @veams/status-quo@1.10.0 compile
|
|
8
|
+
> npm-run-all bundle:ts
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
> @veams/status-quo@1.10.0 bundle:ts
|
|
12
|
+
> tsc --project tsconfig.json
|
|
13
|
+
|
|
14
|
+
â [1G[0Kâ [1G[0Kâ [1G[0K
|
package/README.md
CHANGED
|
@@ -105,12 +105,14 @@ setupStatusQuo({
|
|
|
105
105
|
|
|
106
106
|
StatusQuo provides three handler implementations with the same public interface:
|
|
107
107
|
|
|
108
|
-
- `NativeStateHandler` (**Zero dependency**, plain JS)
|
|
109
|
-
- `ObservableStateHandler` (RxJS-backed)
|
|
110
|
-
- `SignalStateHandler` (Signals-backed)
|
|
108
|
+
- `NativeStateHandler` (**Zero dependency**, plain JS) â `import { NativeStateHandler } from '@veams/status-quo'`
|
|
109
|
+
- `ObservableStateHandler` (RxJS-backed) â `import { ObservableStateHandler } from '@veams/status-quo/observable'`
|
|
110
|
+
- `SignalStateHandler` (Signals-backed) â `import { SignalStateHandler } from '@veams/status-quo/signals'`
|
|
111
111
|
|
|
112
112
|
All are built on `BaseStateHandler`, which provides the shared lifecycle and devtools support.
|
|
113
113
|
|
|
114
|
+
The RxJS and Signals handlers live in dedicated subpaths to avoid pulling in their peer dependencies when you are only using `NativeStateHandler`.
|
|
115
|
+
|
|
114
116
|
## Hooks
|
|
115
117
|
|
|
116
118
|
The React layer lives under `@veams/status-quo/react`.
|
|
@@ -228,6 +230,7 @@ Use only the slice you need. RxJS makes multi-source composition powerful and de
|
|
|
228
230
|
|
|
229
231
|
```ts
|
|
230
232
|
import { combineLatest } from 'rxjs';
|
|
233
|
+
import { SignalStateHandler } from '@veams/status-quo/signals';
|
|
231
234
|
|
|
232
235
|
// RxJS: combine handler streams (RxJS shines here)
|
|
233
236
|
class AppSignalStore extends SignalStateHandler<AppState, AppActions> {
|
|
@@ -254,6 +257,7 @@ class AppSignalStore extends SignalStateHandler<AppState, AppActions> {
|
|
|
254
257
|
|
|
255
258
|
// Signals: combine derived values via computed + bindSubscribable
|
|
256
259
|
import { computed } from '@preact/signals-core';
|
|
260
|
+
import { SignalStateHandler } from '@veams/status-quo/signals';
|
|
257
261
|
|
|
258
262
|
class AppSignalStore extends SignalStateHandler<AppState, AppActions> {
|
|
259
263
|
private counter = CounterSignalHandler.getInstance();
|
|
@@ -581,6 +585,8 @@ setupStatusQuo({
|
|
|
581
585
|
Override it per handler when needed:
|
|
582
586
|
|
|
583
587
|
```ts
|
|
588
|
+
import { ObservableStateHandler } from '@veams/status-quo/observable';
|
|
589
|
+
|
|
584
590
|
class CounterStore extends ObservableStateHandler<CounterState, CounterActions> {
|
|
585
591
|
constructor() {
|
|
586
592
|
super({
|
|
@@ -711,6 +717,8 @@ Notes:
|
|
|
711
717
|
|
|
712
718
|
### `ObservableStateHandler<S, A>`
|
|
713
719
|
|
|
720
|
+
Import from `@veams/status-quo/observable`. Requires `rxjs` as a peer dependency.
|
|
721
|
+
|
|
714
722
|
RxJS-backed handler. Extends `BaseStateHandler`.
|
|
715
723
|
|
|
716
724
|
Constructor:
|
|
@@ -748,6 +756,8 @@ Notes:
|
|
|
748
756
|
|
|
749
757
|
### `SignalStateHandler<S, A>`
|
|
750
758
|
|
|
759
|
+
Import from `@veams/status-quo/signals`. Requires `@preact/signals-core` as a peer dependency.
|
|
760
|
+
|
|
751
761
|
Signals-backed handler. Extends `BaseStateHandler`.
|
|
752
762
|
|
|
753
763
|
Constructor:
|
|
@@ -840,6 +850,15 @@ Lifecycle behavior:
|
|
|
840
850
|
|
|
841
851
|
## Migration
|
|
842
852
|
|
|
853
|
+
From 1.x to 2.0:
|
|
854
|
+
|
|
855
|
+
`ObservableStateHandler` and `SignalStateHandler` are no longer exported from the main entry (`@veams/status-quo`). They now live in dedicated subpaths:
|
|
856
|
+
|
|
857
|
+
1. Replace `import { ObservableStateHandler } from '@veams/status-quo'` with `import { ObservableStateHandler } from '@veams/status-quo/observable'`.
|
|
858
|
+
2. Replace `import { SignalStateHandler } from '@veams/status-quo'` with `import { SignalStateHandler } from '@veams/status-quo/signals'`.
|
|
859
|
+
|
|
860
|
+
Everything else (`NativeStateHandler`, `makeStateSingleton`, `setupStatusQuo`, all types, `@veams/status-quo/react`, `@veams/status-quo/store`) is unchanged.
|
|
861
|
+
|
|
843
862
|
From pre-1.0 releases:
|
|
844
863
|
|
|
845
864
|
1. Rename `StateHandler` -> `ObservableStateHandler`.
|
package/dist/index.d.ts
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* Exports core functionality for both store and React integration.
|
|
4
4
|
*/
|
|
5
5
|
import { setupStatusQuo } from './config/status-quo-config.js';
|
|
6
|
-
import { BaseStateHandler, makeStateSingleton, NativeStateHandler
|
|
6
|
+
import { BaseStateHandler, makeStateSingleton, NativeStateHandler } from './store/index.js';
|
|
7
7
|
import type { DevToolsOptions, GlobalDevToolsOptions, DistinctComparator, DistinctOptions, StatusQuoConfig } from './config/status-quo-config.js';
|
|
8
8
|
import type { StateSingleton, StateSingletonOptions } from './store/index.js';
|
|
9
9
|
import type { StateSubscriptionHandler } from './types/types.js';
|
|
10
10
|
/**
|
|
11
11
|
* Core state management functions and classes.
|
|
12
12
|
*/
|
|
13
|
-
export { BaseStateHandler, makeStateSingleton, NativeStateHandler,
|
|
13
|
+
export { BaseStateHandler, makeStateSingleton, NativeStateHandler, setupStatusQuo, };
|
|
14
14
|
/**
|
|
15
15
|
* Type definitions for public API.
|
|
16
16
|
*/
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// Import internal setup functions and core state handlers.
|
|
6
6
|
import { setupStatusQuo } from './config/status-quo-config.js';
|
|
7
|
-
import { BaseStateHandler, makeStateSingleton, NativeStateHandler,
|
|
7
|
+
import { BaseStateHandler, makeStateSingleton, NativeStateHandler, } from './store/index.js';
|
|
8
8
|
/**
|
|
9
9
|
* Core state management functions and classes.
|
|
10
10
|
*/
|
|
@@ -15,10 +15,6 @@ BaseStateHandler,
|
|
|
15
15
|
makeStateSingleton,
|
|
16
16
|
// Lightweight state handler using plain JavaScript.
|
|
17
17
|
NativeStateHandler,
|
|
18
|
-
// State handler powered by RxJS BehaviorSubjects.
|
|
19
|
-
ObservableStateHandler,
|
|
20
18
|
// Global configuration function for Status Quo.
|
|
21
|
-
setupStatusQuo,
|
|
22
|
-
// State handler powered by Preact Signals.
|
|
23
|
-
SignalStateHandler, };
|
|
19
|
+
setupStatusQuo, };
|
|
24
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2DAA2D;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAa1B;;GAEG;AACH,OAAO;AACL,8CAA8C;AAC9C,gBAAgB;AAChB,0DAA0D;AAC1D,kBAAkB;AAClB,oDAAoD;AACpD,kBAAkB;AAClB,gDAAgD;AAChD,cAAc,GACf,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subpath entry for the RxJS-based ObservableStateHandler.
|
|
3
|
+
* Import from '@veams/status-quo/observable' to avoid pulling rxjs into the main bundle.
|
|
4
|
+
*/
|
|
5
|
+
export { ObservableStateHandler } from '../store/observable-state-handler.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observable/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subpath entry for the Preact Signals-based SignalStateHandler.
|
|
3
|
+
* Import from '@veams/status-quo/signals' to avoid pulling @preact/signals-core into the main bundle.
|
|
4
|
+
*/
|
|
5
|
+
export { SignalStateHandler } from '../store/signal-state-handler.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC"}
|
package/dist/store/index.d.ts
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { BaseStateHandler } from './base-state-handler.js';
|
|
5
5
|
export { NativeStateHandler } from './native-state-handler.js';
|
|
6
|
-
export { ObservableStateHandler } from './observable-state-handler.js';
|
|
7
|
-
export { SignalStateHandler } from './signal-state-handler.js';
|
|
8
6
|
/**
|
|
9
7
|
* Export singleton related types and factory function.
|
|
10
8
|
*/
|
package/dist/store/index.js
CHANGED
|
@@ -5,10 +5,6 @@
|
|
|
5
5
|
export { BaseStateHandler } from './base-state-handler.js';
|
|
6
6
|
// Export the lightweight state handler using plain JavaScript.
|
|
7
7
|
export { NativeStateHandler } from './native-state-handler.js';
|
|
8
|
-
// Export the state handler powered by RxJS BehaviorSubjects.
|
|
9
|
-
export { ObservableStateHandler } from './observable-state-handler.js';
|
|
10
|
-
// Export the state handler powered by Preact Signals.
|
|
11
|
-
export { SignalStateHandler } from './signal-state-handler.js';
|
|
12
8
|
// Export the factory function to create singleton state handler instances.
|
|
13
9
|
export { makeStateSingleton } from './state-singleton.js';
|
|
14
10
|
//# sourceMappingURL=index.js.map
|
package/dist/store/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,+DAA+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yDAAyD;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,+DAA+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,2EAA2E;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veams/status-quo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "The manager to rule states in frontend.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -25,6 +25,20 @@
|
|
|
25
25
|
"default": "./dist/store/index.js"
|
|
26
26
|
},
|
|
27
27
|
"require": "./dist/store/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./observable": {
|
|
30
|
+
"import": {
|
|
31
|
+
"types": "./dist/observable/index.d.ts",
|
|
32
|
+
"default": "./dist/observable/index.js"
|
|
33
|
+
},
|
|
34
|
+
"require": "./dist/observable/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./signals": {
|
|
37
|
+
"import": {
|
|
38
|
+
"types": "./dist/signals/index.d.ts",
|
|
39
|
+
"default": "./dist/signals/index.js"
|
|
40
|
+
},
|
|
41
|
+
"require": "./dist/signals/index.js"
|
|
28
42
|
}
|
|
29
43
|
},
|
|
30
44
|
"types": "dist/index.d.ts",
|
package/src/index.ts
CHANGED
|
@@ -9,8 +9,6 @@ import {
|
|
|
9
9
|
BaseStateHandler,
|
|
10
10
|
makeStateSingleton,
|
|
11
11
|
NativeStateHandler,
|
|
12
|
-
ObservableStateHandler,
|
|
13
|
-
SignalStateHandler,
|
|
14
12
|
} from './store/index.js';
|
|
15
13
|
|
|
16
14
|
// Import necessary types for external use.
|
|
@@ -34,12 +32,8 @@ export {
|
|
|
34
32
|
makeStateSingleton,
|
|
35
33
|
// Lightweight state handler using plain JavaScript.
|
|
36
34
|
NativeStateHandler,
|
|
37
|
-
// State handler powered by RxJS BehaviorSubjects.
|
|
38
|
-
ObservableStateHandler,
|
|
39
35
|
// Global configuration function for Status Quo.
|
|
40
36
|
setupStatusQuo,
|
|
41
|
-
// State handler powered by Preact Signals.
|
|
42
|
-
SignalStateHandler,
|
|
43
37
|
};
|
|
44
38
|
|
|
45
39
|
/**
|
package/src/store/index.ts
CHANGED
|
@@ -6,10 +6,6 @@
|
|
|
6
6
|
export { BaseStateHandler } from './base-state-handler.js';
|
|
7
7
|
// Export the lightweight state handler using plain JavaScript.
|
|
8
8
|
export { NativeStateHandler } from './native-state-handler.js';
|
|
9
|
-
// Export the state handler powered by RxJS BehaviorSubjects.
|
|
10
|
-
export { ObservableStateHandler } from './observable-state-handler.js';
|
|
11
|
-
// Export the state handler powered by Preact Signals.
|
|
12
|
-
export { SignalStateHandler } from './signal-state-handler.js';
|
|
13
9
|
|
|
14
10
|
/**
|
|
15
11
|
* Export singleton related types and factory function.
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import React, { act } from 'react';
|
|
2
|
-
import { createRoot } from 'react-dom/client';
|
|
3
|
-
import { StateProvider, useProvidedStateActions, useProvidedStateHandler, useProvidedStateSubscription, } from '../state-provider.js';
|
|
4
|
-
class TestStateHandler {
|
|
5
|
-
initialState;
|
|
6
|
-
state;
|
|
7
|
-
listeners = new Set();
|
|
8
|
-
destroy = jest.fn();
|
|
9
|
-
constructor(initialState) {
|
|
10
|
-
this.initialState = initialState;
|
|
11
|
-
this.state = initialState;
|
|
12
|
-
}
|
|
13
|
-
subscribe(listener) {
|
|
14
|
-
const typedListener = listener;
|
|
15
|
-
this.listeners.add(typedListener);
|
|
16
|
-
return () => {
|
|
17
|
-
this.listeners.delete(typedListener);
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
getSnapshot = () => {
|
|
21
|
-
return this.state;
|
|
22
|
-
};
|
|
23
|
-
getInitialState = () => {
|
|
24
|
-
return this.initialState;
|
|
25
|
-
};
|
|
26
|
-
getActions = () => {
|
|
27
|
-
return {
|
|
28
|
-
increment: () => {
|
|
29
|
-
this.state = {
|
|
30
|
-
...this.state,
|
|
31
|
-
count: this.state.count + 1,
|
|
32
|
-
};
|
|
33
|
-
this.emitStateChange();
|
|
34
|
-
},
|
|
35
|
-
rename: (label) => {
|
|
36
|
-
this.state = {
|
|
37
|
-
...this.state,
|
|
38
|
-
label,
|
|
39
|
-
};
|
|
40
|
-
this.emitStateChange();
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
emitStateChange() {
|
|
45
|
-
const nextState = this.state;
|
|
46
|
-
this.listeners.forEach((listener) => listener(nextState));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function CountConsumer({ onRender }) {
|
|
50
|
-
const [count] = useProvidedStateSubscription((state) => state.count);
|
|
51
|
-
onRender(count);
|
|
52
|
-
return React.createElement("span", null, count);
|
|
53
|
-
}
|
|
54
|
-
function FullStateConsumer({ onActionsReady, onRender, }) {
|
|
55
|
-
const [state, actions] = useProvidedStateSubscription();
|
|
56
|
-
onRender(state);
|
|
57
|
-
onActionsReady(actions);
|
|
58
|
-
return React.createElement("span", null, state.label);
|
|
59
|
-
}
|
|
60
|
-
function ActionsOnlyConsumer({ onActionsReady, onRender, }) {
|
|
61
|
-
const actions = useProvidedStateActions();
|
|
62
|
-
onRender();
|
|
63
|
-
onActionsReady(actions);
|
|
64
|
-
return React.createElement("span", null, "actions-only");
|
|
65
|
-
}
|
|
66
|
-
function HandlerConsumer({ onHandlerReady, }) {
|
|
67
|
-
const handler = useProvidedStateHandler();
|
|
68
|
-
onHandlerReady(handler);
|
|
69
|
-
return React.createElement("span", null, "handler");
|
|
70
|
-
}
|
|
71
|
-
function MissingProviderConsumer() {
|
|
72
|
-
useProvidedStateActions();
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
describe('StateProvider', () => {
|
|
76
|
-
let container;
|
|
77
|
-
let root;
|
|
78
|
-
beforeAll(() => {
|
|
79
|
-
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
|
|
80
|
-
});
|
|
81
|
-
beforeEach(() => {
|
|
82
|
-
container = document.createElement('div');
|
|
83
|
-
document.body.appendChild(container);
|
|
84
|
-
root = createRoot(container);
|
|
85
|
-
});
|
|
86
|
-
afterEach(() => {
|
|
87
|
-
act(() => {
|
|
88
|
-
root.unmount();
|
|
89
|
-
});
|
|
90
|
-
container.remove();
|
|
91
|
-
});
|
|
92
|
-
afterAll(() => {
|
|
93
|
-
globalThis.IS_REACT_ACT_ENVIRONMENT = false;
|
|
94
|
-
});
|
|
95
|
-
it('should share one handler instance across the provider subtree', () => {
|
|
96
|
-
const stateHandler = new TestStateHandler({
|
|
97
|
-
count: 0,
|
|
98
|
-
label: 'Counter',
|
|
99
|
-
});
|
|
100
|
-
const countRenderSpy = jest.fn();
|
|
101
|
-
const actionsRenderSpy = jest.fn();
|
|
102
|
-
const actionsReadySpy = jest.fn();
|
|
103
|
-
const handlerReadySpy = jest.fn();
|
|
104
|
-
act(() => {
|
|
105
|
-
root.render(React.createElement(StateProvider, { instance: stateHandler },
|
|
106
|
-
React.createElement(CountConsumer, { onRender: countRenderSpy }),
|
|
107
|
-
React.createElement(ActionsOnlyConsumer, { onActionsReady: actionsReadySpy, onRender: actionsRenderSpy }),
|
|
108
|
-
React.createElement(HandlerConsumer, { onHandlerReady: handlerReadySpy })));
|
|
109
|
-
});
|
|
110
|
-
expect(countRenderSpy).toHaveBeenCalledTimes(1);
|
|
111
|
-
expect(countRenderSpy).toHaveBeenLastCalledWith(0);
|
|
112
|
-
expect(actionsRenderSpy).toHaveBeenCalledTimes(1);
|
|
113
|
-
expect(handlerReadySpy).toHaveBeenCalledWith(stateHandler);
|
|
114
|
-
const [[actions]] = actionsReadySpy.mock.calls;
|
|
115
|
-
act(() => {
|
|
116
|
-
actions.rename('Renamed');
|
|
117
|
-
});
|
|
118
|
-
expect(countRenderSpy).toHaveBeenCalledTimes(1);
|
|
119
|
-
expect(actionsRenderSpy).toHaveBeenCalledTimes(1);
|
|
120
|
-
act(() => {
|
|
121
|
-
actions.increment();
|
|
122
|
-
});
|
|
123
|
-
expect(countRenderSpy).toHaveBeenCalledTimes(2);
|
|
124
|
-
expect(countRenderSpy).toHaveBeenLastCalledWith(1);
|
|
125
|
-
expect(actionsRenderSpy).toHaveBeenCalledTimes(1);
|
|
126
|
-
});
|
|
127
|
-
it('should return the full snapshot when no selector is provided', () => {
|
|
128
|
-
const stateHandler = new TestStateHandler({
|
|
129
|
-
count: 2,
|
|
130
|
-
label: 'Counter',
|
|
131
|
-
});
|
|
132
|
-
const renderSpy = jest.fn();
|
|
133
|
-
const actionsReadySpy = jest.fn();
|
|
134
|
-
act(() => {
|
|
135
|
-
root.render(React.createElement(StateProvider, { instance: stateHandler },
|
|
136
|
-
React.createElement(FullStateConsumer, { onActionsReady: actionsReadySpy, onRender: renderSpy })));
|
|
137
|
-
});
|
|
138
|
-
expect(renderSpy).toHaveBeenCalledTimes(1);
|
|
139
|
-
expect(renderSpy).toHaveBeenLastCalledWith({ count: 2, label: 'Counter' });
|
|
140
|
-
const [[actions]] = actionsReadySpy.mock.calls;
|
|
141
|
-
act(() => {
|
|
142
|
-
actions.increment();
|
|
143
|
-
});
|
|
144
|
-
expect(renderSpy).toHaveBeenCalledTimes(2);
|
|
145
|
-
expect(renderSpy).toHaveBeenLastCalledWith({ count: 3, label: 'Counter' });
|
|
146
|
-
});
|
|
147
|
-
it('should follow a new instance when the provider instance changes', () => {
|
|
148
|
-
const firstHandler = new TestStateHandler({
|
|
149
|
-
count: 1,
|
|
150
|
-
label: 'First',
|
|
151
|
-
});
|
|
152
|
-
const secondHandler = new TestStateHandler({
|
|
153
|
-
count: 8,
|
|
154
|
-
label: 'Second',
|
|
155
|
-
});
|
|
156
|
-
const renderSpy = jest.fn();
|
|
157
|
-
act(() => {
|
|
158
|
-
root.render(React.createElement(StateProvider, { instance: firstHandler },
|
|
159
|
-
React.createElement(CountConsumer, { onRender: renderSpy })));
|
|
160
|
-
});
|
|
161
|
-
act(() => {
|
|
162
|
-
root.render(React.createElement(StateProvider, { instance: secondHandler },
|
|
163
|
-
React.createElement(CountConsumer, { onRender: renderSpy })));
|
|
164
|
-
});
|
|
165
|
-
expect(renderSpy).toHaveBeenCalledTimes(2);
|
|
166
|
-
expect(renderSpy).toHaveBeenNthCalledWith(1, 1);
|
|
167
|
-
expect(renderSpy).toHaveBeenNthCalledWith(2, 8);
|
|
168
|
-
});
|
|
169
|
-
it('should throw when provider hooks are used outside StateProvider', () => {
|
|
170
|
-
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => undefined);
|
|
171
|
-
expect(() => {
|
|
172
|
-
act(() => {
|
|
173
|
-
root.render(React.createElement(MissingProviderConsumer, null));
|
|
174
|
-
});
|
|
175
|
-
}).toThrow('No StateProvider instance found in the current React tree.');
|
|
176
|
-
consoleErrorSpy.mockRestore();
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
//# sourceMappingURL=state-provider.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-provider.spec.js","sourceRoot":"","sources":["../../../src/hooks/__tests__/state-provider.spec.tsx"],"names":[],"mappings":"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"}
|