@xstate/react 3.0.1 → 4.0.0-alpha.1

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.
Files changed (60) hide show
  1. package/{lib → dist/declarations/src}/fsm.d.ts +0 -1
  2. package/{es/index.js → dist/declarations/src/index.d.ts} +1 -1
  3. package/dist/declarations/src/shallowEqual.d.ts +1 -0
  4. package/{es → dist/declarations/src}/types.d.ts +2 -3
  5. package/dist/declarations/src/useActor.d.ts +3 -0
  6. package/{es → dist/declarations/src}/useConstant.d.ts +0 -1
  7. package/{es → dist/declarations/src}/useInterpret.d.ts +4 -5
  8. package/{es → dist/declarations/src}/useMachine.d.ts +4 -5
  9. package/dist/declarations/src/useSelector.d.ts +2 -0
  10. package/{es → dist/declarations/src}/useSpawn.d.ts +0 -1
  11. package/dist/useConstant-644f0e11.cjs.dev.js +74 -0
  12. package/dist/useConstant-94bfdbb5.esm.js +71 -0
  13. package/dist/useConstant-eeb49d3f.cjs.prod.js +17 -0
  14. package/dist/xstate-react.cjs.d.ts +1 -0
  15. package/dist/xstate-react.cjs.dev.js +291 -0
  16. package/dist/xstate-react.cjs.js +7 -0
  17. package/dist/xstate-react.cjs.prod.js +281 -0
  18. package/dist/xstate-react.esm.js +278 -0
  19. package/fsm/dist/xstate-react-fsm.cjs.d.ts +1 -0
  20. package/fsm/dist/xstate-react-fsm.cjs.dev.js +98 -0
  21. package/fsm/dist/xstate-react-fsm.cjs.js +7 -0
  22. package/fsm/dist/xstate-react-fsm.cjs.prod.js +144 -0
  23. package/fsm/dist/xstate-react-fsm.esm.js +89 -0
  24. package/fsm/package.json +3 -5
  25. package/package.json +27 -40
  26. package/dist/xstate-react-fsm.umd.min.js +0 -54
  27. package/dist/xstate-react.umd.min.js +0 -39
  28. package/es/fsm.d.ts +0 -4
  29. package/es/fsm.js +0 -82
  30. package/es/index.d.ts +0 -7
  31. package/es/types.js +0 -1
  32. package/es/useActor.d.ts +0 -9
  33. package/es/useActor.js +0 -60
  34. package/es/useConstant.js +0 -8
  35. package/es/useInterpret.js +0 -105
  36. package/es/useMachine.js +0 -69
  37. package/es/useSelector.d.ts +0 -3
  38. package/es/useSelector.js +0 -36
  39. package/es/useSpawn.js +0 -15
  40. package/es/utils.d.ts +0 -5
  41. package/es/utils.js +0 -83
  42. package/lib/fsm.js +0 -87
  43. package/lib/index.d.ts +0 -7
  44. package/lib/index.js +0 -15
  45. package/lib/types.d.ts +0 -16
  46. package/lib/types.js +0 -2
  47. package/lib/useActor.d.ts +0 -9
  48. package/lib/useActor.js +0 -65
  49. package/lib/useConstant.d.ts +0 -2
  50. package/lib/useConstant.js +0 -11
  51. package/lib/useInterpret.d.ts +0 -14
  52. package/lib/useInterpret.js +0 -110
  53. package/lib/useMachine.d.ts +0 -22
  54. package/lib/useMachine.js +0 -73
  55. package/lib/useSelector.d.ts +0 -3
  56. package/lib/useSelector.js +0 -40
  57. package/lib/useSpawn.d.ts +0 -10
  58. package/lib/useSpawn.js +0 -19
  59. package/lib/utils.d.ts +0 -5
  60. package/lib/utils.js +0 -89
@@ -1,105 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __rest = (this && this.__rest) || function (s, e) {
13
- var t = {};
14
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
- t[p] = s[p];
16
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
- t[p[i]] = s[p[i]];
20
- }
21
- return t;
22
- };
23
- var __read = (this && this.__read) || function (o, n) {
24
- var m = typeof Symbol === "function" && o[Symbol.iterator];
25
- if (!m) return o;
26
- var i = m.call(o), r, ar = [], e;
27
- try {
28
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
29
- }
30
- catch (error) { e = { error: error }; }
31
- finally {
32
- try {
33
- if (r && !r.done && (m = i["return"])) m.call(i);
34
- }
35
- finally { if (e) throw e.error; }
36
- }
37
- return ar;
38
- };
39
- import { useEffect, useState } from 'react';
40
- import useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';
41
- import { interpret, InterpreterStatus, State, toObserver } from 'xstate';
42
- import useConstant from './useConstant';
43
- export function useIdleInterpreter(getMachine, options) {
44
- var machine = useConstant(function () {
45
- return typeof getMachine === 'function' ? getMachine() : getMachine;
46
- });
47
- if (process.env.NODE_ENV !== 'production' &&
48
- typeof getMachine !== 'function') {
49
- var _a = __read(useState(machine), 1), initialMachine = _a[0];
50
- if (getMachine !== initialMachine) {
51
- console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' +
52
- 'Please make sure that you pass the same Machine as argument each time.');
53
- }
54
- }
55
- var context = options.context, guards = options.guards, actions = options.actions, activities = options.activities, services = options.services, delays = options.delays, rehydratedState = options.state, interpreterOptions = __rest(options, ["context", "guards", "actions", "activities", "services", "delays", "state"]);
56
- var service = useConstant(function () {
57
- var machineConfig = {
58
- context: context,
59
- guards: guards,
60
- actions: actions,
61
- activities: activities,
62
- services: services,
63
- delays: delays
64
- };
65
- var machineWithConfig = machine.withConfig(machineConfig, function () { return (__assign(__assign({}, machine.context), context)); });
66
- return interpret(machineWithConfig, interpreterOptions);
67
- });
68
- // Make sure options are kept updated when they change.
69
- // This mutation assignment is safe because the service instance is only used
70
- // in one place -- this hook's caller.
71
- useIsomorphicLayoutEffect(function () {
72
- Object.assign(service.machine.options.actions, actions);
73
- Object.assign(service.machine.options.guards, guards);
74
- Object.assign(service.machine.options.activities, activities);
75
- Object.assign(service.machine.options.services, services);
76
- Object.assign(service.machine.options.delays, delays);
77
- }, [actions, guards, activities, services, delays]);
78
- return service;
79
- }
80
- export function useInterpret(getMachine) {
81
- var _a = [];
82
- for (var _i = 1; _i < arguments.length; _i++) {
83
- _a[_i - 1] = arguments[_i];
84
- }
85
- var _b = __read(_a, 2), _c = _b[0], options = _c === void 0 ? {} : _c, observerOrListener = _b[1];
86
- var service = useIdleInterpreter(getMachine, options);
87
- useEffect(function () {
88
- if (!observerOrListener) {
89
- return;
90
- }
91
- var sub = service.subscribe(toObserver(observerOrListener));
92
- return function () {
93
- sub.unsubscribe();
94
- };
95
- }, [observerOrListener]);
96
- useEffect(function () {
97
- var rehydratedState = options.state;
98
- service.start(rehydratedState ? State.create(rehydratedState) : undefined);
99
- return function () {
100
- service.stop();
101
- service.status = InterpreterStatus.NotStarted;
102
- };
103
- }, []);
104
- return service;
105
- }
package/es/useMachine.js DELETED
@@ -1,69 +0,0 @@
1
- var __read = (this && this.__read) || function (o, n) {
2
- var m = typeof Symbol === "function" && o[Symbol.iterator];
3
- if (!m) return o;
4
- var i = m.call(o), r, ar = [], e;
5
- try {
6
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
- }
8
- catch (error) { e = { error: error }; }
9
- finally {
10
- try {
11
- if (r && !r.done && (m = i["return"])) m.call(i);
12
- }
13
- finally { if (e) throw e.error; }
14
- }
15
- return ar;
16
- };
17
- import { useCallback, useEffect } from 'react';
18
- import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
19
- import { InterpreterStatus, State } from 'xstate';
20
- import { useIdleInterpreter } from './useInterpret';
21
- function identity(a) {
22
- return a;
23
- }
24
- export function useMachine(getMachine) {
25
- var _a = [];
26
- for (var _i = 1; _i < arguments.length; _i++) {
27
- _a[_i - 1] = arguments[_i];
28
- }
29
- var _b = __read(_a, 1), _c = _b[0], options = _c === void 0 ? {} : _c;
30
- // using `useIdleInterpreter` allows us to subscribe to the service *before* we start it
31
- // so we don't miss any notifications
32
- var service = useIdleInterpreter(getMachine, options);
33
- var getSnapshot = useCallback(function () {
34
- if (service.status === InterpreterStatus.NotStarted) {
35
- return (options.state
36
- ? State.create(options.state)
37
- : service.machine.initialState);
38
- }
39
- return service.state;
40
- }, [service]);
41
- var isEqual = useCallback(function (prevState, nextState) {
42
- if (service.status === InterpreterStatus.NotStarted) {
43
- return true;
44
- }
45
- // Only change the current state if:
46
- // - the incoming state is the "live" initial state (since it might have new actors)
47
- // - OR the incoming state actually changed.
48
- //
49
- // The "live" initial state will have .changed === undefined.
50
- var initialStateChanged = nextState.changed === undefined &&
51
- (Object.keys(nextState.children).length > 0 ||
52
- typeof prevState.changed === 'boolean');
53
- return !(nextState.changed || initialStateChanged);
54
- }, [service]);
55
- var subscribe = useCallback(function (handleStoreChange) {
56
- var unsubscribe = service.subscribe(handleStoreChange).unsubscribe;
57
- return unsubscribe;
58
- }, [service]);
59
- var storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
60
- useEffect(function () {
61
- var rehydratedState = options.state;
62
- service.start(rehydratedState ? State.create(rehydratedState) : undefined);
63
- return function () {
64
- service.stop();
65
- service.status = InterpreterStatus.NotStarted;
66
- };
67
- }, []);
68
- return [storeSnapshot, service.send, service];
69
- }
@@ -1,3 +0,0 @@
1
- import { ActorRef, Subscribable } from 'xstate';
2
- export declare function useSelector<TActor extends ActorRef<any, any>, T, TEmitted = TActor extends Subscribable<infer Emitted> ? Emitted : never>(actor: TActor, selector: (emitted: TEmitted) => T, compare?: (a: T, b: T) => boolean, getSnapshot?: (a: TActor) => TEmitted): T;
3
- //# sourceMappingURL=useSelector.d.ts.map
package/es/useSelector.js DELETED
@@ -1,36 +0,0 @@
1
- import { useCallback, useRef } from 'react';
2
- import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
3
- import { isActorWithState } from './useActor';
4
- import { getServiceSnapshot } from './utils';
5
- function isService(actor) {
6
- return 'state' in actor && 'machine' in actor;
7
- }
8
- var defaultCompare = function (a, b) { return a === b; };
9
- var defaultGetSnapshot = function (a, initialStateCacheRef) {
10
- if (isService(a)) {
11
- // A status of 0 = interpreter not started
12
- if (a.status === 0 && initialStateCacheRef.current) {
13
- return initialStateCacheRef.current;
14
- }
15
- var snapshot = getServiceSnapshot(a);
16
- initialStateCacheRef.current = a.status === 0 ? snapshot : null;
17
- return snapshot;
18
- }
19
- return isActorWithState(a) ? a.state : undefined;
20
- };
21
- export function useSelector(actor, selector, compare, getSnapshot) {
22
- if (compare === void 0) { compare = defaultCompare; }
23
- var initialStateCacheRef = useRef(null);
24
- var subscribe = useCallback(function (handleStoreChange) {
25
- var unsubscribe = actor.subscribe(handleStoreChange).unsubscribe;
26
- return unsubscribe;
27
- }, [actor]);
28
- var boundGetSnapshot = useCallback(function () {
29
- if (getSnapshot) {
30
- return getSnapshot(actor);
31
- }
32
- return defaultGetSnapshot(actor, initialStateCacheRef);
33
- }, [actor, getSnapshot]);
34
- var selectedSnapshot = useSyncExternalStoreWithSelector(subscribe, boundGetSnapshot, boundGetSnapshot, selector, compare);
35
- return selectedSnapshot;
36
- }
package/es/useSpawn.js DELETED
@@ -1,15 +0,0 @@
1
- import { spawnBehavior } from 'xstate';
2
- import useConstant from './useConstant';
3
- /**
4
- * React hook that spawns an `ActorRef` with the specified `behavior`.
5
- * The returned `ActorRef` can be used with the `useActor(actorRef)` hook.
6
- *
7
- * @param behavior The actor behavior to spawn
8
- * @returns An ActorRef with the specified `behavior`
9
- */
10
- export function useSpawn(behavior) {
11
- var actorRef = useConstant(function () {
12
- return spawnBehavior(behavior);
13
- });
14
- return actorRef;
15
- }
package/es/utils.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import { Interpreter } from 'xstate';
2
- export declare function partition<T, A extends T, B extends T>(items: T[], predicate: (item: T) => item is A): [A[], B[]];
3
- export declare function getServiceSnapshot<TService extends Interpreter<any, any, any, any>>(service: TService): TService['state'];
4
- export declare function shallowEqual(objA: any, objB: any): boolean;
5
- //# sourceMappingURL=utils.d.ts.map
package/es/utils.js DELETED
@@ -1,83 +0,0 @@
1
- var __read = (this && this.__read) || function (o, n) {
2
- var m = typeof Symbol === "function" && o[Symbol.iterator];
3
- if (!m) return o;
4
- var i = m.call(o), r, ar = [], e;
5
- try {
6
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
- }
8
- catch (error) { e = { error: error }; }
9
- finally {
10
- try {
11
- if (r && !r.done && (m = i["return"])) m.call(i);
12
- }
13
- finally { if (e) throw e.error; }
14
- }
15
- return ar;
16
- };
17
- var __values = (this && this.__values) || function(o) {
18
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
- if (m) return m.call(o);
20
- if (o && typeof o.length === "number") return {
21
- next: function () {
22
- if (o && i >= o.length) o = void 0;
23
- return { value: o && o[i++], done: !o };
24
- }
25
- };
26
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
- };
28
- export function partition(items, predicate) {
29
- var e_1, _a;
30
- var _b = __read([[], []], 2), truthy = _b[0], falsy = _b[1];
31
- try {
32
- for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
33
- var item = items_1_1.value;
34
- if (predicate(item)) {
35
- truthy.push(item);
36
- }
37
- else {
38
- falsy.push(item);
39
- }
40
- }
41
- }
42
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
43
- finally {
44
- try {
45
- if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
46
- }
47
- finally { if (e_1) throw e_1.error; }
48
- }
49
- return [truthy, falsy];
50
- }
51
- export function getServiceSnapshot(service) {
52
- return service.status !== 0 ? service.state : service.machine.initialState;
53
- }
54
- // From https://github.com/reduxjs/react-redux/blob/master/src/utils/shallowEqual.ts
55
- function is(x, y) {
56
- if (x === y) {
57
- return x !== 0 || y !== 0 || 1 / x === 1 / y;
58
- }
59
- else {
60
- return x !== x && y !== y;
61
- }
62
- }
63
- export function shallowEqual(objA, objB) {
64
- if (is(objA, objB))
65
- return true;
66
- if (typeof objA !== 'object' ||
67
- objA === null ||
68
- typeof objB !== 'object' ||
69
- objB === null) {
70
- return false;
71
- }
72
- var keysA = Object.keys(objA);
73
- var keysB = Object.keys(objB);
74
- if (keysA.length !== keysB.length)
75
- return false;
76
- for (var i = 0; i < keysA.length; i++) {
77
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||
78
- !is(objA[keysA[i]], objB[keysA[i]])) {
79
- return false;
80
- }
81
- }
82
- return true;
83
- }
package/lib/fsm.js DELETED
@@ -1,87 +0,0 @@
1
- "use strict";
2
- var __read = (this && this.__read) || function (o, n) {
3
- var m = typeof Symbol === "function" && o[Symbol.iterator];
4
- if (!m) return o;
5
- var i = m.call(o), r, ar = [], e;
6
- try {
7
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
- }
9
- catch (error) { e = { error: error }; }
10
- finally {
11
- try {
12
- if (r && !r.done && (m = i["return"])) m.call(i);
13
- }
14
- finally { if (e) throw e.error; }
15
- }
16
- return ar;
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.useService = exports.useMachine = void 0;
20
- var fsm_1 = require("@xstate/fsm");
21
- var react_1 = require("react");
22
- var use_isomorphic_layout_effect_1 = require("use-isomorphic-layout-effect");
23
- var with_selector_1 = require("use-sync-external-store/shim/with-selector");
24
- var useConstant_1 = require("./useConstant");
25
- function identity(a) {
26
- return a;
27
- }
28
- var getServiceState = function (service) {
29
- var currentValue;
30
- service
31
- .subscribe(function (state) {
32
- currentValue = state;
33
- })
34
- .unsubscribe();
35
- return currentValue;
36
- };
37
- function useMachine(stateMachine, options) {
38
- var persistedStateRef = (0, react_1.useRef)();
39
- if (process.env.NODE_ENV !== 'production') {
40
- var _a = __read((0, react_1.useState)(stateMachine), 1), initialMachine = _a[0];
41
- if (stateMachine !== initialMachine) {
42
- console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' +
43
- 'Please make sure that you pass the same Machine as argument each time.');
44
- }
45
- }
46
- var _b = __read((0, useConstant_1.default)(function () {
47
- var queue = [];
48
- var service = (0, fsm_1.interpret)((0, fsm_1.createMachine)(stateMachine.config, options ? options : stateMachine._options));
49
- var send = service.send;
50
- service.send = function (event) {
51
- if (service.status === fsm_1.InterpreterStatus.NotStarted) {
52
- queue.push(event);
53
- return;
54
- }
55
- send(event);
56
- persistedStateRef.current = service.state;
57
- };
58
- return [service, queue];
59
- }), 2), service = _b[0], queue = _b[1];
60
- (0, use_isomorphic_layout_effect_1.default)(function () {
61
- if (options) {
62
- service._machine._options = options;
63
- }
64
- });
65
- var useServiceResult = useService(service);
66
- (0, react_1.useEffect)(function () {
67
- service.start(persistedStateRef.current);
68
- queue.forEach(service.send);
69
- persistedStateRef.current = service.state;
70
- return function () {
71
- service.stop();
72
- };
73
- }, []);
74
- return useServiceResult;
75
- }
76
- exports.useMachine = useMachine;
77
- var isEqual = function (_prevState, nextState) { return nextState.changed === false; };
78
- function useService(service) {
79
- var getSnapshot = (0, react_1.useCallback)(function () { return getServiceState(service); }, [service]);
80
- var subscribe = (0, react_1.useCallback)(function (handleStoreChange) {
81
- var unsubscribe = service.subscribe(handleStoreChange).unsubscribe;
82
- return unsubscribe;
83
- }, [service]);
84
- var storeSnapshot = (0, with_selector_1.useSyncExternalStoreWithSelector)(subscribe, getSnapshot, getSnapshot, identity, isEqual);
85
- return [storeSnapshot, service.send, service];
86
- }
87
- exports.useService = useService;
package/lib/index.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export { useMachine } from './useMachine';
2
- export { useActor } from './useActor';
3
- export { useInterpret } from './useInterpret';
4
- export { useSelector } from './useSelector';
5
- export { useSpawn } from './useSpawn';
6
- export { shallowEqual } from './utils';
7
- //# sourceMappingURL=index.d.ts.map
package/lib/index.js DELETED
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shallowEqual = exports.useSpawn = exports.useSelector = exports.useInterpret = exports.useActor = exports.useMachine = void 0;
4
- var useMachine_1 = require("./useMachine");
5
- Object.defineProperty(exports, "useMachine", { enumerable: true, get: function () { return useMachine_1.useMachine; } });
6
- var useActor_1 = require("./useActor");
7
- Object.defineProperty(exports, "useActor", { enumerable: true, get: function () { return useActor_1.useActor; } });
8
- var useInterpret_1 = require("./useInterpret");
9
- Object.defineProperty(exports, "useInterpret", { enumerable: true, get: function () { return useInterpret_1.useInterpret; } });
10
- var useSelector_1 = require("./useSelector");
11
- Object.defineProperty(exports, "useSelector", { enumerable: true, get: function () { return useSelector_1.useSelector; } });
12
- var useSpawn_1 = require("./useSpawn");
13
- Object.defineProperty(exports, "useSpawn", { enumerable: true, get: function () { return useSpawn_1.useSpawn; } });
14
- var utils_1 = require("./utils");
15
- Object.defineProperty(exports, "shallowEqual", { enumerable: true, get: function () { return utils_1.shallowEqual; } });
package/lib/types.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import { EventObject, StateConfig } from 'xstate';
2
- export declare type MaybeLazy<T> = T | (() => T);
3
- export declare type NoInfer<T> = [T][T extends any ? 0 : any];
4
- export declare type Prop<T, K> = K extends keyof T ? T[K] : never;
5
- export interface UseMachineOptions<TContext, TEvent extends EventObject> {
6
- /**
7
- * If provided, will be merged with machine's `context`.
8
- */
9
- context?: Partial<TContext>;
10
- /**
11
- * The state to rehydrate the machine to. The machine will
12
- * start at this state instead of its `initialState`.
13
- */
14
- state?: StateConfig<TContext, TEvent>;
15
- }
16
- //# sourceMappingURL=types.d.ts.map
package/lib/types.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
package/lib/useActor.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { ActorRef, EventObject, Sender } from 'xstate';
2
- export declare function isActorWithState<T extends ActorRef<any>>(actorRef: T): actorRef is T & {
3
- state: any;
4
- };
5
- declare type EmittedFromActorRef<TActor extends ActorRef<any, any>> = TActor extends ActorRef<any, infer TEmitted> ? TEmitted : never;
6
- export declare function useActor<TActor extends ActorRef<any, any>>(actorRef: TActor, getSnapshot?: (actor: TActor) => EmittedFromActorRef<TActor>): [EmittedFromActorRef<TActor>, TActor['send']];
7
- export declare function useActor<TEvent extends EventObject, TEmitted>(actorRef: ActorRef<TEvent, TEmitted>, getSnapshot?: (actor: ActorRef<TEvent, TEmitted>) => TEmitted): [TEmitted, Sender<TEvent>];
8
- export {};
9
- //# sourceMappingURL=useActor.d.ts.map
package/lib/useActor.js DELETED
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useActor = exports.isActorWithState = void 0;
4
- var react_1 = require("react");
5
- var use_isomorphic_layout_effect_1 = require("use-isomorphic-layout-effect");
6
- var useConstant_1 = require("./useConstant");
7
- var shim_1 = require("use-sync-external-store/shim");
8
- function isActorWithState(actorRef) {
9
- return 'state' in actorRef;
10
- }
11
- exports.isActorWithState = isActorWithState;
12
- function isDeferredActor(actorRef) {
13
- return 'deferred' in actorRef;
14
- }
15
- function defaultGetSnapshot(actorRef) {
16
- return 'getSnapshot' in actorRef
17
- ? actorRef.getSnapshot()
18
- : isActorWithState(actorRef)
19
- ? actorRef.state
20
- : undefined;
21
- }
22
- function useActor(actorRef, getSnapshot) {
23
- if (getSnapshot === void 0) { getSnapshot = defaultGetSnapshot; }
24
- var actorRefRef = (0, react_1.useRef)(actorRef);
25
- var deferredEventsRef = (0, react_1.useRef)([]);
26
- var subscribe = (0, react_1.useCallback)(function (handleStoreChange) {
27
- var unsubscribe = actorRef.subscribe(handleStoreChange).unsubscribe;
28
- return unsubscribe;
29
- }, [actorRef]);
30
- var boundGetSnapshot = (0, react_1.useCallback)(function () { return getSnapshot(actorRef); }, [
31
- actorRef,
32
- getSnapshot
33
- ]);
34
- var storeSnapshot = (0, shim_1.useSyncExternalStore)(subscribe, boundGetSnapshot, boundGetSnapshot);
35
- var send = (0, useConstant_1.default)(function () { return function () {
36
- var args = [];
37
- for (var _i = 0; _i < arguments.length; _i++) {
38
- args[_i] = arguments[_i];
39
- }
40
- var event = args[0];
41
- if (process.env.NODE_ENV !== 'production' && args.length > 1) {
42
- console.warn("Unexpected payload: ".concat(JSON.stringify(args[1]), ". Only a single event object can be sent to actor send() functions."));
43
- }
44
- var currentActorRef = actorRefRef.current;
45
- // If the previous actor is a deferred actor,
46
- // queue the events so that they can be replayed
47
- // on the non-deferred actor.
48
- if (isDeferredActor(currentActorRef) && currentActorRef.deferred) {
49
- deferredEventsRef.current.push(event);
50
- }
51
- else {
52
- currentActorRef.send(event);
53
- }
54
- }; });
55
- (0, use_isomorphic_layout_effect_1.default)(function () {
56
- actorRefRef.current = actorRef;
57
- // Dequeue deferred events from the previous deferred actorRef
58
- while (deferredEventsRef.current.length > 0) {
59
- var deferredEvent = deferredEventsRef.current.shift();
60
- actorRef.send(deferredEvent);
61
- }
62
- }, [actorRef]);
63
- return [storeSnapshot, send];
64
- }
65
- exports.useActor = useActor;
@@ -1,2 +0,0 @@
1
- export default function useConstant<T>(fn: () => T): T;
2
- //# sourceMappingURL=useConstant.d.ts.map
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var React = require("react");
4
- function useConstant(fn) {
5
- var ref = React.useRef();
6
- if (!ref.current) {
7
- ref.current = { v: fn() };
8
- }
9
- return ref.current.v;
10
- }
11
- exports.default = useConstant;
@@ -1,14 +0,0 @@
1
- import { AnyInterpreter, AnyStateMachine, AreAllImplementationsAssumedToBeProvided, InternalMachineOptions, InterpreterFrom, InterpreterOptions, MachineOptions, Observer, StateFrom } from 'xstate';
2
- import { MaybeLazy } from './types';
3
- import { UseMachineOptions } from './useMachine';
4
- export declare function useIdleInterpreter(getMachine: MaybeLazy<AnyStateMachine>, options: Partial<InterpreterOptions> & Partial<UseMachineOptions<unknown, never>> & Partial<MachineOptions<unknown, never>>): AnyInterpreter;
5
- declare type RestParams<TMachine extends AnyStateMachine> = AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends false ? [
6
- options: InterpreterOptions & UseMachineOptions<TMachine['__TContext'], TMachine['__TEvent']> & InternalMachineOptions<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta'], true>,
7
- observerOrListener?: Observer<StateFrom<TMachine>> | ((value: StateFrom<TMachine>) => void)
8
- ] : [
9
- options?: InterpreterOptions & UseMachineOptions<TMachine['__TContext'], TMachine['__TEvent']> & InternalMachineOptions<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta']>,
10
- observerOrListener?: Observer<StateFrom<TMachine>> | ((value: StateFrom<TMachine>) => void)
11
- ];
12
- export declare function useInterpret<TMachine extends AnyStateMachine>(getMachine: MaybeLazy<TMachine>, ...[options, observerOrListener]: RestParams<TMachine>): InterpreterFrom<TMachine>;
13
- export {};
14
- //# sourceMappingURL=useInterpret.d.ts.map