@bemedev/app-reactjs 2.0.0 → 2.5.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/README.md +4 -4
- package/lib/types.d.ts +4 -2
- package/lib/types.d.ts.map +1 -1
- package/lib/useCan.cjs.map +1 -1
- package/lib/useCan.d.ts.map +1 -1
- package/lib/useCan.js.map +1 -1
- package/lib/useIsInside.cjs +1 -3
- package/lib/useIsInside.cjs.map +1 -1
- package/lib/useIsInside.d.ts.map +1 -1
- package/lib/useIsInside.js +1 -3
- package/lib/useIsInside.js.map +1 -1
- package/lib/useService.cjs +5 -3
- package/lib/useService.cjs.map +1 -1
- package/lib/useService.d.ts +4 -4
- package/lib/useService.d.ts.map +1 -1
- package/lib/useService.js +5 -3
- package/lib/useService.js.map +1 -1
- package/lib/useState.cjs +3 -7
- package/lib/useState.cjs.map +1 -1
- package/lib/useState.d.ts +3 -3
- package/lib/useState.d.ts.map +1 -1
- package/lib/useState.js +3 -7
- package/lib/useState.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -81,10 +81,10 @@ state location checks.
|
|
|
81
81
|
Creates a React state hook that updates whenever the interpreter transitions, using
|
|
82
82
|
deep comparison to prevent unnecessary renders.
|
|
83
83
|
|
|
84
|
-
| Parameter | Type
|
|
85
|
-
| --------- |
|
|
86
|
-
| `service` | `Interpreter`
|
|
87
|
-
| `options` | `
|
|
84
|
+
| Parameter | Type | Description |
|
|
85
|
+
| --------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
86
|
+
| `service` | `Interpreter` | The `@bemedev/app` interpreter service instance. |
|
|
87
|
+
| `options` | `UseStateOptions` | Optional object containing `selector`, `equals`, and/or `stateEquals` custom `equality` comparator functions (`Dequal_F`). |
|
|
88
88
|
|
|
89
89
|
Returns the selected state or slice.
|
|
90
90
|
|
package/lib/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EventObject, State, PrimitiveObject } from '@bemedev/app';
|
|
2
|
+
import type { Dequal_F } from '@bemedev/app/types';
|
|
2
3
|
/**
|
|
3
4
|
* Options for configuring the `useService` hook.
|
|
4
5
|
*
|
|
@@ -10,8 +11,9 @@ import type { EventObject, State, PrimitiveObject } from '@bemedev/app';
|
|
|
10
11
|
* @property selector - Optional selector function to project the state into a sub-state.
|
|
11
12
|
* @property equals - Optional equality comparator function to compare previous and next selected state.
|
|
12
13
|
*/
|
|
13
|
-
export type
|
|
14
|
+
export type UseStateOptions<Tc extends PrimitiveObject, Ta extends string, Eo extends EventObject, T = State<Eo, Tc, Ta>> = {
|
|
14
15
|
selector?: (state: State<Eo, Tc, Ta>) => T;
|
|
15
|
-
equals?:
|
|
16
|
+
equals?: Dequal_F<T>;
|
|
17
|
+
stateEquals?: Dequal_F<State<Eo, Tc, Ta>>;
|
|
16
18
|
};
|
|
17
19
|
//# sourceMappingURL=types.d.ts.map
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,CACzB,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,MAAM,EACjB,EAAE,SAAS,WAAW,EACtB,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IACnB;IACF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC3C,CAAC"}
|
package/lib/useCan.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCan.cjs","names":["useSync","deepEqual","identity","expandFn"],"sources":["../src/useCan.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for querying event capabilities from a service.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe`, `state`, and `canEvents`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param service.canEvents - Function checking if event types can be accepted.\n *\n * @returns Object helper with `or` and `and` methods to check event availability.\n *\n * @see {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useCan<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: {\n subscribe: AddSubscriber_F<Tc, Ta, Eo>;\n state: State<Eo, Tc, Ta>;\n canEvents: (...events: Eo['type'][]) => boolean;\n}) {\n const dispatch =\n (matcher: 'some' | 'every') =>\n (...events: Eo['type'][]) => {\n const selector = () => events[matcher](event => service.canEvents(event));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) => deepEqual(first.value, next.value),\n firstTime: true,\n });\n return unsubscribe;\n },\n selector,\n selector,\n identity,\n );\n };\n\n const or = dispatch('some');\n const and = dispatch('every');\n const out = expandFn(and, { or, and });\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useCan.cjs","names":["useSync","deepEqual","identity","expandFn"],"sources":["../src/useCan.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\n\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for querying event capabilities from a service.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe`, `state`, and `canEvents`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param service.canEvents - Function checking if event types can be accepted.\n *\n * @returns Object helper with `or` and `and` methods to check event availability.\n *\n * @see {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useCan<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: {\n subscribe: AddSubscriber_F<Tc, Ta, Eo>;\n state: State<Eo, Tc, Ta>;\n canEvents: (...events: Eo['type'][]) => boolean;\n}) {\n const dispatch =\n (matcher: 'some' | 'every') =>\n (...events: Eo['type'][]) => {\n const selector = () => events[matcher](event => service.canEvents(event));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) => deepEqual(first.value, next.value),\n firstTime: true,\n });\n return unsubscribe;\n },\n selector,\n selector,\n identity,\n );\n };\n\n const or = dispatch('some');\n const and = dispatch('every');\n const out = expandFn(and, { or, and });\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,OAId,SAIC;CACD,MAAM,YACH,aACA,GAAG,WAAyB;EAC3B,MAAM,iBAAiB,OAAO,QAAQ,EAAC,UAAS,QAAQ,UAAU,KAAK,CAAC;EACxE,QAAA,GAAOA,oBAAAA,QAAAA,EACL,aAAY;GACV,MAAM,EAAE,gBAAgB,QAAQ,UAAU,UAAU;IAClD,SAAS,OAAO,UAAA,GAASC,mBAAAA,UAAAA,CAAU,MAAM,OAAO,KAAK,KAAK;IAC1D,WAAW;GACb,CAAC;GACD,OAAO;EACT,GACA,UACA,UACAC,mBAAAA,QACF;CACF;CAEF,MAAM,KAAK,SAAS,MAAM;CAC1B,MAAM,MAAM,SAAS,OAAO;CAE5B,QAAA,GADYC,qBAAAA,SAAAA,CAAS,KAAK;EAAE;EAAI;CAAI,CAC3B;AACX"}
|
package/lib/useCan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCan.d.ts","sourceRoot":"","sources":["../src/useCan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"useCan.d.ts","sourceRoot":"","sources":["../src/useCan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AAMtB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CACpB,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,MAAM,EACjB,EAAE,SAAS,WAAW,EACtB,OAAO,EAAE;IACT,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzB,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC;CACjD,sDAGe,EAAE,CAAC,MAAM,CAAC,EAAE;6BAAZ,EAAE,CAAC,MAAM,CAAC,EAAE;8BAAZ,EAAE,CAAC,MAAM,CAAC,EAAE;GAoB3B"}
|
package/lib/useCan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCan.js","names":[],"sources":["../src/useCan.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for querying event capabilities from a service.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe`, `state`, and `canEvents`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param service.canEvents - Function checking if event types can be accepted.\n *\n * @returns Object helper with `or` and `and` methods to check event availability.\n *\n * @see {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useCan<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: {\n subscribe: AddSubscriber_F<Tc, Ta, Eo>;\n state: State<Eo, Tc, Ta>;\n canEvents: (...events: Eo['type'][]) => boolean;\n}) {\n const dispatch =\n (matcher: 'some' | 'every') =>\n (...events: Eo['type'][]) => {\n const selector = () => events[matcher](event => service.canEvents(event));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) => deepEqual(first.value, next.value),\n firstTime: true,\n });\n return unsubscribe;\n },\n selector,\n selector,\n identity,\n );\n };\n\n const or = dispatch('some');\n const and = dispatch('every');\n const out = expandFn(and, { or, and });\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useCan.js","names":[],"sources":["../src/useCan.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\n\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for querying event capabilities from a service.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe`, `state`, and `canEvents`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param service.canEvents - Function checking if event types can be accepted.\n *\n * @returns Object helper with `or` and `and` methods to check event availability.\n *\n * @see {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useCan<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: {\n subscribe: AddSubscriber_F<Tc, Ta, Eo>;\n state: State<Eo, Tc, Ta>;\n canEvents: (...events: Eo['type'][]) => boolean;\n}) {\n const dispatch =\n (matcher: 'some' | 'every') =>\n (...events: Eo['type'][]) => {\n const selector = () => events[matcher](event => service.canEvents(event));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) => deepEqual(first.value, next.value),\n firstTime: true,\n });\n return unsubscribe;\n },\n selector,\n selector,\n identity,\n );\n };\n\n const or = dispatch('some');\n const and = dispatch('every');\n const out = expandFn(and, { or, and });\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,OAId,SAIC;CACD,MAAM,YACH,aACA,GAAG,WAAyB;EAC3B,MAAM,iBAAiB,OAAO,QAAQ,EAAC,UAAS,QAAQ,UAAU,KAAK,CAAC;EACxE,OAAO,SACL,aAAY;GACV,MAAM,EAAE,gBAAgB,QAAQ,UAAU,UAAU;IAClD,SAAS,OAAO,SAAS,UAAU,MAAM,OAAO,KAAK,KAAK;IAC1D,WAAW;GACb,CAAC;GACD,OAAO;EACT,GACA,UACA,UACA,QACF;CACF;CAEF,MAAM,KAAK,SAAS,MAAM;CAC1B,MAAM,MAAM,SAAS,OAAO;CAE5B,OADY,SAAS,KAAK;EAAE;EAAI;CAAI,CAC3B;AACX"}
|
package/lib/useIsInside.cjs
CHANGED
|
@@ -27,9 +27,7 @@ function useIsInside(service) {
|
|
|
27
27
|
const selector = () => states[matcher]((state) => selector1(service.state.value).includes(state));
|
|
28
28
|
return (0, _bemedev_react_sync.useSync)((listener) => {
|
|
29
29
|
const { unsubscribe } = service.subscribe(listener, {
|
|
30
|
-
equals: (first, next) =>
|
|
31
|
-
return (0, _bemedev_app_utils.deepEqual)(first.value, next.value);
|
|
32
|
-
},
|
|
30
|
+
equals: (first, next) => (0, _bemedev_app_utils.deepEqual)(first.value, next.value),
|
|
33
31
|
firstTime: true
|
|
34
32
|
});
|
|
35
33
|
return unsubscribe;
|
package/lib/useIsInside.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsInside.cjs","names":["decomposeSV","useSync","deepEqual","identity","expandFn"],"sources":["../src/useIsInside.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n StateValue,\n} from '@bemedev/app';\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { decomposeSV, deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for checking active state hierarchy.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe` and `state`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n *\n * @returns Object helper with `or` and `and` methods to check state hierarchy.\n *\n * @see {@linkcode decomposeSV}, {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useIsInside<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: { subscribe: AddSubscriber_F<Tc, Ta, Eo>; state: State<Eo, Tc, Ta> }) {\n const selector1 = (value: StateValue) => {\n return decomposeSV(value);\n };\n\n const dispatch = (matcher: 'some' | 'every') => {\n return (...states: string[]) => {\n const selector = () =>\n states[matcher](state => selector1(service.state.value).includes(state));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) =>
|
|
1
|
+
{"version":3,"file":"useIsInside.cjs","names":["decomposeSV","useSync","deepEqual","identity","expandFn"],"sources":["../src/useIsInside.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n StateValue,\n} from '@bemedev/app';\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { decomposeSV, deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for checking active state hierarchy.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe` and `state`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n *\n * @returns Object helper with `or` and `and` methods to check state hierarchy.\n *\n * @see {@linkcode decomposeSV}, {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useIsInside<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: { subscribe: AddSubscriber_F<Tc, Ta, Eo>; state: State<Eo, Tc, Ta> }) {\n const selector1 = (value: StateValue) => {\n return decomposeSV(value);\n };\n\n const dispatch = (matcher: 'some' | 'every') => {\n return (...states: string[]) => {\n const selector = () =>\n states[matcher](state => selector1(service.state.value).includes(state));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) => deepEqual(first.value, next.value),\n firstTime: true,\n });\n\n return unsubscribe;\n },\n selector,\n selector,\n identity,\n );\n };\n };\n\n const or = dispatch('some');\n const and = dispatch('every');\n const out = expandFn(and, { or, and });\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,YAId,SAA+E;CAC/E,MAAM,aAAa,UAAsB;EACvC,QAAA,GAAOA,mBAAAA,YAAAA,CAAY,KAAK;CAC1B;CAEA,MAAM,YAAY,YAA8B;EAC9C,QAAQ,GAAG,WAAqB;GAC9B,MAAM,iBACJ,OAAO,QAAQ,EAAC,UAAS,UAAU,QAAQ,MAAM,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC;GACzE,QAAA,GAAOC,oBAAAA,QAAAA,EACL,aAAY;IACV,MAAM,EAAE,gBAAgB,QAAQ,UAAU,UAAU;KAClD,SAAS,OAAO,UAAA,GAASC,mBAAAA,UAAAA,CAAU,MAAM,OAAO,KAAK,KAAK;KAC1D,WAAW;IACb,CAAC;IAED,OAAO;GACT,GACA,UACA,UACAC,mBAAAA,QACF;EACF;CACF;CAEA,MAAM,KAAK,SAAS,MAAM;CAC1B,MAAM,MAAM,SAAS,OAAO;CAE5B,QAAA,GADYC,qBAAAA,SAAAA,CAAS,KAAK;EAAE;EAAI;CAAI,CAC3B;AACX"}
|
package/lib/useIsInside.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsInside.d.ts","sourceRoot":"","sources":["../src/useIsInside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,KAAK,EAEN,MAAM,cAAc,CAAC;AAKtB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,MAAM,EACjB,EAAE,SAAS,WAAW,EACtB,OAAO,EAAE;IAAE,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CAAE,sDAMxD,MAAM,EAAE;6BAAR,MAAM,EAAE;8BAAR,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"useIsInside.d.ts","sourceRoot":"","sources":["../src/useIsInside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,KAAK,EAEN,MAAM,cAAc,CAAC;AAKtB;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,MAAM,EACjB,EAAE,SAAS,WAAW,EACtB,OAAO,EAAE;IAAE,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CAAE,sDAMxD,MAAM,EAAE;6BAAR,MAAM,EAAE;8BAAR,MAAM,EAAE;GAuB9B"}
|
package/lib/useIsInside.js
CHANGED
|
@@ -26,9 +26,7 @@ function useIsInside(service) {
|
|
|
26
26
|
const selector = () => states[matcher]((state) => selector1(service.state.value).includes(state));
|
|
27
27
|
return useSync((listener) => {
|
|
28
28
|
const { unsubscribe } = service.subscribe(listener, {
|
|
29
|
-
equals: (first, next) =>
|
|
30
|
-
return deepEqual(first.value, next.value);
|
|
31
|
-
},
|
|
29
|
+
equals: (first, next) => deepEqual(first.value, next.value),
|
|
32
30
|
firstTime: true
|
|
33
31
|
});
|
|
34
32
|
return unsubscribe;
|
package/lib/useIsInside.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIsInside.js","names":[],"sources":["../src/useIsInside.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n StateValue,\n} from '@bemedev/app';\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { decomposeSV, deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for checking active state hierarchy.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe` and `state`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n *\n * @returns Object helper with `or` and `and` methods to check state hierarchy.\n *\n * @see {@linkcode decomposeSV}, {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useIsInside<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: { subscribe: AddSubscriber_F<Tc, Ta, Eo>; state: State<Eo, Tc, Ta> }) {\n const selector1 = (value: StateValue) => {\n return decomposeSV(value);\n };\n\n const dispatch = (matcher: 'some' | 'every') => {\n return (...states: string[]) => {\n const selector = () =>\n states[matcher](state => selector1(service.state.value).includes(state));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) =>
|
|
1
|
+
{"version":3,"file":"useIsInside.js","names":[],"sources":["../src/useIsInside.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n StateValue,\n} from '@bemedev/app';\nimport { expandFn } from '@bemedev/app/bemedev';\nimport { decomposeSV, deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\n\n/**\n * React hook that creates reactive helpers for checking active state hierarchy.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service object containing `subscribe` and `state`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n *\n * @returns Object helper with `or` and `and` methods to check state hierarchy.\n *\n * @see {@linkcode decomposeSV}, {@linkcode useSync}, {@linkcode expandFn}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useIsInside<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: { subscribe: AddSubscriber_F<Tc, Ta, Eo>; state: State<Eo, Tc, Ta> }) {\n const selector1 = (value: StateValue) => {\n return decomposeSV(value);\n };\n\n const dispatch = (matcher: 'some' | 'every') => {\n return (...states: string[]) => {\n const selector = () =>\n states[matcher](state => selector1(service.state.value).includes(state));\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: (first, next) => deepEqual(first.value, next.value),\n firstTime: true,\n });\n\n return unsubscribe;\n },\n selector,\n selector,\n identity,\n );\n };\n };\n\n const or = dispatch('some');\n const and = dispatch('every');\n const out = expandFn(and, { or, and });\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,YAId,SAA+E;CAC/E,MAAM,aAAa,UAAsB;EACvC,OAAO,YAAY,KAAK;CAC1B;CAEA,MAAM,YAAY,YAA8B;EAC9C,QAAQ,GAAG,WAAqB;GAC9B,MAAM,iBACJ,OAAO,QAAQ,EAAC,UAAS,UAAU,QAAQ,MAAM,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC;GACzE,OAAO,SACL,aAAY;IACV,MAAM,EAAE,gBAAgB,QAAQ,UAAU,UAAU;KAClD,SAAS,OAAO,SAAS,UAAU,MAAM,OAAO,KAAK,KAAK;KAC1D,WAAW;IACb,CAAC;IAED,OAAO;GACT,GACA,UACA,UACA,QACF;EACF;CACF;CAEA,MAAM,KAAK,SAAS,MAAM;CAC1B,MAAM,MAAM,SAAS,OAAO;CAE5B,OADY,SAAS,KAAK;EAAE;EAAI;CAAI,CAC3B;AACX"}
|
package/lib/useService.cjs
CHANGED
|
@@ -11,17 +11,19 @@ const require_useIsInside = require("./useIsInside.cjs");
|
|
|
11
11
|
* @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.
|
|
12
12
|
*
|
|
13
13
|
* @param service - Service instance containing `subscribe`, `state`, and `canEvents`.
|
|
14
|
-
* @param service.subscribe - Subscription function of type {@linkcode AddSubscriber_F}.
|
|
14
|
+
* @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.
|
|
15
15
|
* @param service.state - Current state of type {@linkcode State}.
|
|
16
16
|
* @param service.canEvents - Method to check event execution capability.
|
|
17
17
|
*
|
|
18
18
|
* @returns Service hooks object containing `state`, `can`, and `isInside`.
|
|
19
19
|
*
|
|
20
|
-
* @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode
|
|
20
|
+
* @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode UseStateOptions}
|
|
21
21
|
*/
|
|
22
22
|
function useService(service) {
|
|
23
23
|
return {
|
|
24
|
-
state: (options) =>
|
|
24
|
+
state: (options) => {
|
|
25
|
+
return require_useState.useState(service, options);
|
|
26
|
+
},
|
|
25
27
|
can: require_useCan.useCan(service),
|
|
26
28
|
isInside: require_useIsInside.useIsInside(service)
|
|
27
29
|
};
|
package/lib/useService.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useService.cjs","names":["useState","useCan","useIsInside"],"sources":["../src/useService.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n} from '@bemedev/app';\nimport type {
|
|
1
|
+
{"version":3,"file":"useService.cjs","names":["useState","useCan","useIsInside"],"sources":["../src/useService.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n} from '@bemedev/app';\nimport type { UseStateOptions } from './types';\nimport { useCan } from './useCan';\nimport { useIsInside } from './useIsInside';\nimport { useState } from './useState';\n/**\n * React hook that binds state management, event checking, and hierarchy querying for a service.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service instance containing `subscribe`, `state`, and `canEvents`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param service.canEvents - Method to check event execution capability.\n *\n * @returns Service hooks object containing `state`, `can`, and `isInside`.\n *\n * @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode UseStateOptions}\n */\nexport function useService<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: {\n subscribe: AddSubscriber_F<Tc, Ta, Eo>;\n state: State<Eo, Tc, Ta>;\n canEvents: (...events: Eo['type'][]) => boolean;\n}) {\n return {\n state: <T = State<Eo, Tc, Ta>>(options?: UseStateOptions<Tc, Ta, Eo, T>) => {\n return useState(service, options);\n },\n\n can: useCan(service),\n isInside: useIsInside(service),\n };\n}\n\n/**\n * Alias for function {@linkcode useService}.\n */\nexport const createHooks = useService;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,WAId,SAIC;CACD,OAAO;EACL,QAA+B,YAA6C;GAC1E,OAAOA,iBAAAA,SAAS,SAAS,OAAO;EAClC;EAEA,KAAKC,eAAAA,OAAO,OAAO;EACnB,UAAUC,oBAAAA,YAAY,OAAO;CAC/B;AACF;;;;AAKA,MAAa,cAAc"}
|
package/lib/useService.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AddSubscriber_F, EventObject, PrimitiveObject, State } from '@bemedev/app';
|
|
2
|
-
import type {
|
|
2
|
+
import type { UseStateOptions } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* React hook that binds state management, event checking, and hierarchy querying for a service.
|
|
5
5
|
*
|
|
@@ -8,20 +8,20 @@ import type { UseServiceOptions } from './types';
|
|
|
8
8
|
* @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.
|
|
9
9
|
*
|
|
10
10
|
* @param service - Service instance containing `subscribe`, `state`, and `canEvents`.
|
|
11
|
-
* @param service.subscribe - Subscription function of type {@linkcode AddSubscriber_F}.
|
|
11
|
+
* @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.
|
|
12
12
|
* @param service.state - Current state of type {@linkcode State}.
|
|
13
13
|
* @param service.canEvents - Method to check event execution capability.
|
|
14
14
|
*
|
|
15
15
|
* @returns Service hooks object containing `state`, `can`, and `isInside`.
|
|
16
16
|
*
|
|
17
|
-
* @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode
|
|
17
|
+
* @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode UseStateOptions}
|
|
18
18
|
*/
|
|
19
19
|
export declare function useService<Tc extends PrimitiveObject, Ta extends string, Eo extends EventObject>(service: {
|
|
20
20
|
subscribe: AddSubscriber_F<Tc, Ta, Eo>;
|
|
21
21
|
state: State<Eo, Tc, Ta>;
|
|
22
22
|
canEvents: (...events: Eo['type'][]) => boolean;
|
|
23
23
|
}): {
|
|
24
|
-
state: <T = State<Eo, Tc, Ta>>(options?:
|
|
24
|
+
state: <T = State<Eo, Tc, Ta>>(options?: UseStateOptions<Tc, Ta, Eo, T>) => T;
|
|
25
25
|
can: import("@bemedev/app/bemedev").FnBasic<(...events: Eo["type"][]) => boolean, {
|
|
26
26
|
readonly or: (...events: Eo["type"][]) => boolean;
|
|
27
27
|
readonly and: (...events: Eo["type"][]) => boolean;
|
package/lib/useService.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useService.d.ts","sourceRoot":"","sources":["../src/useService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,KAAK,EACN,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useService.d.ts","sourceRoot":"","sources":["../src/useService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,KAAK,EACN,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CACxB,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,MAAM,EACjB,EAAE,SAAS,WAAW,EACtB,OAAO,EAAE;IACT,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzB,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC;CACjD;YAEW,CAAC,gCAAgC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;;;;;;;;EAO1E;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,mBAAa,CAAC"}
|
package/lib/useService.js
CHANGED
|
@@ -10,17 +10,19 @@ import { useIsInside } from "./useIsInside.js";
|
|
|
10
10
|
* @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.
|
|
11
11
|
*
|
|
12
12
|
* @param service - Service instance containing `subscribe`, `state`, and `canEvents`.
|
|
13
|
-
* @param service.subscribe - Subscription function of type {@linkcode AddSubscriber_F}.
|
|
13
|
+
* @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.
|
|
14
14
|
* @param service.state - Current state of type {@linkcode State}.
|
|
15
15
|
* @param service.canEvents - Method to check event execution capability.
|
|
16
16
|
*
|
|
17
17
|
* @returns Service hooks object containing `state`, `can`, and `isInside`.
|
|
18
18
|
*
|
|
19
|
-
* @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode
|
|
19
|
+
* @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode UseStateOptions}
|
|
20
20
|
*/
|
|
21
21
|
function useService(service) {
|
|
22
22
|
return {
|
|
23
|
-
state: (options) =>
|
|
23
|
+
state: (options) => {
|
|
24
|
+
return useState(service, options);
|
|
25
|
+
},
|
|
24
26
|
can: useCan(service),
|
|
25
27
|
isInside: useIsInside(service)
|
|
26
28
|
};
|
package/lib/useService.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useService.js","names":[],"sources":["../src/useService.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n} from '@bemedev/app';\nimport type {
|
|
1
|
+
{"version":3,"file":"useService.js","names":[],"sources":["../src/useService.ts"],"sourcesContent":["import type {\n AddSubscriber_F,\n EventObject,\n PrimitiveObject,\n State,\n} from '@bemedev/app';\nimport type { UseStateOptions } from './types';\nimport { useCan } from './useCan';\nimport { useIsInside } from './useIsInside';\nimport { useState } from './useState';\n/**\n * React hook that binds state management, event checking, and hierarchy querying for a service.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n *\n * @param service - Service instance containing `subscribe`, `state`, and `canEvents`.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param service.canEvents - Method to check event execution capability.\n *\n * @returns Service hooks object containing `state`, `can`, and `isInside`.\n *\n * @see {@linkcode useState}, {@linkcode useCan}, {@linkcode useIsInside}, -- type {@linkcode UseStateOptions}\n */\nexport function useService<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n>(service: {\n subscribe: AddSubscriber_F<Tc, Ta, Eo>;\n state: State<Eo, Tc, Ta>;\n canEvents: (...events: Eo['type'][]) => boolean;\n}) {\n return {\n state: <T = State<Eo, Tc, Ta>>(options?: UseStateOptions<Tc, Ta, Eo, T>) => {\n return useState(service, options);\n },\n\n can: useCan(service),\n isInside: useIsInside(service),\n };\n}\n\n/**\n * Alias for function {@linkcode useService}.\n */\nexport const createHooks = useService;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,WAId,SAIC;CACD,OAAO;EACL,QAA+B,YAA6C;GAC1E,OAAO,SAAS,SAAS,OAAO;EAClC;EAEA,KAAK,OAAO,OAAO;EACnB,UAAU,YAAY,OAAO;CAC/B;AACF;;;;AAKA,MAAa,cAAc"}
|
package/lib/useState.cjs
CHANGED
|
@@ -13,22 +13,18 @@ let _bemedev_react_sync = require("@bemedev/react-sync");
|
|
|
13
13
|
* @param service - The service containing state and subscribe method.
|
|
14
14
|
* @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.
|
|
15
15
|
* @param service.state - Current state of type {@linkcode State}.
|
|
16
|
-
* @param options - Optional configuration options of type {@linkcode
|
|
16
|
+
* @param options - Optional configuration options of type {@linkcode UseStateOptions}.
|
|
17
17
|
*
|
|
18
18
|
* @returns The selected state of type `T`.
|
|
19
19
|
*
|
|
20
20
|
* @see {@linkcode useSync}, {@linkcode deepEqual}, {@linkcode identity}
|
|
21
21
|
*/
|
|
22
22
|
function useState(service, options) {
|
|
23
|
-
const { selector = _bemedev_app_utils.identity, equals = _bemedev_app_utils.deepEqual } = options ?? {};
|
|
23
|
+
const { selector = _bemedev_app_utils.identity, equals = _bemedev_app_utils.deepEqual, stateEquals = _bemedev_app_utils.deepEqual } = options ?? {};
|
|
24
24
|
const _selector = () => selector(service.state);
|
|
25
25
|
return (0, _bemedev_react_sync.useSync)((listener) => {
|
|
26
26
|
const { unsubscribe } = service.subscribe(listener, {
|
|
27
|
-
equals:
|
|
28
|
-
const _prev = selector(prev);
|
|
29
|
-
const _next = selector(next);
|
|
30
|
-
return equals(_prev, _next);
|
|
31
|
-
},
|
|
27
|
+
equals: stateEquals,
|
|
32
28
|
firstTime: true
|
|
33
29
|
});
|
|
34
30
|
return unsubscribe;
|
package/lib/useState.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useState.cjs","names":["identity","deepEqual","useSync"],"sources":["../src/useState.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\nimport type {
|
|
1
|
+
{"version":3,"file":"useState.cjs","names":["identity","deepEqual","useSync"],"sources":["../src/useState.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\nimport type { UseStateOptions } from './types';\n\n/**\n * A hook that creates a React state from a service with a subscribe function.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n * @template `T` - Selected state type, defaults to type {@linkcode State}<{@linkcode Eo}, {@linkcode Tc}, {@linkcode Ta}>.\n *\n * @param service - The service containing state and subscribe method.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param options - Optional configuration options of type {@linkcode UseStateOptions}.\n *\n * @returns The selected state of type `T`.\n *\n * @see {@linkcode useSync}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useState<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n T = State<Eo, Tc, Ta>,\n>(\n service: { subscribe: AddSubscriber_F<Tc, Ta, Eo>; state: State<Eo, Tc, Ta> },\n options?: UseStateOptions<Tc, Ta, Eo, T>,\n): T {\n const {\n selector = identity,\n equals = deepEqual,\n stateEquals = deepEqual,\n } = options ?? {};\n const _selector = () => selector(service.state);\n\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: stateEquals,\n firstTime: true,\n });\n\n return unsubscribe;\n },\n _selector,\n _selector,\n identity,\n equals,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,SAMd,SACA,SACG;CACH,MAAM,EACJ,WAAWA,mBAAAA,UACX,SAASC,mBAAAA,WACT,cAAcA,mBAAAA,cACZ,WAAW,CAAC;CAChB,MAAM,kBAAkB,SAAS,QAAQ,KAAK;CAE9C,QAAA,GAAOC,oBAAAA,QAAAA,EACL,aAAY;EACV,MAAM,EAAE,gBAAgB,QAAQ,UAAU,UAAU;GAClD,QAAQ;GACR,WAAW;EACb,CAAC;EAED,OAAO;CACT,GACA,WACA,WACAF,mBAAAA,UACA,MACF;AACF"}
|
package/lib/useState.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AddSubscriber_F, type EventObject, type PrimitiveObject, type State } from '@bemedev/app';
|
|
2
|
-
import type {
|
|
2
|
+
import type { UseStateOptions } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* A hook that creates a React state from a service with a subscribe function.
|
|
5
5
|
*
|
|
@@ -11,7 +11,7 @@ import type { UseServiceOptions } from './types';
|
|
|
11
11
|
* @param service - The service containing state and subscribe method.
|
|
12
12
|
* @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.
|
|
13
13
|
* @param service.state - Current state of type {@linkcode State}.
|
|
14
|
-
* @param options - Optional configuration options of type {@linkcode
|
|
14
|
+
* @param options - Optional configuration options of type {@linkcode UseStateOptions}.
|
|
15
15
|
*
|
|
16
16
|
* @returns The selected state of type `T`.
|
|
17
17
|
*
|
|
@@ -20,5 +20,5 @@ import type { UseServiceOptions } from './types';
|
|
|
20
20
|
export declare function useState<Tc extends PrimitiveObject, Ta extends string, Eo extends EventObject, T = State<Eo, Tc, Ta>>(service: {
|
|
21
21
|
subscribe: AddSubscriber_F<Tc, Ta, Eo>;
|
|
22
22
|
state: State<Eo, Tc, Ta>;
|
|
23
|
-
}, options?:
|
|
23
|
+
}, options?: UseStateOptions<Tc, Ta, Eo, T>): T;
|
|
24
24
|
//# sourceMappingURL=useState.d.ts.map
|
package/lib/useState.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useState.d.ts","sourceRoot":"","sources":["../src/useState.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useState.d.ts","sourceRoot":"","sources":["../src/useState.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,QAAQ,CACtB,EAAE,SAAS,eAAe,EAC1B,EAAE,SAAS,MAAM,EACjB,EAAE,SAAS,WAAW,EACtB,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAErB,OAAO,EAAE;IAAE,SAAS,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CAAE,EAC7E,OAAO,CAAC,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GACvC,CAAC,CAsBH"}
|
package/lib/useState.js
CHANGED
|
@@ -12,22 +12,18 @@ import { useSync } from "@bemedev/react-sync";
|
|
|
12
12
|
* @param service - The service containing state and subscribe method.
|
|
13
13
|
* @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.
|
|
14
14
|
* @param service.state - Current state of type {@linkcode State}.
|
|
15
|
-
* @param options - Optional configuration options of type {@linkcode
|
|
15
|
+
* @param options - Optional configuration options of type {@linkcode UseStateOptions}.
|
|
16
16
|
*
|
|
17
17
|
* @returns The selected state of type `T`.
|
|
18
18
|
*
|
|
19
19
|
* @see {@linkcode useSync}, {@linkcode deepEqual}, {@linkcode identity}
|
|
20
20
|
*/
|
|
21
21
|
function useState(service, options) {
|
|
22
|
-
const { selector = identity, equals = deepEqual } = options ?? {};
|
|
22
|
+
const { selector = identity, equals = deepEqual, stateEquals = deepEqual } = options ?? {};
|
|
23
23
|
const _selector = () => selector(service.state);
|
|
24
24
|
return useSync((listener) => {
|
|
25
25
|
const { unsubscribe } = service.subscribe(listener, {
|
|
26
|
-
equals:
|
|
27
|
-
const _prev = selector(prev);
|
|
28
|
-
const _next = selector(next);
|
|
29
|
-
return equals(_prev, _next);
|
|
30
|
-
},
|
|
26
|
+
equals: stateEquals,
|
|
31
27
|
firstTime: true
|
|
32
28
|
});
|
|
33
29
|
return unsubscribe;
|
package/lib/useState.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useState.js","names":[],"sources":["../src/useState.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\nimport type {
|
|
1
|
+
{"version":3,"file":"useState.js","names":[],"sources":["../src/useState.ts"],"sourcesContent":["import {\n type AddSubscriber_F,\n type EventObject,\n type PrimitiveObject,\n type State,\n} from '@bemedev/app';\nimport { deepEqual, identity } from '@bemedev/app/utils';\nimport { useSync } from '@bemedev/react-sync';\nimport type { UseStateOptions } from './types';\n\n/**\n * A hook that creates a React state from a service with a subscribe function.\n *\n * @template | {@linkcode PrimitiveObject} `Tc` - Context type extending type {@linkcode PrimitiveObject}.\n * @template `Ta` - Tag type extending `string`.\n * @template | {@linkcode EventObject} `Eo` - Event object type extending type {@linkcode EventObject}.\n * @template `T` - Selected state type, defaults to type {@linkcode State}<{@linkcode Eo}, {@linkcode Tc}, {@linkcode Ta}>.\n *\n * @param service - The service containing state and subscribe method.\n * @param service.subscribe - Subscription handler function of type {@linkcode AddSubscriber_F}.\n * @param service.state - Current state of type {@linkcode State}.\n * @param options - Optional configuration options of type {@linkcode UseStateOptions}.\n *\n * @returns The selected state of type `T`.\n *\n * @see {@linkcode useSync}, {@linkcode deepEqual}, {@linkcode identity}\n */\nexport function useState<\n Tc extends PrimitiveObject,\n Ta extends string,\n Eo extends EventObject,\n T = State<Eo, Tc, Ta>,\n>(\n service: { subscribe: AddSubscriber_F<Tc, Ta, Eo>; state: State<Eo, Tc, Ta> },\n options?: UseStateOptions<Tc, Ta, Eo, T>,\n): T {\n const {\n selector = identity,\n equals = deepEqual,\n stateEquals = deepEqual,\n } = options ?? {};\n const _selector = () => selector(service.state);\n\n return useSync(\n listener => {\n const { unsubscribe } = service.subscribe(listener, {\n equals: stateEquals,\n firstTime: true,\n });\n\n return unsubscribe;\n },\n _selector,\n _selector,\n identity,\n equals,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,SAMd,SACA,SACG;CACH,MAAM,EACJ,WAAW,UACX,SAAS,WACT,cAAc,cACZ,WAAW,CAAC;CAChB,MAAM,kBAAkB,SAAS,QAAQ,KAAK;CAE9C,OAAO,SACL,aAAY;EACV,MAAM,EAAE,gBAAgB,QAAQ,UAAU,UAAU;GAClD,QAAQ;GACR,WAAW;EACb,CAAC;EAED,OAAO;CACT,GACA,WACA,WACA,UACA,MACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bemedev/app-reactjs",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Middleware between @bemedev/app and reactjs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"app",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"@size-limit/file": "^13.0.3",
|
|
51
51
|
"@testing-library/jest-dom": "^7.0.1",
|
|
52
52
|
"@testing-library/react": "^16.3.2",
|
|
53
|
-
"@testing-library/user-event": "^14.6.
|
|
53
|
+
"@testing-library/user-event": "^14.6.6",
|
|
54
54
|
"@types/node": "^26.2.0",
|
|
55
55
|
"@types/react": "^19.2.18",
|
|
56
|
-
"@types/react-dom": "^19.2.
|
|
56
|
+
"@types/react-dom": "^19.2.5",
|
|
57
57
|
"@vitest/coverage-v8": "^4.1.11",
|
|
58
58
|
"@vitest/ui": "4.1.11",
|
|
59
59
|
"glob": "^13.0.6",
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
"tsx": "^4.23.12",
|
|
75
75
|
"typescript": "6.0.3",
|
|
76
76
|
"vitest": "^4.1.11",
|
|
77
|
-
"@bemedev/app": "^2.
|
|
78
|
-
"@bemedev/app-vitest": "^2.
|
|
77
|
+
"@bemedev/app": "^2.5.0",
|
|
78
|
+
"@bemedev/app-vitest": "^2.5.0"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
81
81
|
"react": "^19.2.8",
|
|
82
|
-
"@bemedev/app": "^2.
|
|
82
|
+
"@bemedev/app": "^2.5.0"
|
|
83
83
|
},
|
|
84
84
|
"size-limit": [
|
|
85
85
|
{
|