@xstate/react 3.0.2 → 3.1.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/dist/xstate-react.umd.min.js +1 -1
- package/es/createActorContext.d.ts +13 -0
- package/es/createActorContext.js +35 -0
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/lib/createActorContext.d.ts +13 -0
- package/lib/createActorContext.js +39 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/package.json +2 -2
|
@@ -36,4 +36,4 @@ s((function(t,e){}));var S=s((function(t){t.exports=h}));
|
|
|
36
36
|
* This source code is licensed under the MIT license found in the
|
|
37
37
|
* LICENSE file in the root directory of this source tree.
|
|
38
38
|
*/
|
|
39
|
-
s((function(t,e){}));var k=s((function(t){t.exports=w})),C=e.useLayoutEffect;function P(t){var e=a.useRef();return e.current||(e.current={v:t()}),e.current.v}function R(t,e){var r=P((function(){return"function"==typeof t?t():t})),u=e.context,o=e.guards,a=e.actions,c=e.activities,s=e.services,f=e.delays;e.state;var l=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var u=0;for(r=Object.getOwnPropertySymbols(t);u<r.length;u++)e.indexOf(r[u])<0&&Object.prototype.propertyIsEnumerable.call(t,r[u])&&(n[r[u]]=t[r[u]])}return n}(e,["context","guards","actions","activities","services","delays","state"]),v=P((function(){var t={context:u,guards:o,actions:a,activities:c,services:s,delays:f},e=r.withConfig(t,(function(){return i(i({},r.context),u)}));return n.interpret(e,l)}));return C((function(){Object.assign(v.machine.options.actions,a),Object.assign(v.machine.options.guards,o),Object.assign(v.machine.options.activities,c),Object.assign(v.machine.options.services,s),Object.assign(v.machine.options.delays,f)}),[a,o,c,s,f]),v}function I(t){return t}function
|
|
39
|
+
s((function(t,e){}));var k=s((function(t){t.exports=w})),C=e.useLayoutEffect;function P(t){var e=a.useRef();return e.current||(e.current={v:t()}),e.current.v}function R(t,e){var r=P((function(){return"function"==typeof t?t():t})),u=e.context,o=e.guards,a=e.actions,c=e.activities,s=e.services,f=e.delays;e.state;var l=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var u=0;for(r=Object.getOwnPropertySymbols(t);u<r.length;u++)e.indexOf(r[u])<0&&Object.prototype.propertyIsEnumerable.call(t,r[u])&&(n[r[u]]=t[r[u]])}return n}(e,["context","guards","actions","activities","services","delays","state"]),v=P((function(){var t={context:u,guards:o,actions:a,activities:c,services:s,delays:f},e=r.withConfig(t,(function(){return i(i({},r.context),u)}));return n.interpret(e,l)}));return C((function(){Object.assign(v.machine.options.actions,a),Object.assign(v.machine.options.guards,o),Object.assign(v.machine.options.activities,c),Object.assign(v.machine.options.services,s),Object.assign(v.machine.options.delays,f)}),[a,o,c,s,f]),v}function N(t){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];var o=c(r,2),a=o[0],i=void 0===a?{}:a,s=o[1],f=R(t,i);return e.useEffect((function(){if(s){var t=f.subscribe(n.toObserver(s));return function(){t.unsubscribe()}}}),[s]),e.useEffect((function(){var t=i.state;return f.start(t?n.State.create(t):void 0),function(){f.stop(),f.status=n.InterpreterStatus.NotStarted}}),[]),f}function I(t){return t}function A(t){return 0!==t.status?t.getSnapshot():t.machine.initialState}function V(t,e){return t===e?0!==t||0!==e||1/t==1/e:t!=t&&e!=e}function M(t){return"state"in t&&"machine"in t}function _(t){return"state"in t}function q(t){return"deferred"in t}function D(t){return"getSnapshot"in t?M(t)?A(t):t.getSnapshot():_(t)?t.state:void 0}function W(t,n){void 0===n&&(n=D);var r=e.useRef(t),u=e.useRef([]),o=e.useCallback((function(e){return t.subscribe(e).unsubscribe}),[t]),a=e.useCallback((function(){return n(t)}),[t,n]),i=S.useSyncExternalStore(o,a,a),c=P((function(){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t[0],o=r.current;q(o)&&o.deferred?u.current.push(n):o.send(n)}}));return C((function(){for(r.current=t;u.current.length>0;){var e=u.current.shift();t.send(e)}}),[t]),[i,c]}var L=function(t,e){return t===e};function T(t,n,r,u){void 0===r&&(r=L);var o=e.useRef(null),a=e.useCallback((function(e){return t.subscribe(e).unsubscribe}),[t]),i=e.useCallback((function(){return u?u(t):function(t,e){if(M(t)){if(0===t.status&&e.current)return e.current;var n=A(t);return e.current=0===t.status?n:null,n}return _(t)?t.state:void 0}(t,o)}),[t,u]);return k.useSyncExternalStoreWithSelector(a,i,i,n,r)}t.createActorContext=function(t){var e=a.createContext(null),n=e.Provider;function r(e){var r=e.children,u=e.machine,o=N(void 0===u?t:u);return a.createElement(n,{value:o},r)}function u(){var t=a.useContext(e);if(!t)throw new Error('You used a hook from "'.concat(r.displayName,"\" but it's not inside a <").concat(r.displayName,"> component."));return t}return r.displayName="ActorProvider(".concat(t.id,")"),{Provider:r,useActorRef:u,useActor:function(){return W(u())},useSelector:function(t,e){return T(u(),t,e)}}},t.shallowEqual=function(t,e){if(V(t,e))return!0;if("object"!=typeof t||null===t||"object"!=typeof e||null===e)return!1;var n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(var u=0;u<n.length;u++)if(!Object.prototype.hasOwnProperty.call(e,n[u])||!V(t[n[u]],e[n[u]]))return!1;return!0},t.useActor=W,t.useInterpret=N,t.useMachine=function(t){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];var o=c(r,1),a=o[0],i=void 0===a?{}:a,s=R(t,i),f=e.useCallback((function(){return s.status===n.InterpreterStatus.NotStarted?i.state?n.State.create(i.state):s.machine.initialState:s.getSnapshot()}),[s]),l=e.useCallback((function(t,e){if(s.status===n.InterpreterStatus.NotStarted)return!0;var r=void 0===e.changed&&(Object.keys(e.children).length>0||"boolean"==typeof t.changed);return!(e.changed||r)}),[s]),v=e.useCallback((function(t){return s.subscribe(t).unsubscribe}),[s]),d=k.useSyncExternalStoreWithSelector(v,f,f,I,l);return e.useEffect((function(){var t=i.state;return s.start(t?n.State.create(t):void 0),function(){s.stop(),s.status=n.InterpreterStatus.NotStarted}}),[]),[d,s.send,s]},t.useSelector=T,t.useSpawn=function(t){return P((function(){return n.spawnBehavior(t)}))},Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useActor as useActorUnbound } from './useActor';
|
|
3
|
+
import { ActorRefFrom, AnyStateMachine, EmittedFrom } from 'xstate';
|
|
4
|
+
export declare function createActorContext<TMachine extends AnyStateMachine>(machine: TMachine): {
|
|
5
|
+
useActor: () => ReturnType<typeof useActorUnbound<ActorRefFrom<TMachine>>>;
|
|
6
|
+
useSelector: <T>(selector: (snapshot: EmittedFrom<TMachine>) => T, compare?: (a: T, b: T) => boolean) => T;
|
|
7
|
+
useActorRef: () => ActorRefFrom<TMachine>;
|
|
8
|
+
Provider: (props: {
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
machine?: TMachine | (() => TMachine);
|
|
11
|
+
}) => React.ReactElement<any, any>;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=createActorContext.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useInterpret } from './useInterpret';
|
|
3
|
+
import { useActor as useActorUnbound } from './useActor';
|
|
4
|
+
import { useSelector as useSelectorUnbound } from './useSelector';
|
|
5
|
+
export function createActorContext(machine) {
|
|
6
|
+
var ReactContext = React.createContext(null);
|
|
7
|
+
var OriginalProvider = ReactContext.Provider;
|
|
8
|
+
function Provider(_a) {
|
|
9
|
+
var children = _a.children, _b = _a.machine, providedMachine = _b === void 0 ? machine : _b;
|
|
10
|
+
var actor = useInterpret(providedMachine);
|
|
11
|
+
return React.createElement(OriginalProvider, { value: actor }, children);
|
|
12
|
+
}
|
|
13
|
+
Provider.displayName = "ActorProvider(".concat(machine.id, ")");
|
|
14
|
+
function useContext() {
|
|
15
|
+
var actor = React.useContext(ReactContext);
|
|
16
|
+
if (!actor) {
|
|
17
|
+
throw new Error("You used a hook from \"".concat(Provider.displayName, "\" but it's not inside a <").concat(Provider.displayName, "> component."));
|
|
18
|
+
}
|
|
19
|
+
return actor;
|
|
20
|
+
}
|
|
21
|
+
function useActor() {
|
|
22
|
+
var actor = useContext();
|
|
23
|
+
return useActorUnbound(actor);
|
|
24
|
+
}
|
|
25
|
+
function useSelector(selector, compare) {
|
|
26
|
+
var actor = useContext();
|
|
27
|
+
return useSelectorUnbound(actor, selector, compare);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
Provider: Provider,
|
|
31
|
+
useActorRef: useContext,
|
|
32
|
+
useActor: useActor,
|
|
33
|
+
useSelector: useSelector
|
|
34
|
+
};
|
|
35
|
+
}
|
package/es/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { useInterpret } from './useInterpret';
|
|
|
4
4
|
export { useSelector } from './useSelector';
|
|
5
5
|
export { useSpawn } from './useSpawn';
|
|
6
6
|
export { shallowEqual } from './utils';
|
|
7
|
+
export { createActorContext } from './createActorContext';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/es/index.js
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useActor as useActorUnbound } from './useActor';
|
|
3
|
+
import { ActorRefFrom, AnyStateMachine, EmittedFrom } from 'xstate';
|
|
4
|
+
export declare function createActorContext<TMachine extends AnyStateMachine>(machine: TMachine): {
|
|
5
|
+
useActor: () => ReturnType<typeof useActorUnbound<ActorRefFrom<TMachine>>>;
|
|
6
|
+
useSelector: <T>(selector: (snapshot: EmittedFrom<TMachine>) => T, compare?: (a: T, b: T) => boolean) => T;
|
|
7
|
+
useActorRef: () => ActorRefFrom<TMachine>;
|
|
8
|
+
Provider: (props: {
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
machine?: TMachine | (() => TMachine);
|
|
11
|
+
}) => React.ReactElement<any, any>;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=createActorContext.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createActorContext = void 0;
|
|
4
|
+
var React = require("react");
|
|
5
|
+
var useInterpret_1 = require("./useInterpret");
|
|
6
|
+
var useActor_1 = require("./useActor");
|
|
7
|
+
var useSelector_1 = require("./useSelector");
|
|
8
|
+
function createActorContext(machine) {
|
|
9
|
+
var ReactContext = React.createContext(null);
|
|
10
|
+
var OriginalProvider = ReactContext.Provider;
|
|
11
|
+
function Provider(_a) {
|
|
12
|
+
var children = _a.children, _b = _a.machine, providedMachine = _b === void 0 ? machine : _b;
|
|
13
|
+
var actor = (0, useInterpret_1.useInterpret)(providedMachine);
|
|
14
|
+
return React.createElement(OriginalProvider, { value: actor }, children);
|
|
15
|
+
}
|
|
16
|
+
Provider.displayName = "ActorProvider(".concat(machine.id, ")");
|
|
17
|
+
function useContext() {
|
|
18
|
+
var actor = React.useContext(ReactContext);
|
|
19
|
+
if (!actor) {
|
|
20
|
+
throw new Error("You used a hook from \"".concat(Provider.displayName, "\" but it's not inside a <").concat(Provider.displayName, "> component."));
|
|
21
|
+
}
|
|
22
|
+
return actor;
|
|
23
|
+
}
|
|
24
|
+
function useActor() {
|
|
25
|
+
var actor = useContext();
|
|
26
|
+
return (0, useActor_1.useActor)(actor);
|
|
27
|
+
}
|
|
28
|
+
function useSelector(selector, compare) {
|
|
29
|
+
var actor = useContext();
|
|
30
|
+
return (0, useSelector_1.useSelector)(actor, selector, compare);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
Provider: Provider,
|
|
34
|
+
useActorRef: useContext,
|
|
35
|
+
useActor: useActor,
|
|
36
|
+
useSelector: useSelector
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.createActorContext = createActorContext;
|
package/lib/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { useInterpret } from './useInterpret';
|
|
|
4
4
|
export { useSelector } from './useSelector';
|
|
5
5
|
export { useSpawn } from './useSpawn';
|
|
6
6
|
export { shallowEqual } from './utils';
|
|
7
|
+
export { createActorContext } from './createActorContext';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.shallowEqual = exports.useSpawn = exports.useSelector = exports.useInterpret = exports.useActor = exports.useMachine = void 0;
|
|
3
|
+
exports.createActorContext = exports.shallowEqual = exports.useSpawn = exports.useSelector = exports.useInterpret = exports.useActor = exports.useMachine = void 0;
|
|
4
4
|
var useMachine_1 = require("./useMachine");
|
|
5
5
|
Object.defineProperty(exports, "useMachine", { enumerable: true, get: function () { return useMachine_1.useMachine; } });
|
|
6
6
|
var useActor_1 = require("./useActor");
|
|
@@ -13,3 +13,5 @@ var useSpawn_1 = require("./useSpawn");
|
|
|
13
13
|
Object.defineProperty(exports, "useSpawn", { enumerable: true, get: function () { return useSpawn_1.useSpawn; } });
|
|
14
14
|
var utils_1 = require("./utils");
|
|
15
15
|
Object.defineProperty(exports, "shallowEqual", { enumerable: true, get: function () { return utils_1.shallowEqual; } });
|
|
16
|
+
var createActorContext_1 = require("./createActorContext");
|
|
17
|
+
Object.defineProperty(exports, "createActorContext", { enumerable: true, get: function () { return createActorContext_1.createActorContext; } });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xstate/react",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "XState tools for React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"state",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"@xstate/fsm": "^2.0.0",
|
|
56
56
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
|
57
|
-
"xstate": "^4.35.
|
|
57
|
+
"xstate": "^4.35.3"
|
|
58
58
|
},
|
|
59
59
|
"peerDependenciesMeta": {
|
|
60
60
|
"@xstate/fsm": {
|