react-transition-state 1.2.0-alpha.5 → 2.0.0-alpha.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/cjs/index.js +36 -33
- package/dist/es/hooks/useTransition.js +16 -13
- package/dist/es/hooks/useTransitionMap.js +13 -13
- package/dist/es/hooks/utils.js +10 -10
- package/package.json +4 -3
- package/types/index.d.ts +7 -7
package/dist/cjs/index.js
CHANGED
|
@@ -11,21 +11,21 @@ var PRE_EXIT = 3;
|
|
|
11
11
|
var EXITING = 4;
|
|
12
12
|
var EXITED = 5;
|
|
13
13
|
var UNMOUNTED = 6;
|
|
14
|
-
var
|
|
15
|
-
var
|
|
14
|
+
var STATUS = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
|
|
15
|
+
var getState = function getState(_status) {
|
|
16
16
|
return {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
isEnter:
|
|
20
|
-
isMounted:
|
|
21
|
-
isResolved:
|
|
17
|
+
_status: _status,
|
|
18
|
+
status: STATUS[_status],
|
|
19
|
+
isEnter: _status < PRE_EXIT,
|
|
20
|
+
isMounted: _status !== UNMOUNTED,
|
|
21
|
+
isResolved: _status === ENTERED || _status > EXITING
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
24
|
var startOrEnd = function startOrEnd(unmounted) {
|
|
25
25
|
return unmounted ? UNMOUNTED : EXITED;
|
|
26
26
|
};
|
|
27
|
-
var
|
|
28
|
-
switch (
|
|
27
|
+
var getEndStatus = function getEndStatus(status, unmountOnExit) {
|
|
28
|
+
switch (status) {
|
|
29
29
|
case ENTERING:
|
|
30
30
|
case PRE_ENTER:
|
|
31
31
|
return ENTERED;
|
|
@@ -39,12 +39,13 @@ var getTimeout = function getTimeout(timeout) {
|
|
|
39
39
|
return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
var updateState$1 = function updateState(
|
|
42
|
+
var updateState$1 = function updateState(status, setState, latestState, timeoutId, onChange) {
|
|
43
43
|
clearTimeout(timeoutId.current);
|
|
44
|
+
var state = getState(status);
|
|
44
45
|
setState(state);
|
|
45
46
|
latestState.current = state;
|
|
46
47
|
onChange && onChange({
|
|
47
|
-
|
|
48
|
+
current: state
|
|
48
49
|
});
|
|
49
50
|
};
|
|
50
51
|
|
|
@@ -60,9 +61,11 @@ var useTransition = function useTransition(_temp) {
|
|
|
60
61
|
initialEntered = _ref.initialEntered,
|
|
61
62
|
mountOnEnter = _ref.mountOnEnter,
|
|
62
63
|
unmountOnExit = _ref.unmountOnExit,
|
|
63
|
-
onChange = _ref.
|
|
64
|
+
onChange = _ref.onStateChange;
|
|
64
65
|
|
|
65
|
-
var _useState = react.useState(
|
|
66
|
+
var _useState = react.useState(function () {
|
|
67
|
+
return getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter));
|
|
68
|
+
}),
|
|
66
69
|
state = _useState[0],
|
|
67
70
|
setState = _useState[1];
|
|
68
71
|
|
|
@@ -74,14 +77,14 @@ var useTransition = function useTransition(_temp) {
|
|
|
74
77
|
exitTimeout = _getTimeout[1];
|
|
75
78
|
|
|
76
79
|
var endTransition = react.useCallback(function () {
|
|
77
|
-
var
|
|
78
|
-
|
|
80
|
+
var status = getEndStatus(latestState.current._status, unmountOnExit);
|
|
81
|
+
status && updateState$1(status, setState, latestState, timeoutId, onChange);
|
|
79
82
|
}, [onChange, unmountOnExit]);
|
|
80
83
|
var toggle = react.useCallback(function (toEnter) {
|
|
81
|
-
var transitState = function transitState(
|
|
82
|
-
updateState$1(
|
|
84
|
+
var transitState = function transitState(status) {
|
|
85
|
+
updateState$1(status, setState, latestState, timeoutId, onChange);
|
|
83
86
|
|
|
84
|
-
switch (
|
|
87
|
+
switch (status) {
|
|
85
88
|
case ENTERING:
|
|
86
89
|
if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
|
|
87
90
|
break;
|
|
@@ -93,13 +96,13 @@ var useTransition = function useTransition(_temp) {
|
|
|
93
96
|
case PRE_ENTER:
|
|
94
97
|
case PRE_EXIT:
|
|
95
98
|
timeoutId.current = setTimeout(function () {
|
|
96
|
-
return transitState(
|
|
99
|
+
return transitState(status + 1);
|
|
97
100
|
}, 0);
|
|
98
101
|
break;
|
|
99
102
|
}
|
|
100
103
|
};
|
|
101
104
|
|
|
102
|
-
var enterStage = latestState.current <= ENTERED;
|
|
105
|
+
var enterStage = latestState.current._status <= ENTERED;
|
|
103
106
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
104
107
|
|
|
105
108
|
if (toEnter) {
|
|
@@ -113,7 +116,7 @@ var useTransition = function useTransition(_temp) {
|
|
|
113
116
|
return clearTimeout(timeoutId.current);
|
|
114
117
|
};
|
|
115
118
|
}, []);
|
|
116
|
-
return [
|
|
119
|
+
return [state, toggle, endTransition];
|
|
117
120
|
};
|
|
118
121
|
|
|
119
122
|
var initialStateMap = new Map();
|
|
@@ -121,13 +124,13 @@ var initialConfigMap = new Map();
|
|
|
121
124
|
|
|
122
125
|
var updateState = function updateState(_ref) {
|
|
123
126
|
var key = _ref.key,
|
|
124
|
-
|
|
127
|
+
status = _ref.status,
|
|
125
128
|
setStateMap = _ref.setStateMap,
|
|
126
129
|
latestStateMap = _ref.latestStateMap,
|
|
127
130
|
timeoutId = _ref.timeoutId,
|
|
128
131
|
onChange = _ref.onChange;
|
|
129
132
|
clearTimeout(timeoutId);
|
|
130
|
-
var state =
|
|
133
|
+
var state = getState(status);
|
|
131
134
|
var stateMap = new Map(latestStateMap.current);
|
|
132
135
|
stateMap.set(key, state);
|
|
133
136
|
setStateMap(stateMap);
|
|
@@ -169,10 +172,10 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
169
172
|
_ref3$initialEntered = _ref3.initialEntered,
|
|
170
173
|
_initialEntered = _ref3$initialEntered === void 0 ? initialEntered : _ref3$initialEntered;
|
|
171
174
|
|
|
172
|
-
var
|
|
175
|
+
var status = _initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
173
176
|
updateState({
|
|
174
177
|
key: key,
|
|
175
|
-
|
|
178
|
+
status: status,
|
|
176
179
|
setStateMap: setStateMap,
|
|
177
180
|
latestStateMap: latestStateMap
|
|
178
181
|
});
|
|
@@ -201,10 +204,10 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
201
204
|
var _configMap$current$ge = configMap.current.get(key),
|
|
202
205
|
timeoutId = _configMap$current$ge.timeoutId;
|
|
203
206
|
|
|
204
|
-
var
|
|
205
|
-
|
|
207
|
+
var status = getEndStatus(stateObj._status, unmountOnExit);
|
|
208
|
+
status && updateState({
|
|
206
209
|
key: key,
|
|
207
|
-
|
|
210
|
+
status: status,
|
|
208
211
|
setStateMap: setStateMap,
|
|
209
212
|
latestStateMap: latestStateMap,
|
|
210
213
|
timeoutId: timeoutId,
|
|
@@ -221,17 +224,17 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
221
224
|
|
|
222
225
|
var config = configMap.current.get(key);
|
|
223
226
|
|
|
224
|
-
var transitState = function transitState(
|
|
227
|
+
var transitState = function transitState(status) {
|
|
225
228
|
updateState({
|
|
226
229
|
key: key,
|
|
227
|
-
|
|
230
|
+
status: status,
|
|
228
231
|
setStateMap: setStateMap,
|
|
229
232
|
latestStateMap: latestStateMap,
|
|
230
233
|
timeoutId: config.timeoutId,
|
|
231
234
|
onChange: onChange
|
|
232
235
|
});
|
|
233
236
|
|
|
234
|
-
switch (
|
|
237
|
+
switch (status) {
|
|
235
238
|
case ENTERING:
|
|
236
239
|
if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
237
240
|
return endTransition(key);
|
|
@@ -247,13 +250,13 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
247
250
|
case PRE_ENTER:
|
|
248
251
|
case PRE_EXIT:
|
|
249
252
|
config.timeoutId = setTimeout(function () {
|
|
250
|
-
return transitState(
|
|
253
|
+
return transitState(status + 1);
|
|
251
254
|
}, 0);
|
|
252
255
|
break;
|
|
253
256
|
}
|
|
254
257
|
};
|
|
255
258
|
|
|
256
|
-
var enterStage = stateObj.
|
|
259
|
+
var enterStage = stateObj._status <= ENTERED;
|
|
257
260
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
258
261
|
|
|
259
262
|
if (toEnter) {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
2
|
-
import { ENTERED, startOrEnd, getTimeout,
|
|
2
|
+
import { getState, ENTERED, startOrEnd, getTimeout, getEndStatus, PRE_EXIT, EXITING, PRE_ENTER, ENTERING } from './utils.js';
|
|
3
3
|
|
|
4
|
-
var updateState = function updateState(
|
|
4
|
+
var updateState = function updateState(status, setState, latestState, timeoutId, onChange) {
|
|
5
5
|
clearTimeout(timeoutId.current);
|
|
6
|
+
var state = getState(status);
|
|
6
7
|
setState(state);
|
|
7
8
|
latestState.current = state;
|
|
8
9
|
onChange && onChange({
|
|
9
|
-
|
|
10
|
+
current: state
|
|
10
11
|
});
|
|
11
12
|
};
|
|
12
13
|
|
|
@@ -22,9 +23,11 @@ var useTransition = function useTransition(_temp) {
|
|
|
22
23
|
initialEntered = _ref.initialEntered,
|
|
23
24
|
mountOnEnter = _ref.mountOnEnter,
|
|
24
25
|
unmountOnExit = _ref.unmountOnExit,
|
|
25
|
-
onChange = _ref.
|
|
26
|
+
onChange = _ref.onStateChange;
|
|
26
27
|
|
|
27
|
-
var _useState = useState(
|
|
28
|
+
var _useState = useState(function () {
|
|
29
|
+
return getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter));
|
|
30
|
+
}),
|
|
28
31
|
state = _useState[0],
|
|
29
32
|
setState = _useState[1];
|
|
30
33
|
|
|
@@ -36,14 +39,14 @@ var useTransition = function useTransition(_temp) {
|
|
|
36
39
|
exitTimeout = _getTimeout[1];
|
|
37
40
|
|
|
38
41
|
var endTransition = useCallback(function () {
|
|
39
|
-
var
|
|
40
|
-
|
|
42
|
+
var status = getEndStatus(latestState.current._status, unmountOnExit);
|
|
43
|
+
status && updateState(status, setState, latestState, timeoutId, onChange);
|
|
41
44
|
}, [onChange, unmountOnExit]);
|
|
42
45
|
var toggle = useCallback(function (toEnter) {
|
|
43
|
-
var transitState = function transitState(
|
|
44
|
-
updateState(
|
|
46
|
+
var transitState = function transitState(status) {
|
|
47
|
+
updateState(status, setState, latestState, timeoutId, onChange);
|
|
45
48
|
|
|
46
|
-
switch (
|
|
49
|
+
switch (status) {
|
|
47
50
|
case ENTERING:
|
|
48
51
|
if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
|
|
49
52
|
break;
|
|
@@ -55,13 +58,13 @@ var useTransition = function useTransition(_temp) {
|
|
|
55
58
|
case PRE_ENTER:
|
|
56
59
|
case PRE_EXIT:
|
|
57
60
|
timeoutId.current = setTimeout(function () {
|
|
58
|
-
return transitState(
|
|
61
|
+
return transitState(status + 1);
|
|
59
62
|
}, 0);
|
|
60
63
|
break;
|
|
61
64
|
}
|
|
62
65
|
};
|
|
63
66
|
|
|
64
|
-
var enterStage = latestState.current <= ENTERED;
|
|
67
|
+
var enterStage = latestState.current._status <= ENTERED;
|
|
65
68
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
66
69
|
|
|
67
70
|
if (toEnter) {
|
|
@@ -75,7 +78,7 @@ var useTransition = function useTransition(_temp) {
|
|
|
75
78
|
return clearTimeout(timeoutId.current);
|
|
76
79
|
};
|
|
77
80
|
}, []);
|
|
78
|
-
return [
|
|
81
|
+
return [state, toggle, endTransition];
|
|
79
82
|
};
|
|
80
83
|
|
|
81
84
|
export { useTransition };
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { useState, useRef, useCallback } from 'react';
|
|
2
|
-
import { getTimeout, ENTERED, startOrEnd,
|
|
2
|
+
import { getTimeout, ENTERED, startOrEnd, getEndStatus, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, getState } from './utils.js';
|
|
3
3
|
|
|
4
4
|
var initialStateMap = new Map();
|
|
5
5
|
var initialConfigMap = new Map();
|
|
6
6
|
|
|
7
7
|
var updateState = function updateState(_ref) {
|
|
8
8
|
var key = _ref.key,
|
|
9
|
-
|
|
9
|
+
status = _ref.status,
|
|
10
10
|
setStateMap = _ref.setStateMap,
|
|
11
11
|
latestStateMap = _ref.latestStateMap,
|
|
12
12
|
timeoutId = _ref.timeoutId,
|
|
13
13
|
onChange = _ref.onChange;
|
|
14
14
|
clearTimeout(timeoutId);
|
|
15
|
-
var state =
|
|
15
|
+
var state = getState(status);
|
|
16
16
|
var stateMap = new Map(latestStateMap.current);
|
|
17
17
|
stateMap.set(key, state);
|
|
18
18
|
setStateMap(stateMap);
|
|
@@ -54,10 +54,10 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
54
54
|
_ref3$initialEntered = _ref3.initialEntered,
|
|
55
55
|
_initialEntered = _ref3$initialEntered === void 0 ? initialEntered : _ref3$initialEntered;
|
|
56
56
|
|
|
57
|
-
var
|
|
57
|
+
var status = _initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
58
58
|
updateState({
|
|
59
59
|
key: key,
|
|
60
|
-
|
|
60
|
+
status: status,
|
|
61
61
|
setStateMap: setStateMap,
|
|
62
62
|
latestStateMap: latestStateMap
|
|
63
63
|
});
|
|
@@ -86,10 +86,10 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
86
86
|
var _configMap$current$ge = configMap.current.get(key),
|
|
87
87
|
timeoutId = _configMap$current$ge.timeoutId;
|
|
88
88
|
|
|
89
|
-
var
|
|
90
|
-
|
|
89
|
+
var status = getEndStatus(stateObj._status, unmountOnExit);
|
|
90
|
+
status && updateState({
|
|
91
91
|
key: key,
|
|
92
|
-
|
|
92
|
+
status: status,
|
|
93
93
|
setStateMap: setStateMap,
|
|
94
94
|
latestStateMap: latestStateMap,
|
|
95
95
|
timeoutId: timeoutId,
|
|
@@ -106,17 +106,17 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
106
106
|
|
|
107
107
|
var config = configMap.current.get(key);
|
|
108
108
|
|
|
109
|
-
var transitState = function transitState(
|
|
109
|
+
var transitState = function transitState(status) {
|
|
110
110
|
updateState({
|
|
111
111
|
key: key,
|
|
112
|
-
|
|
112
|
+
status: status,
|
|
113
113
|
setStateMap: setStateMap,
|
|
114
114
|
latestStateMap: latestStateMap,
|
|
115
115
|
timeoutId: config.timeoutId,
|
|
116
116
|
onChange: onChange
|
|
117
117
|
});
|
|
118
118
|
|
|
119
|
-
switch (
|
|
119
|
+
switch (status) {
|
|
120
120
|
case ENTERING:
|
|
121
121
|
if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
122
122
|
return endTransition(key);
|
|
@@ -132,13 +132,13 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
132
132
|
case PRE_ENTER:
|
|
133
133
|
case PRE_EXIT:
|
|
134
134
|
config.timeoutId = setTimeout(function () {
|
|
135
|
-
return transitState(
|
|
135
|
+
return transitState(status + 1);
|
|
136
136
|
}, 0);
|
|
137
137
|
break;
|
|
138
138
|
}
|
|
139
139
|
};
|
|
140
140
|
|
|
141
|
-
var enterStage = stateObj.
|
|
141
|
+
var enterStage = stateObj._status <= ENTERED;
|
|
142
142
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
143
143
|
|
|
144
144
|
if (toEnter) {
|
package/dist/es/hooks/utils.js
CHANGED
|
@@ -5,21 +5,21 @@ var PRE_EXIT = 3;
|
|
|
5
5
|
var EXITING = 4;
|
|
6
6
|
var EXITED = 5;
|
|
7
7
|
var UNMOUNTED = 6;
|
|
8
|
-
var
|
|
9
|
-
var
|
|
8
|
+
var STATUS = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
|
|
9
|
+
var getState = function getState(_status) {
|
|
10
10
|
return {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
isEnter:
|
|
14
|
-
isMounted:
|
|
15
|
-
isResolved:
|
|
11
|
+
_status: _status,
|
|
12
|
+
status: STATUS[_status],
|
|
13
|
+
isEnter: _status < PRE_EXIT,
|
|
14
|
+
isMounted: _status !== UNMOUNTED,
|
|
15
|
+
isResolved: _status === ENTERED || _status > EXITING
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
var startOrEnd = function startOrEnd(unmounted) {
|
|
19
19
|
return unmounted ? UNMOUNTED : EXITED;
|
|
20
20
|
};
|
|
21
|
-
var
|
|
22
|
-
switch (
|
|
21
|
+
var getEndStatus = function getEndStatus(status, unmountOnExit) {
|
|
22
|
+
switch (status) {
|
|
23
23
|
case ENTERING:
|
|
24
24
|
case PRE_ENTER:
|
|
25
25
|
return ENTERED;
|
|
@@ -33,4 +33,4 @@ var getTimeout = function getTimeout(timeout) {
|
|
|
33
33
|
return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
export { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT,
|
|
36
|
+
export { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATUS, UNMOUNTED, getEndStatus, getState, getTimeout, startOrEnd };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-transition-state",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Zero dependency
|
|
3
|
+
"version": "2.0.0-alpha.0",
|
|
4
|
+
"description": "Zero dependency React transition state machine.",
|
|
5
5
|
"author": "Zheng Song",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "szhsin/react-transition-state",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"transition",
|
|
20
20
|
"animation",
|
|
21
21
|
"component",
|
|
22
|
-
"hook"
|
|
22
|
+
"hook",
|
|
23
|
+
"state machine"
|
|
23
24
|
],
|
|
24
25
|
"scripts": {
|
|
25
26
|
"start": "rollup -c -w",
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type TransitionStatus =
|
|
2
2
|
| 'preEnter'
|
|
3
3
|
| 'entering'
|
|
4
4
|
| 'entered'
|
|
@@ -7,8 +7,8 @@ export type TransitionState =
|
|
|
7
7
|
| 'exited'
|
|
8
8
|
| 'unmounted';
|
|
9
9
|
|
|
10
|
-
export interface
|
|
11
|
-
|
|
10
|
+
export interface TransitionState {
|
|
11
|
+
status: TransitionStatus;
|
|
12
12
|
isMounted: boolean;
|
|
13
13
|
isEnter: boolean;
|
|
14
14
|
isResolved: boolean;
|
|
@@ -23,22 +23,22 @@ export interface TransitionOptions {
|
|
|
23
23
|
enter?: boolean;
|
|
24
24
|
exit?: boolean;
|
|
25
25
|
timeout?: number | { enter?: number; exit?: number };
|
|
26
|
-
|
|
26
|
+
onStateChange?: (event: { current: TransitionState }) => void;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface TransitionItemOptions {
|
|
30
30
|
initialEntered?: boolean;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export interface TransitionMapOptions<K> extends Omit<TransitionOptions, '
|
|
33
|
+
export interface TransitionMapOptions<K> extends Omit<TransitionOptions, 'onStateChange'> {
|
|
34
34
|
singleEnter?: boolean;
|
|
35
|
-
onStateChange?: (event: { key: K; current:
|
|
35
|
+
onStateChange?: (event: { key: K; current: TransitionState }) => void;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export type TransitionResult = [TransitionState, (toEnter?: boolean) => void, () => void];
|
|
39
39
|
|
|
40
40
|
export interface TransitionMapResult<K> {
|
|
41
|
-
stateMap:
|
|
41
|
+
stateMap: ReadonlyMap<K, TransitionState>;
|
|
42
42
|
toggle: (key: K, toEnter?: boolean) => void;
|
|
43
43
|
endTransition: (key: K) => void;
|
|
44
44
|
setItem: (key: K, options?: TransitionItemOptions) => void;
|