react-transition-state 1.2.0-alpha.3 → 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 +69 -89
- package/dist/es/hooks/useTransition.js +18 -19
- package/dist/es/hooks/useTransitionMap.js +44 -47
- package/dist/es/hooks/utils.js +10 -9
- package/package.json +4 -3
- package/types/index.d.ts +12 -10
- package/dist/es/_virtual/_rollupPluginBabelHelpers.js +0 -19
package/dist/cjs/index.js
CHANGED
|
@@ -11,20 +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:
|
|
17
|
+
_status: _status,
|
|
18
|
+
status: STATUS[_status],
|
|
19
|
+
isEnter: _status < PRE_EXIT,
|
|
20
|
+
isMounted: _status !== UNMOUNTED,
|
|
21
|
+
isResolved: _status === ENTERED || _status > EXITING
|
|
21
22
|
};
|
|
22
23
|
};
|
|
23
24
|
var startOrEnd = function startOrEnd(unmounted) {
|
|
24
25
|
return unmounted ? UNMOUNTED : EXITED;
|
|
25
26
|
};
|
|
26
|
-
var
|
|
27
|
-
switch (
|
|
27
|
+
var getEndStatus = function getEndStatus(status, unmountOnExit) {
|
|
28
|
+
switch (status) {
|
|
28
29
|
case ENTERING:
|
|
29
30
|
case PRE_ENTER:
|
|
30
31
|
return ENTERED;
|
|
@@ -38,12 +39,13 @@ var getTimeout = function getTimeout(timeout) {
|
|
|
38
39
|
return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
var updateState$1 = function updateState(
|
|
42
|
+
var updateState$1 = function updateState(status, setState, latestState, timeoutId, onChange) {
|
|
42
43
|
clearTimeout(timeoutId.current);
|
|
44
|
+
var state = getState(status);
|
|
43
45
|
setState(state);
|
|
44
46
|
latestState.current = state;
|
|
45
47
|
onChange && onChange({
|
|
46
|
-
|
|
48
|
+
current: state
|
|
47
49
|
});
|
|
48
50
|
};
|
|
49
51
|
|
|
@@ -59,9 +61,11 @@ var useTransition = function useTransition(_temp) {
|
|
|
59
61
|
initialEntered = _ref.initialEntered,
|
|
60
62
|
mountOnEnter = _ref.mountOnEnter,
|
|
61
63
|
unmountOnExit = _ref.unmountOnExit,
|
|
62
|
-
onChange = _ref.
|
|
64
|
+
onChange = _ref.onStateChange;
|
|
63
65
|
|
|
64
|
-
var _useState = react.useState(
|
|
66
|
+
var _useState = react.useState(function () {
|
|
67
|
+
return getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter));
|
|
68
|
+
}),
|
|
65
69
|
state = _useState[0],
|
|
66
70
|
setState = _useState[1];
|
|
67
71
|
|
|
@@ -73,14 +77,14 @@ var useTransition = function useTransition(_temp) {
|
|
|
73
77
|
exitTimeout = _getTimeout[1];
|
|
74
78
|
|
|
75
79
|
var endTransition = react.useCallback(function () {
|
|
76
|
-
var
|
|
77
|
-
|
|
80
|
+
var status = getEndStatus(latestState.current._status, unmountOnExit);
|
|
81
|
+
status && updateState$1(status, setState, latestState, timeoutId, onChange);
|
|
78
82
|
}, [onChange, unmountOnExit]);
|
|
79
83
|
var toggle = react.useCallback(function (toEnter) {
|
|
80
|
-
var transitState = function transitState(
|
|
81
|
-
updateState$1(
|
|
84
|
+
var transitState = function transitState(status) {
|
|
85
|
+
updateState$1(status, setState, latestState, timeoutId, onChange);
|
|
82
86
|
|
|
83
|
-
switch (
|
|
87
|
+
switch (status) {
|
|
84
88
|
case ENTERING:
|
|
85
89
|
if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
|
|
86
90
|
break;
|
|
@@ -92,23 +96,19 @@ var useTransition = function useTransition(_temp) {
|
|
|
92
96
|
case PRE_ENTER:
|
|
93
97
|
case PRE_EXIT:
|
|
94
98
|
timeoutId.current = setTimeout(function () {
|
|
95
|
-
return transitState(
|
|
99
|
+
return transitState(status + 1);
|
|
96
100
|
}, 0);
|
|
97
101
|
break;
|
|
98
102
|
}
|
|
99
103
|
};
|
|
100
104
|
|
|
101
|
-
var enterStage = latestState.current <= ENTERED;
|
|
105
|
+
var enterStage = latestState.current._status <= ENTERED;
|
|
102
106
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
103
107
|
|
|
104
108
|
if (toEnter) {
|
|
105
|
-
|
|
106
|
-
transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
107
|
-
}
|
|
109
|
+
!enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
108
110
|
} else {
|
|
109
|
-
|
|
110
|
-
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
111
|
-
}
|
|
111
|
+
enterStage && transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
112
112
|
}
|
|
113
113
|
}, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
|
|
114
114
|
react.useEffect(function () {
|
|
@@ -116,51 +116,45 @@ var useTransition = function useTransition(_temp) {
|
|
|
116
116
|
return clearTimeout(timeoutId.current);
|
|
117
117
|
};
|
|
118
118
|
}, []);
|
|
119
|
-
return [
|
|
119
|
+
return [state, toggle, endTransition];
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
-
function _extends() {
|
|
123
|
-
_extends = Object.assign || function (target) {
|
|
124
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
125
|
-
var source = arguments[i];
|
|
126
|
-
|
|
127
|
-
for (var key in source) {
|
|
128
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
129
|
-
target[key] = source[key];
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return target;
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
return _extends.apply(this, arguments);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
122
|
var initialStateMap = new Map();
|
|
141
123
|
var initialConfigMap = new Map();
|
|
142
124
|
|
|
143
125
|
var updateState = function updateState(_ref) {
|
|
144
126
|
var key = _ref.key,
|
|
145
|
-
|
|
127
|
+
status = _ref.status,
|
|
146
128
|
setStateMap = _ref.setStateMap,
|
|
147
129
|
latestStateMap = _ref.latestStateMap,
|
|
148
130
|
timeoutId = _ref.timeoutId,
|
|
149
131
|
onChange = _ref.onChange;
|
|
150
132
|
clearTimeout(timeoutId);
|
|
151
|
-
var state =
|
|
133
|
+
var state = getState(status);
|
|
152
134
|
var stateMap = new Map(latestStateMap.current);
|
|
153
135
|
stateMap.set(key, state);
|
|
154
136
|
setStateMap(stateMap);
|
|
155
137
|
latestStateMap.current = stateMap;
|
|
156
|
-
onChange && onChange(
|
|
157
|
-
key: key
|
|
158
|
-
|
|
138
|
+
onChange && onChange({
|
|
139
|
+
key: key,
|
|
140
|
+
current: state
|
|
141
|
+
});
|
|
159
142
|
};
|
|
160
143
|
|
|
161
144
|
var useTransitionMap = function useTransitionMap(_temp) {
|
|
162
145
|
var _ref2 = _temp === void 0 ? {} : _temp,
|
|
163
|
-
singleEnter = _ref2.singleEnter
|
|
146
|
+
singleEnter = _ref2.singleEnter,
|
|
147
|
+
_ref2$enter = _ref2.enter,
|
|
148
|
+
enter = _ref2$enter === void 0 ? true : _ref2$enter,
|
|
149
|
+
_ref2$exit = _ref2.exit,
|
|
150
|
+
exit = _ref2$exit === void 0 ? true : _ref2$exit,
|
|
151
|
+
preEnter = _ref2.preEnter,
|
|
152
|
+
preExit = _ref2.preExit,
|
|
153
|
+
timeout = _ref2.timeout,
|
|
154
|
+
initialEntered = _ref2.initialEntered,
|
|
155
|
+
mountOnEnter = _ref2.mountOnEnter,
|
|
156
|
+
unmountOnExit = _ref2.unmountOnExit,
|
|
157
|
+
onChange = _ref2.onStateChange;
|
|
164
158
|
|
|
165
159
|
var _useState = react.useState(initialStateMap),
|
|
166
160
|
stateMap = _useState[0],
|
|
@@ -168,23 +162,25 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
168
162
|
|
|
169
163
|
var latestStateMap = react.useRef(stateMap);
|
|
170
164
|
var configMap = react.useRef(initialConfigMap);
|
|
165
|
+
|
|
166
|
+
var _getTimeout = getTimeout(timeout),
|
|
167
|
+
enterTimeout = _getTimeout[0],
|
|
168
|
+
exitTimeout = _getTimeout[1];
|
|
169
|
+
|
|
171
170
|
var setItem = react.useCallback(function (key, config) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
171
|
+
var _ref3 = config || {},
|
|
172
|
+
_ref3$initialEntered = _ref3.initialEntered,
|
|
173
|
+
_initialEntered = _ref3$initialEntered === void 0 ? initialEntered : _ref3$initialEntered;
|
|
175
174
|
|
|
176
|
-
var
|
|
177
|
-
initialEntered = _config.initialEntered,
|
|
178
|
-
mountOnEnter = _config.mountOnEnter;
|
|
179
|
-
var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
175
|
+
var status = _initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
180
176
|
updateState({
|
|
181
177
|
key: key,
|
|
182
|
-
|
|
178
|
+
status: status,
|
|
183
179
|
setStateMap: setStateMap,
|
|
184
180
|
latestStateMap: latestStateMap
|
|
185
181
|
});
|
|
186
|
-
configMap.current.set(key,
|
|
187
|
-
}, []);
|
|
182
|
+
configMap.current.set(key, {});
|
|
183
|
+
}, [initialEntered, mountOnEnter]);
|
|
188
184
|
var deleteItem = react.useCallback(function (key) {
|
|
189
185
|
var newStateMap = new Map(latestStateMap.current);
|
|
190
186
|
|
|
@@ -206,20 +202,18 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
206
202
|
}
|
|
207
203
|
|
|
208
204
|
var _configMap$current$ge = configMap.current.get(key),
|
|
209
|
-
timeoutId = _configMap$current$ge.timeoutId
|
|
210
|
-
onChange = _configMap$current$ge.onChange,
|
|
211
|
-
unmountOnExit = _configMap$current$ge.unmountOnExit;
|
|
205
|
+
timeoutId = _configMap$current$ge.timeoutId;
|
|
212
206
|
|
|
213
|
-
var
|
|
214
|
-
|
|
207
|
+
var status = getEndStatus(stateObj._status, unmountOnExit);
|
|
208
|
+
status && updateState({
|
|
215
209
|
key: key,
|
|
216
|
-
|
|
210
|
+
status: status,
|
|
217
211
|
setStateMap: setStateMap,
|
|
218
212
|
latestStateMap: latestStateMap,
|
|
219
213
|
timeoutId: timeoutId,
|
|
220
214
|
onChange: onChange
|
|
221
215
|
});
|
|
222
|
-
}, []);
|
|
216
|
+
}, [onChange, unmountOnExit]);
|
|
223
217
|
var toggle = react.useCallback(function (key, toEnter) {
|
|
224
218
|
var stateObj = latestStateMap.current.get(key);
|
|
225
219
|
|
|
@@ -229,32 +223,18 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
229
223
|
}
|
|
230
224
|
|
|
231
225
|
var config = configMap.current.get(key);
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
_config$exit = config.exit,
|
|
235
|
-
exit = _config$exit === void 0 ? true : _config$exit,
|
|
236
|
-
preEnter = config.preEnter,
|
|
237
|
-
preExit = config.preExit,
|
|
238
|
-
timeout = config.timeout,
|
|
239
|
-
unmountOnExit = config.unmountOnExit,
|
|
240
|
-
onChange = config.onChange,
|
|
241
|
-
timeoutId = config.timeoutId;
|
|
242
|
-
|
|
243
|
-
var transitState = function transitState(newState) {
|
|
226
|
+
|
|
227
|
+
var transitState = function transitState(status) {
|
|
244
228
|
updateState({
|
|
245
229
|
key: key,
|
|
246
|
-
|
|
230
|
+
status: status,
|
|
247
231
|
setStateMap: setStateMap,
|
|
248
232
|
latestStateMap: latestStateMap,
|
|
249
|
-
timeoutId: timeoutId,
|
|
233
|
+
timeoutId: config.timeoutId,
|
|
250
234
|
onChange: onChange
|
|
251
235
|
});
|
|
252
236
|
|
|
253
|
-
|
|
254
|
-
enterTimeout = _getTimeout[0],
|
|
255
|
-
exitTimeout = _getTimeout[1];
|
|
256
|
-
|
|
257
|
-
switch (newState) {
|
|
237
|
+
switch (status) {
|
|
258
238
|
case ENTERING:
|
|
259
239
|
if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
260
240
|
return endTransition(key);
|
|
@@ -270,13 +250,13 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
270
250
|
case PRE_ENTER:
|
|
271
251
|
case PRE_EXIT:
|
|
272
252
|
config.timeoutId = setTimeout(function () {
|
|
273
|
-
return transitState(
|
|
253
|
+
return transitState(status + 1);
|
|
274
254
|
}, 0);
|
|
275
255
|
break;
|
|
276
256
|
}
|
|
277
257
|
};
|
|
278
258
|
|
|
279
|
-
var enterStage = stateObj.
|
|
259
|
+
var enterStage = stateObj._status <= ENTERED;
|
|
280
260
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
281
261
|
|
|
282
262
|
if (toEnter) {
|
|
@@ -291,7 +271,7 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
291
271
|
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
292
272
|
}
|
|
293
273
|
}
|
|
294
|
-
}, [endTransition, singleEnter]);
|
|
274
|
+
}, [onChange, endTransition, singleEnter, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
|
|
295
275
|
return {
|
|
296
276
|
stateMap: stateMap,
|
|
297
277
|
toggle: toggle,
|
|
@@ -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,23 +58,19 @@ 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) {
|
|
68
|
-
|
|
69
|
-
transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
70
|
-
}
|
|
71
|
+
!enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
71
72
|
} else {
|
|
72
|
-
|
|
73
|
-
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
74
|
-
}
|
|
73
|
+
enterStage && transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
75
74
|
}
|
|
76
75
|
}, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
|
|
77
76
|
useEffect(function () {
|
|
@@ -79,7 +78,7 @@ var useTransition = function useTransition(_temp) {
|
|
|
79
78
|
return clearTimeout(timeoutId.current);
|
|
80
79
|
};
|
|
81
80
|
}, []);
|
|
82
|
-
return [
|
|
81
|
+
return [state, toggle, endTransition];
|
|
83
82
|
};
|
|
84
83
|
|
|
85
84
|
export { useTransition };
|
|
@@ -1,31 +1,42 @@
|
|
|
1
|
-
import { extends as _extends } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import { useState, useRef, useCallback } from 'react';
|
|
3
|
-
import { ENTERED, startOrEnd,
|
|
2
|
+
import { getTimeout, ENTERED, startOrEnd, getEndStatus, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, getState } from './utils.js';
|
|
4
3
|
|
|
5
4
|
var initialStateMap = new Map();
|
|
6
5
|
var initialConfigMap = new Map();
|
|
7
6
|
|
|
8
7
|
var updateState = function updateState(_ref) {
|
|
9
8
|
var key = _ref.key,
|
|
10
|
-
|
|
9
|
+
status = _ref.status,
|
|
11
10
|
setStateMap = _ref.setStateMap,
|
|
12
11
|
latestStateMap = _ref.latestStateMap,
|
|
13
12
|
timeoutId = _ref.timeoutId,
|
|
14
13
|
onChange = _ref.onChange;
|
|
15
14
|
clearTimeout(timeoutId);
|
|
16
|
-
var state =
|
|
15
|
+
var state = getState(status);
|
|
17
16
|
var stateMap = new Map(latestStateMap.current);
|
|
18
17
|
stateMap.set(key, state);
|
|
19
18
|
setStateMap(stateMap);
|
|
20
19
|
latestStateMap.current = stateMap;
|
|
21
|
-
onChange && onChange(
|
|
22
|
-
key: key
|
|
23
|
-
|
|
20
|
+
onChange && onChange({
|
|
21
|
+
key: key,
|
|
22
|
+
current: state
|
|
23
|
+
});
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
var useTransitionMap = function useTransitionMap(_temp) {
|
|
27
27
|
var _ref2 = _temp === void 0 ? {} : _temp,
|
|
28
|
-
singleEnter = _ref2.singleEnter
|
|
28
|
+
singleEnter = _ref2.singleEnter,
|
|
29
|
+
_ref2$enter = _ref2.enter,
|
|
30
|
+
enter = _ref2$enter === void 0 ? true : _ref2$enter,
|
|
31
|
+
_ref2$exit = _ref2.exit,
|
|
32
|
+
exit = _ref2$exit === void 0 ? true : _ref2$exit,
|
|
33
|
+
preEnter = _ref2.preEnter,
|
|
34
|
+
preExit = _ref2.preExit,
|
|
35
|
+
timeout = _ref2.timeout,
|
|
36
|
+
initialEntered = _ref2.initialEntered,
|
|
37
|
+
mountOnEnter = _ref2.mountOnEnter,
|
|
38
|
+
unmountOnExit = _ref2.unmountOnExit,
|
|
39
|
+
onChange = _ref2.onStateChange;
|
|
29
40
|
|
|
30
41
|
var _useState = useState(initialStateMap),
|
|
31
42
|
stateMap = _useState[0],
|
|
@@ -33,23 +44,25 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
33
44
|
|
|
34
45
|
var latestStateMap = useRef(stateMap);
|
|
35
46
|
var configMap = useRef(initialConfigMap);
|
|
47
|
+
|
|
48
|
+
var _getTimeout = getTimeout(timeout),
|
|
49
|
+
enterTimeout = _getTimeout[0],
|
|
50
|
+
exitTimeout = _getTimeout[1];
|
|
51
|
+
|
|
36
52
|
var setItem = useCallback(function (key, config) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
53
|
+
var _ref3 = config || {},
|
|
54
|
+
_ref3$initialEntered = _ref3.initialEntered,
|
|
55
|
+
_initialEntered = _ref3$initialEntered === void 0 ? initialEntered : _ref3$initialEntered;
|
|
40
56
|
|
|
41
|
-
var
|
|
42
|
-
initialEntered = _config.initialEntered,
|
|
43
|
-
mountOnEnter = _config.mountOnEnter;
|
|
44
|
-
var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
57
|
+
var status = _initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
45
58
|
updateState({
|
|
46
59
|
key: key,
|
|
47
|
-
|
|
60
|
+
status: status,
|
|
48
61
|
setStateMap: setStateMap,
|
|
49
62
|
latestStateMap: latestStateMap
|
|
50
63
|
});
|
|
51
|
-
configMap.current.set(key,
|
|
52
|
-
}, []);
|
|
64
|
+
configMap.current.set(key, {});
|
|
65
|
+
}, [initialEntered, mountOnEnter]);
|
|
53
66
|
var deleteItem = useCallback(function (key) {
|
|
54
67
|
var newStateMap = new Map(latestStateMap.current);
|
|
55
68
|
|
|
@@ -71,20 +84,18 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
var _configMap$current$ge = configMap.current.get(key),
|
|
74
|
-
timeoutId = _configMap$current$ge.timeoutId
|
|
75
|
-
onChange = _configMap$current$ge.onChange,
|
|
76
|
-
unmountOnExit = _configMap$current$ge.unmountOnExit;
|
|
87
|
+
timeoutId = _configMap$current$ge.timeoutId;
|
|
77
88
|
|
|
78
|
-
var
|
|
79
|
-
|
|
89
|
+
var status = getEndStatus(stateObj._status, unmountOnExit);
|
|
90
|
+
status && updateState({
|
|
80
91
|
key: key,
|
|
81
|
-
|
|
92
|
+
status: status,
|
|
82
93
|
setStateMap: setStateMap,
|
|
83
94
|
latestStateMap: latestStateMap,
|
|
84
95
|
timeoutId: timeoutId,
|
|
85
96
|
onChange: onChange
|
|
86
97
|
});
|
|
87
|
-
}, []);
|
|
98
|
+
}, [onChange, unmountOnExit]);
|
|
88
99
|
var toggle = useCallback(function (key, toEnter) {
|
|
89
100
|
var stateObj = latestStateMap.current.get(key);
|
|
90
101
|
|
|
@@ -94,32 +105,18 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
94
105
|
}
|
|
95
106
|
|
|
96
107
|
var config = configMap.current.get(key);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
_config$exit = config.exit,
|
|
100
|
-
exit = _config$exit === void 0 ? true : _config$exit,
|
|
101
|
-
preEnter = config.preEnter,
|
|
102
|
-
preExit = config.preExit,
|
|
103
|
-
timeout = config.timeout,
|
|
104
|
-
unmountOnExit = config.unmountOnExit,
|
|
105
|
-
onChange = config.onChange,
|
|
106
|
-
timeoutId = config.timeoutId;
|
|
107
|
-
|
|
108
|
-
var transitState = function transitState(newState) {
|
|
108
|
+
|
|
109
|
+
var transitState = function transitState(status) {
|
|
109
110
|
updateState({
|
|
110
111
|
key: key,
|
|
111
|
-
|
|
112
|
+
status: status,
|
|
112
113
|
setStateMap: setStateMap,
|
|
113
114
|
latestStateMap: latestStateMap,
|
|
114
|
-
timeoutId: timeoutId,
|
|
115
|
+
timeoutId: config.timeoutId,
|
|
115
116
|
onChange: onChange
|
|
116
117
|
});
|
|
117
118
|
|
|
118
|
-
|
|
119
|
-
enterTimeout = _getTimeout[0],
|
|
120
|
-
exitTimeout = _getTimeout[1];
|
|
121
|
-
|
|
122
|
-
switch (newState) {
|
|
119
|
+
switch (status) {
|
|
123
120
|
case ENTERING:
|
|
124
121
|
if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
125
122
|
return endTransition(key);
|
|
@@ -135,13 +132,13 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
135
132
|
case PRE_ENTER:
|
|
136
133
|
case PRE_EXIT:
|
|
137
134
|
config.timeoutId = setTimeout(function () {
|
|
138
|
-
return transitState(
|
|
135
|
+
return transitState(status + 1);
|
|
139
136
|
}, 0);
|
|
140
137
|
break;
|
|
141
138
|
}
|
|
142
139
|
};
|
|
143
140
|
|
|
144
|
-
var enterStage = stateObj.
|
|
141
|
+
var enterStage = stateObj._status <= ENTERED;
|
|
145
142
|
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
146
143
|
|
|
147
144
|
if (toEnter) {
|
|
@@ -156,7 +153,7 @@ var useTransitionMap = function useTransitionMap(_temp) {
|
|
|
156
153
|
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
157
154
|
}
|
|
158
155
|
}
|
|
159
|
-
}, [endTransition, singleEnter]);
|
|
156
|
+
}, [onChange, endTransition, singleEnter, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
|
|
160
157
|
return {
|
|
161
158
|
stateMap: stateMap,
|
|
162
159
|
toggle: toggle,
|
package/dist/es/hooks/utils.js
CHANGED
|
@@ -5,20 +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:
|
|
11
|
+
_status: _status,
|
|
12
|
+
status: STATUS[_status],
|
|
13
|
+
isEnter: _status < PRE_EXIT,
|
|
14
|
+
isMounted: _status !== UNMOUNTED,
|
|
15
|
+
isResolved: _status === ENTERED || _status > EXITING
|
|
15
16
|
};
|
|
16
17
|
};
|
|
17
18
|
var startOrEnd = function startOrEnd(unmounted) {
|
|
18
19
|
return unmounted ? UNMOUNTED : EXITED;
|
|
19
20
|
};
|
|
20
|
-
var
|
|
21
|
-
switch (
|
|
21
|
+
var getEndStatus = function getEndStatus(status, unmountOnExit) {
|
|
22
|
+
switch (status) {
|
|
22
23
|
case ENTERING:
|
|
23
24
|
case PRE_ENTER:
|
|
24
25
|
return ENTERED;
|
|
@@ -32,4 +33,4 @@ var getTimeout = function getTimeout(timeout) {
|
|
|
32
33
|
return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
|
|
33
34
|
};
|
|
34
35
|
|
|
35
|
-
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,10 +7,11 @@ 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
|
+
isResolved: boolean;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export interface TransitionOptions {
|
|
@@ -22,29 +23,30 @@ export interface TransitionOptions {
|
|
|
22
23
|
enter?: boolean;
|
|
23
24
|
exit?: boolean;
|
|
24
25
|
timeout?: number | { enter?: number; exit?: number };
|
|
25
|
-
|
|
26
|
+
onStateChange?: (event: { current: TransitionState }) => void;
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
export interface TransitionItemOptions
|
|
29
|
-
|
|
29
|
+
export interface TransitionItemOptions {
|
|
30
|
+
initialEntered?: boolean;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
export interface TransitionMapOptions {
|
|
33
|
+
export interface TransitionMapOptions<K> extends Omit<TransitionOptions, 'onStateChange'> {
|
|
33
34
|
singleEnter?: boolean;
|
|
35
|
+
onStateChange?: (event: { key: K; current: TransitionState }) => void;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
export type TransitionResult = [TransitionState, (toEnter?: boolean) => void, () => void];
|
|
37
39
|
|
|
38
40
|
export interface TransitionMapResult<K> {
|
|
39
|
-
stateMap:
|
|
41
|
+
stateMap: ReadonlyMap<K, TransitionState>;
|
|
40
42
|
toggle: (key: K, toEnter?: boolean) => void;
|
|
41
43
|
endTransition: (key: K) => void;
|
|
42
|
-
setItem: (key: K, options?: TransitionItemOptions
|
|
44
|
+
setItem: (key: K, options?: TransitionItemOptions) => void;
|
|
43
45
|
deleteItem: (key: K) => boolean;
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
export const useTransition: (options?: TransitionOptions) => TransitionResult;
|
|
47
49
|
|
|
48
|
-
export const useTransitionMap: <K>(options?: TransitionMapOptions) => TransitionMapResult<K>;
|
|
50
|
+
export const useTransitionMap: <K>(options?: TransitionMapOptions<K>) => TransitionMapResult<K>;
|
|
49
51
|
|
|
50
52
|
export default useTransition;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
function _extends() {
|
|
2
|
-
_extends = Object.assign || function (target) {
|
|
3
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
4
|
-
var source = arguments[i];
|
|
5
|
-
|
|
6
|
-
for (var key in source) {
|
|
7
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
8
|
-
target[key] = source[key];
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return target;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
return _extends.apply(this, arguments);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export { _extends as extends };
|