@xstate/react 4.0.0-alpha.1 → 4.0.0-alpha.2
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/declarations/src/createActorContext.d.ts +15 -0
- package/dist/declarations/src/index.d.ts +7 -6
- package/dist/declarations/src/types.d.ts +3 -3
- package/dist/declarations/src/useInterpret.d.ts +5 -6
- package/dist/declarations/src/useMachine.d.ts +6 -17
- package/dist/declarations/src/useSpawn.d.ts +2 -2
- package/dist/{useConstant-94bfdbb5.esm.js → useConstant-0013a606.esm.js} +21 -24
- package/dist/{useConstant-eeb49d3f.cjs.prod.js → useConstant-c09b427a.cjs.prod.js} +0 -2
- package/dist/{useConstant-644f0e11.cjs.dev.js → useConstant-ff65b597.cjs.dev.js} +21 -24
- package/dist/xstate-react.cjs.dev.js +119 -75
- package/dist/xstate-react.cjs.prod.js +117 -71
- package/dist/xstate-react.esm.js +120 -77
- package/fsm/dist/xstate-react-fsm.cjs.dev.js +22 -33
- package/fsm/dist/xstate-react-fsm.cjs.prod.js +41 -51
- package/fsm/dist/xstate-react-fsm.esm.js +21 -32
- package/package.json +4 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ActorRefFrom, AnyStateMachine, AreAllImplementationsAssumedToBeProvided, SnapshotFrom, InternalMachineImplementations, InterpreterOptions, Observer, StateFrom } from 'xstate';
|
|
3
|
+
export declare function createActorContext<TMachine extends AnyStateMachine>(machine: TMachine, interpreterOptions?: InterpreterOptions<TMachine>, observerOrListener?: Observer<StateFrom<TMachine>> | ((value: StateFrom<TMachine>) => void)): {
|
|
4
|
+
useActor: () => [StateFrom<TMachine>, ActorRefFrom<TMachine>['send']];
|
|
5
|
+
useSelector: <T>(selector: (snapshot: SnapshotFrom<TMachine>) => T, compare?: (a: T, b: T) => boolean) => T;
|
|
6
|
+
useActorRef: () => ActorRefFrom<TMachine>;
|
|
7
|
+
Provider: (props: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
machine?: TMachine | (() => TMachine);
|
|
10
|
+
} & (AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends false ? {
|
|
11
|
+
options: InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta'], true>;
|
|
12
|
+
} : {
|
|
13
|
+
options?: InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta']>;
|
|
14
|
+
})) => React.ReactElement<any, any>;
|
|
15
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
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 './shallowEqual';
|
|
1
|
+
export { useMachine } from './useMachine.ts';
|
|
2
|
+
export { useActor } from './useActor.ts';
|
|
3
|
+
export { useInterpret } from './useInterpret.ts';
|
|
4
|
+
export { useSelector } from './useSelector.ts';
|
|
5
|
+
export { useSpawn } from './useSpawn.ts';
|
|
6
|
+
export { shallowEqual } from './shallowEqual.ts';
|
|
7
|
+
export { createActorContext } from './createActorContext.ts';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventObject, MachineContext, StateConfig } from 'xstate';
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
2
|
+
export type MaybeLazy<T> = T | (() => T);
|
|
3
|
+
export type NoInfer<T> = [T][T extends any ? 0 : any];
|
|
4
|
+
export type Prop<T, K> = K extends keyof T ? T[K] : never;
|
|
5
5
|
export interface UseMachineOptions<TContext extends MachineContext, TEvent extends EventObject> {
|
|
6
6
|
/**
|
|
7
7
|
* If provided, will be merged with machine's `context`.
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { AnyInterpreter, AnyStateMachine, AreAllImplementationsAssumedToBeProvided, InternalMachineImplementations, InterpreterFrom, InterpreterOptions, MachineImplementations, Observer, StateFrom } from 'xstate';
|
|
2
|
-
import { MaybeLazy } from './types';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
options: InterpreterOptions & UseMachineOptions<TMachine['__TContext'], TMachine['__TEvent']> & InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta'], true>,
|
|
2
|
+
import { MaybeLazy } from './types.ts';
|
|
3
|
+
export declare function useIdleInterpreter(getMachine: MaybeLazy<AnyStateMachine>, options: Partial<InterpreterOptions<AnyStateMachine>> & Partial<MachineImplementations<any, never>>): AnyInterpreter;
|
|
4
|
+
type RestParams<TMachine extends AnyStateMachine> = AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends false ? [
|
|
5
|
+
options: InterpreterOptions<TMachine> & InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta'], true>,
|
|
7
6
|
observerOrListener?: Observer<StateFrom<TMachine>> | ((value: StateFrom<TMachine>) => void)
|
|
8
7
|
] : [
|
|
9
|
-
options?: InterpreterOptions
|
|
8
|
+
options?: InterpreterOptions<TMachine> & InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta']>,
|
|
10
9
|
observerOrListener?: Observer<StateFrom<TMachine>> | ((value: StateFrom<TMachine>) => void)
|
|
11
10
|
];
|
|
12
11
|
export declare function useInterpret<TMachine extends AnyStateMachine>(getMachine: MaybeLazy<TMachine>, ...[options, observerOrListener]: RestParams<TMachine>): InterpreterFrom<TMachine>;
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import { AnyStateMachine, AreAllImplementationsAssumedToBeProvided,
|
|
2
|
-
import { MaybeLazy, Prop } from './types';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* If provided, will be merged with machine's `context`.
|
|
6
|
-
*/
|
|
7
|
-
context?: Partial<TContext>;
|
|
8
|
-
/**
|
|
9
|
-
* The state to rehydrate the machine to. The machine will
|
|
10
|
-
* start at this state instead of its `initialState`.
|
|
11
|
-
*/
|
|
12
|
-
state?: StateConfig<TContext, TEvent>;
|
|
13
|
-
}
|
|
14
|
-
declare type RestParams<TMachine extends AnyStateMachine> = AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends false ? [
|
|
15
|
-
options: InterpreterOptions & UseMachineOptions<TMachine['__TContext'], TMachine['__TEvent']> & InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta'], true>
|
|
1
|
+
import { AnyStateMachine, AreAllImplementationsAssumedToBeProvided, InternalMachineImplementations, InterpreterFrom, InterpreterOptions, StateFrom } from 'xstate';
|
|
2
|
+
import { MaybeLazy, Prop } from './types.ts';
|
|
3
|
+
type RestParams<TMachine extends AnyStateMachine> = AreAllImplementationsAssumedToBeProvided<TMachine['__TResolvedTypesMeta']> extends false ? [
|
|
4
|
+
options: InterpreterOptions<TMachine> & InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta'], true>
|
|
16
5
|
] : [
|
|
17
|
-
options?: InterpreterOptions
|
|
6
|
+
options?: InterpreterOptions<TMachine> & InternalMachineImplementations<TMachine['__TContext'], TMachine['__TEvent'], TMachine['__TResolvedTypesMeta']>
|
|
18
7
|
];
|
|
19
|
-
|
|
8
|
+
type UseMachineReturn<TMachine extends AnyStateMachine, TInterpreter = InterpreterFrom<TMachine>> = [StateFrom<TMachine>, Prop<TInterpreter, 'send'>, TInterpreter];
|
|
20
9
|
export declare function useMachine<TMachine extends AnyStateMachine>(getMachine: MaybeLazy<TMachine>, ...[options]: RestParams<TMachine>): UseMachineReturn<TMachine>;
|
|
21
10
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActorRef,
|
|
1
|
+
import { ActorRef, ActorBehavior, EventObject } from 'xstate';
|
|
2
2
|
/**
|
|
3
3
|
* React hook that spawns an `ActorRef` with the specified `behavior`.
|
|
4
4
|
* The returned `ActorRef` can be used with the `useActor(actorRef)` hook.
|
|
@@ -6,4 +6,4 @@ import { ActorRef, Behavior, EventObject } from 'xstate';
|
|
|
6
6
|
* @param behavior The actor behavior to spawn
|
|
7
7
|
* @returns An ActorRef with the specified `behavior`
|
|
8
8
|
*/
|
|
9
|
-
export declare function useSpawn<TState, TEvent extends EventObject>(behavior:
|
|
9
|
+
export declare function useSpawn<TState, TEvent extends EventObject>(behavior: ActorBehavior<TEvent, TState>): ActorRef<TEvent, TState>;
|
|
@@ -5,37 +5,36 @@ function _arrayWithHoles(arr) {
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
function _iterableToArrayLimit(arr, i) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (i && _arr.length === i) break;
|
|
19
|
-
}
|
|
20
|
-
} catch (err) {
|
|
21
|
-
_d = true;
|
|
22
|
-
_e = err;
|
|
23
|
-
} finally {
|
|
8
|
+
var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
|
|
9
|
+
if (null != _i) {
|
|
10
|
+
var _s,
|
|
11
|
+
_e,
|
|
12
|
+
_x,
|
|
13
|
+
_r,
|
|
14
|
+
_arr = [],
|
|
15
|
+
_n = !0,
|
|
16
|
+
_d = !1;
|
|
24
17
|
try {
|
|
25
|
-
if (
|
|
18
|
+
if (_x = (_i = _i.call(arr)).next, 0 === i) {
|
|
19
|
+
if (Object(_i) !== _i) return;
|
|
20
|
+
_n = !1;
|
|
21
|
+
} else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
|
|
22
|
+
} catch (err) {
|
|
23
|
+
_d = !0, _e = err;
|
|
26
24
|
} finally {
|
|
27
|
-
|
|
25
|
+
try {
|
|
26
|
+
if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
|
|
27
|
+
} finally {
|
|
28
|
+
if (_d) throw _e;
|
|
29
|
+
}
|
|
28
30
|
}
|
|
31
|
+
return _arr;
|
|
29
32
|
}
|
|
30
|
-
|
|
31
|
-
return _arr;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
function _arrayLikeToArray(arr, len) {
|
|
35
36
|
if (len == null || len > arr.length) len = arr.length;
|
|
36
|
-
|
|
37
37
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
38
|
-
|
|
39
38
|
return arr2;
|
|
40
39
|
}
|
|
41
40
|
|
|
@@ -58,13 +57,11 @@ function _slicedToArray(arr, i) {
|
|
|
58
57
|
|
|
59
58
|
function useConstant(fn) {
|
|
60
59
|
var ref = useRef();
|
|
61
|
-
|
|
62
60
|
if (!ref.current) {
|
|
63
61
|
ref.current = {
|
|
64
62
|
v: fn()
|
|
65
63
|
};
|
|
66
64
|
}
|
|
67
|
-
|
|
68
65
|
return ref.current.v;
|
|
69
66
|
}
|
|
70
67
|
|
|
@@ -7,37 +7,36 @@ function _arrayWithHoles(arr) {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
function _iterableToArrayLimit(arr, i) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (i && _arr.length === i) break;
|
|
21
|
-
}
|
|
22
|
-
} catch (err) {
|
|
23
|
-
_d = true;
|
|
24
|
-
_e = err;
|
|
25
|
-
} finally {
|
|
10
|
+
var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
|
|
11
|
+
if (null != _i) {
|
|
12
|
+
var _s,
|
|
13
|
+
_e,
|
|
14
|
+
_x,
|
|
15
|
+
_r,
|
|
16
|
+
_arr = [],
|
|
17
|
+
_n = !0,
|
|
18
|
+
_d = !1;
|
|
26
19
|
try {
|
|
27
|
-
if (
|
|
20
|
+
if (_x = (_i = _i.call(arr)).next, 0 === i) {
|
|
21
|
+
if (Object(_i) !== _i) return;
|
|
22
|
+
_n = !1;
|
|
23
|
+
} else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);
|
|
24
|
+
} catch (err) {
|
|
25
|
+
_d = !0, _e = err;
|
|
28
26
|
} finally {
|
|
29
|
-
|
|
27
|
+
try {
|
|
28
|
+
if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;
|
|
29
|
+
} finally {
|
|
30
|
+
if (_d) throw _e;
|
|
31
|
+
}
|
|
30
32
|
}
|
|
33
|
+
return _arr;
|
|
31
34
|
}
|
|
32
|
-
|
|
33
|
-
return _arr;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
function _arrayLikeToArray(arr, len) {
|
|
37
38
|
if (len == null || len > arr.length) len = arr.length;
|
|
38
|
-
|
|
39
39
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
40
|
-
|
|
41
40
|
return arr2;
|
|
42
41
|
}
|
|
43
42
|
|
|
@@ -60,13 +59,11 @@ function _slicedToArray(arr, i) {
|
|
|
60
59
|
|
|
61
60
|
function useConstant(fn) {
|
|
62
61
|
var ref = React.useRef();
|
|
63
|
-
|
|
64
62
|
if (!ref.current) {
|
|
65
63
|
ref.current = {
|
|
66
64
|
v: fn()
|
|
67
65
|
};
|
|
68
66
|
}
|
|
69
|
-
|
|
70
67
|
return ref.current.v;
|
|
71
68
|
}
|
|
72
69
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var useConstant = require('./useConstant-
|
|
5
|
+
var useConstant = require('./useConstant-ff65b597.cjs.dev.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var useIsomorphicLayoutEffect = require('use-isomorphic-layout-effect');
|
|
8
8
|
var withSelector = require('use-sync-external-store/shim/with-selector');
|
|
@@ -18,13 +18,11 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
18
18
|
var target = {};
|
|
19
19
|
var sourceKeys = Object.keys(source);
|
|
20
20
|
var key, i;
|
|
21
|
-
|
|
22
21
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
23
22
|
key = sourceKeys[i];
|
|
24
23
|
if (excluded.indexOf(key) >= 0) continue;
|
|
25
24
|
target[key] = source[key];
|
|
26
25
|
}
|
|
27
|
-
|
|
28
26
|
return target;
|
|
29
27
|
}
|
|
30
28
|
|
|
@@ -32,10 +30,8 @@ function _objectWithoutProperties(source, excluded) {
|
|
|
32
30
|
if (source == null) return {};
|
|
33
31
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
34
32
|
var key, i;
|
|
35
|
-
|
|
36
33
|
if (Object.getOwnPropertySymbols) {
|
|
37
34
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
38
|
-
|
|
39
35
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
40
36
|
key = sourceSymbolKeys[i];
|
|
41
37
|
if (excluded.indexOf(key) >= 0) continue;
|
|
@@ -43,37 +39,29 @@ function _objectWithoutProperties(source, excluded) {
|
|
|
43
39
|
target[key] = source[key];
|
|
44
40
|
}
|
|
45
41
|
}
|
|
46
|
-
|
|
47
42
|
return target;
|
|
48
43
|
}
|
|
49
44
|
|
|
50
|
-
var _excluded = ["
|
|
45
|
+
var _excluded = ["actors", "guards", "actions", "delays"];
|
|
51
46
|
function useIdleInterpreter(getMachine, options) {
|
|
52
47
|
var machine = useConstant.useConstant(function () {
|
|
53
48
|
return typeof getMachine === 'function' ? getMachine() : getMachine;
|
|
54
49
|
});
|
|
55
|
-
|
|
56
50
|
if (process.env.NODE_ENV !== 'production' && typeof getMachine !== 'function') {
|
|
57
51
|
var _useState = React.useState(machine),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
_useState2 = useConstant._slicedToArray(_useState, 1),
|
|
53
|
+
initialMachine = _useState2[0];
|
|
61
54
|
if (getMachine !== initialMachine) {
|
|
62
55
|
console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' + 'Please make sure that you pass the same Machine as argument each time.');
|
|
63
56
|
}
|
|
64
57
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
delays = options.delays,
|
|
71
|
-
rehydratedState = options.state,
|
|
72
|
-
interpreterOptions = _objectWithoutProperties(options, _excluded);
|
|
73
|
-
|
|
58
|
+
var actors = options.actors,
|
|
59
|
+
guards = options.guards,
|
|
60
|
+
actions = options.actions,
|
|
61
|
+
delays = options.delays,
|
|
62
|
+
interpreterOptions = _objectWithoutProperties(options, _excluded);
|
|
74
63
|
var service = useConstant.useConstant(function () {
|
|
75
64
|
var machineConfig = {
|
|
76
|
-
context: context,
|
|
77
65
|
guards: guards,
|
|
78
66
|
actions: actions,
|
|
79
67
|
actors: actors,
|
|
@@ -81,10 +69,11 @@ function useIdleInterpreter(getMachine, options) {
|
|
|
81
69
|
};
|
|
82
70
|
var machineWithConfig = machine.provide(machineConfig);
|
|
83
71
|
return xstate.interpret(machineWithConfig, interpreterOptions);
|
|
84
|
-
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Make sure options are kept updated when they change.
|
|
85
75
|
// This mutation assignment is safe because the service instance is only used
|
|
86
76
|
// in one place -- this hook's caller.
|
|
87
|
-
|
|
88
77
|
useIsomorphicLayoutEffect__default['default'](function () {
|
|
89
78
|
Object.assign(service.behavior.options.actions, actions);
|
|
90
79
|
Object.assign(service.behavior.options.guards, guards);
|
|
@@ -97,27 +86,25 @@ function useInterpret(getMachine) {
|
|
|
97
86
|
for (var _len = arguments.length, _ref = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
98
87
|
_ref[_key - 1] = arguments[_key];
|
|
99
88
|
}
|
|
100
|
-
|
|
101
89
|
var _ref$ = _ref[0],
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
options = _ref$ === void 0 ? {} : _ref$,
|
|
91
|
+
observerOrListener = _ref[1];
|
|
104
92
|
var service = useIdleInterpreter(getMachine, options);
|
|
105
93
|
React.useEffect(function () {
|
|
106
94
|
if (!observerOrListener) {
|
|
107
95
|
return;
|
|
108
96
|
}
|
|
109
|
-
|
|
110
97
|
var sub = service.subscribe(xstate.toObserver(observerOrListener));
|
|
111
98
|
return function () {
|
|
112
99
|
sub.unsubscribe();
|
|
113
100
|
};
|
|
114
101
|
}, [observerOrListener]);
|
|
115
102
|
React.useEffect(function () {
|
|
116
|
-
|
|
117
|
-
service.start(rehydratedState ? service.behavior.createState(rehydratedState) : undefined);
|
|
103
|
+
service.start();
|
|
118
104
|
return function () {
|
|
119
105
|
service.stop();
|
|
120
106
|
service.status = xstate.InterpreterStatus.NotStarted;
|
|
107
|
+
service._initState();
|
|
121
108
|
};
|
|
122
109
|
}, []);
|
|
123
110
|
return service;
|
|
@@ -126,51 +113,33 @@ function useInterpret(getMachine) {
|
|
|
126
113
|
function identity(a) {
|
|
127
114
|
return a;
|
|
128
115
|
}
|
|
129
|
-
|
|
130
116
|
var isEqual = function isEqual(prevState, nextState) {
|
|
131
117
|
return prevState === nextState || nextState.changed === false;
|
|
132
118
|
};
|
|
133
|
-
|
|
134
|
-
// TODO: rethink how we can do this better
|
|
135
|
-
var cachedRehydratedStates = new WeakMap();
|
|
136
119
|
function useMachine(getMachine) {
|
|
137
120
|
for (var _len = arguments.length, _ref = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
138
121
|
_ref[_key - 1] = arguments[_key];
|
|
139
122
|
}
|
|
140
|
-
|
|
141
123
|
var _ref$ = _ref[0],
|
|
142
|
-
|
|
124
|
+
options = _ref$ === void 0 ? {} : _ref$;
|
|
143
125
|
// using `useIdleInterpreter` allows us to subscribe to the service *before* we start it
|
|
144
126
|
// so we don't miss any notifications
|
|
145
127
|
var service = useIdleInterpreter(getMachine, options);
|
|
146
128
|
var getSnapshot = React.useCallback(function () {
|
|
147
|
-
if (service.status === xstate.InterpreterStatus.NotStarted && options.state) {
|
|
148
|
-
var cached = cachedRehydratedStates.get(options.state);
|
|
149
|
-
|
|
150
|
-
if (cached) {
|
|
151
|
-
return cached;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
var created = service.behavior.createState(options.state);
|
|
155
|
-
cachedRehydratedStates.set(options.state, created);
|
|
156
|
-
return created;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
129
|
return service.getSnapshot();
|
|
160
130
|
}, [service]);
|
|
161
131
|
var subscribe = React.useCallback(function (handleStoreChange) {
|
|
162
132
|
var _service$subscribe = service.subscribe(handleStoreChange),
|
|
163
|
-
|
|
164
|
-
|
|
133
|
+
unsubscribe = _service$subscribe.unsubscribe;
|
|
165
134
|
return unsubscribe;
|
|
166
135
|
}, [service]);
|
|
167
136
|
var storeSnapshot = withSelector.useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
|
|
168
137
|
React.useEffect(function () {
|
|
169
|
-
|
|
170
|
-
service.start(rehydratedState ? service.behavior.createState(rehydratedState) : undefined);
|
|
138
|
+
service.start();
|
|
171
139
|
return function () {
|
|
172
140
|
service.stop();
|
|
173
141
|
service.status = xstate.InterpreterStatus.NotStarted;
|
|
142
|
+
service._initState();
|
|
174
143
|
};
|
|
175
144
|
}, []);
|
|
176
145
|
return [storeSnapshot, service.send, service];
|
|
@@ -179,8 +148,7 @@ function useMachine(getMachine) {
|
|
|
179
148
|
function useActor(actorRef) {
|
|
180
149
|
var subscribe = React.useCallback(function (handleStoreChange) {
|
|
181
150
|
var _actorRef$subscribe = actorRef.subscribe(handleStoreChange),
|
|
182
|
-
|
|
183
|
-
|
|
151
|
+
unsubscribe = _actorRef$subscribe.unsubscribe;
|
|
184
152
|
return unsubscribe;
|
|
185
153
|
}, [actorRef]);
|
|
186
154
|
var boundGetSnapshot = React.useCallback(function () {
|
|
@@ -196,13 +164,11 @@ function useActor(actorRef) {
|
|
|
196
164
|
function defaultCompare(a, b) {
|
|
197
165
|
return a === b;
|
|
198
166
|
}
|
|
199
|
-
|
|
200
167
|
function useSelector(actor, selector) {
|
|
201
168
|
var compare = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultCompare;
|
|
202
169
|
var subscribe = React.useCallback(function (handleStoreChange) {
|
|
203
170
|
var _actor$subscribe = actor.subscribe(handleStoreChange),
|
|
204
|
-
|
|
205
|
-
|
|
171
|
+
unsubscribe = _actor$subscribe.unsubscribe;
|
|
206
172
|
return unsubscribe;
|
|
207
173
|
}, [actor]);
|
|
208
174
|
var boundGetSnapshot = React.useCallback(function () {
|
|
@@ -219,7 +185,6 @@ function useSelector(actor, selector) {
|
|
|
219
185
|
* @param behavior The actor behavior to spawn
|
|
220
186
|
* @returns An ActorRef with the specified `behavior`
|
|
221
187
|
*/
|
|
222
|
-
|
|
223
188
|
function useSpawn(behavior) {
|
|
224
189
|
var actorRef = useConstant.useConstant(function () {
|
|
225
190
|
// TODO: figure out what to do about the name argument
|
|
@@ -227,11 +192,9 @@ function useSpawn(behavior) {
|
|
|
227
192
|
});
|
|
228
193
|
React.useEffect(function () {
|
|
229
194
|
var _actorRef$start;
|
|
230
|
-
|
|
231
195
|
(_actorRef$start = actorRef.start) === null || _actorRef$start === void 0 ? void 0 : _actorRef$start.call(actorRef);
|
|
232
196
|
return function () {
|
|
233
197
|
var _stop, _ref;
|
|
234
|
-
|
|
235
198
|
(_stop = (_ref = actorRef).stop) === null || _stop === void 0 ? void 0 : _stop.call(_ref);
|
|
236
199
|
};
|
|
237
200
|
}, []);
|
|
@@ -241,17 +204,11 @@ function useSpawn(behavior) {
|
|
|
241
204
|
function _typeof(obj) {
|
|
242
205
|
"@babel/helpers - typeof";
|
|
243
206
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
_typeof = function (obj) {
|
|
250
|
-
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
return _typeof(obj);
|
|
207
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
208
|
+
return typeof obj;
|
|
209
|
+
} : function (obj) {
|
|
210
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
211
|
+
}, _typeof(obj);
|
|
255
212
|
}
|
|
256
213
|
|
|
257
214
|
// From https://github.com/reduxjs/react-redux/blob/720f0ba79236cdc3e1115f4ef9a7760a21784b48/src/utils/shallowEqual.ts
|
|
@@ -262,27 +219,114 @@ function is(x, y) {
|
|
|
262
219
|
return x !== x && y !== y;
|
|
263
220
|
}
|
|
264
221
|
}
|
|
265
|
-
|
|
266
222
|
function shallowEqual(objA, objB) {
|
|
267
223
|
if (is(objA, objB)) return true;
|
|
268
|
-
|
|
269
224
|
if (_typeof(objA) !== 'object' || objA === null || _typeof(objB) !== 'object' || objB === null) {
|
|
270
225
|
return false;
|
|
271
226
|
}
|
|
272
|
-
|
|
273
227
|
var keysA = Object.keys(objA);
|
|
274
228
|
var keysB = Object.keys(objB);
|
|
275
229
|
if (keysA.length !== keysB.length) return false;
|
|
276
|
-
|
|
277
230
|
for (var i = 0; i < keysA.length; i++) {
|
|
278
231
|
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
|
|
279
232
|
return false;
|
|
280
233
|
}
|
|
281
234
|
}
|
|
282
|
-
|
|
283
235
|
return true;
|
|
284
236
|
}
|
|
285
237
|
|
|
238
|
+
function _toPrimitive(input, hint) {
|
|
239
|
+
if (typeof input !== "object" || input === null) return input;
|
|
240
|
+
var prim = input[Symbol.toPrimitive];
|
|
241
|
+
if (prim !== undefined) {
|
|
242
|
+
var res = prim.call(input, hint || "default");
|
|
243
|
+
if (typeof res !== "object") return res;
|
|
244
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
245
|
+
}
|
|
246
|
+
return (hint === "string" ? String : Number)(input);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function _toPropertyKey(arg) {
|
|
250
|
+
var key = _toPrimitive(arg, "string");
|
|
251
|
+
return typeof key === "symbol" ? key : String(key);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function _defineProperty(obj, key, value) {
|
|
255
|
+
key = _toPropertyKey(key);
|
|
256
|
+
if (key in obj) {
|
|
257
|
+
Object.defineProperty(obj, key, {
|
|
258
|
+
value: value,
|
|
259
|
+
enumerable: true,
|
|
260
|
+
configurable: true,
|
|
261
|
+
writable: true
|
|
262
|
+
});
|
|
263
|
+
} else {
|
|
264
|
+
obj[key] = value;
|
|
265
|
+
}
|
|
266
|
+
return obj;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function ownKeys(object, enumerableOnly) {
|
|
270
|
+
var keys = Object.keys(object);
|
|
271
|
+
if (Object.getOwnPropertySymbols) {
|
|
272
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
273
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
274
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
275
|
+
})), keys.push.apply(keys, symbols);
|
|
276
|
+
}
|
|
277
|
+
return keys;
|
|
278
|
+
}
|
|
279
|
+
function _objectSpread2(target) {
|
|
280
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
281
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
282
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
283
|
+
_defineProperty(target, key, source[key]);
|
|
284
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
285
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
return target;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function createActorContext(machine, interpreterOptions, observerOrListener) {
|
|
292
|
+
var ReactContext = /*#__PURE__*/React.createContext(null);
|
|
293
|
+
var OriginalProvider = ReactContext.Provider;
|
|
294
|
+
function Provider(_ref) {
|
|
295
|
+
var children = _ref.children,
|
|
296
|
+
_ref$machine = _ref.machine,
|
|
297
|
+
providedMachine = _ref$machine === void 0 ? machine : _ref$machine,
|
|
298
|
+
options = _ref.options;
|
|
299
|
+
var actor = useInterpret(providedMachine, _objectSpread2(_objectSpread2({}, interpreterOptions), options), observerOrListener);
|
|
300
|
+
return /*#__PURE__*/React.createElement(OriginalProvider, {
|
|
301
|
+
value: actor,
|
|
302
|
+
children: children
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
Provider.displayName = "ActorProvider(".concat(machine.id, ")");
|
|
306
|
+
function useContext() {
|
|
307
|
+
var actor = React.useContext(ReactContext);
|
|
308
|
+
if (!actor) {
|
|
309
|
+
throw new Error("You used a hook from \"".concat(Provider.displayName, "\" but it's not inside a <").concat(Provider.displayName, "> component."));
|
|
310
|
+
}
|
|
311
|
+
return actor;
|
|
312
|
+
}
|
|
313
|
+
function useActor$1() {
|
|
314
|
+
var actor = useContext();
|
|
315
|
+
return useActor(actor);
|
|
316
|
+
}
|
|
317
|
+
function useSelector$1(selector, compare) {
|
|
318
|
+
var actor = useContext();
|
|
319
|
+
return useSelector(actor, selector, compare);
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
Provider: Provider,
|
|
323
|
+
useActorRef: useContext,
|
|
324
|
+
useActor: useActor$1,
|
|
325
|
+
useSelector: useSelector$1
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
exports.createActorContext = createActorContext;
|
|
286
330
|
exports.shallowEqual = shallowEqual;
|
|
287
331
|
exports.useActor = useActor;
|
|
288
332
|
exports.useInterpret = useInterpret;
|