react-transition-state 1.1.4 → 1.2.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/cjs/index.js +306 -0
- package/dist/es/_virtual/_rollupPluginBabelHelpers.js +19 -0
- package/dist/{index.es.js → es/hooks/useTransition.js} +7 -38
- package/dist/es/hooks/useTransitionMap.js +169 -0
- package/dist/es/hooks/utils.js +35 -0
- package/dist/es/index.js +2 -0
- package/package.json +19 -18
- package/{dist → types}/index.d.ts +18 -0
- package/dist/index.js +0 -121
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
var PRE_ENTER = 0;
|
|
8
|
+
var ENTERING = 1;
|
|
9
|
+
var ENTERED = 2;
|
|
10
|
+
var PRE_EXIT = 3;
|
|
11
|
+
var EXITING = 4;
|
|
12
|
+
var EXITED = 5;
|
|
13
|
+
var UNMOUNTED = 6;
|
|
14
|
+
var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
|
|
15
|
+
var getFullState = function getFullState(_state) {
|
|
16
|
+
return {
|
|
17
|
+
_state: _state,
|
|
18
|
+
state: STATES[_state],
|
|
19
|
+
isEnter: _state < PRE_EXIT,
|
|
20
|
+
isMounted: _state !== UNMOUNTED
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
var startOrEnd = function startOrEnd(unmounted) {
|
|
24
|
+
return unmounted ? UNMOUNTED : EXITED;
|
|
25
|
+
};
|
|
26
|
+
var getEndState = function getEndState(state, unmountOnExit) {
|
|
27
|
+
switch (state) {
|
|
28
|
+
case ENTERING:
|
|
29
|
+
case PRE_ENTER:
|
|
30
|
+
return ENTERED;
|
|
31
|
+
|
|
32
|
+
case EXITING:
|
|
33
|
+
case PRE_EXIT:
|
|
34
|
+
return startOrEnd(unmountOnExit);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var getTimeout = function getTimeout(timeout) {
|
|
38
|
+
return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var updateState$1 = function updateState(state, setState, latestState, timeoutId, onChange) {
|
|
42
|
+
clearTimeout(timeoutId.current);
|
|
43
|
+
setState(state);
|
|
44
|
+
latestState.current = state;
|
|
45
|
+
onChange && onChange({
|
|
46
|
+
state: STATES[state]
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
var useTransition = function useTransition(_temp) {
|
|
51
|
+
var _ref = _temp === void 0 ? {} : _temp,
|
|
52
|
+
_ref$enter = _ref.enter,
|
|
53
|
+
enter = _ref$enter === void 0 ? true : _ref$enter,
|
|
54
|
+
_ref$exit = _ref.exit,
|
|
55
|
+
exit = _ref$exit === void 0 ? true : _ref$exit,
|
|
56
|
+
preEnter = _ref.preEnter,
|
|
57
|
+
preExit = _ref.preExit,
|
|
58
|
+
timeout = _ref.timeout,
|
|
59
|
+
initialEntered = _ref.initialEntered,
|
|
60
|
+
mountOnEnter = _ref.mountOnEnter,
|
|
61
|
+
unmountOnExit = _ref.unmountOnExit,
|
|
62
|
+
onChange = _ref.onChange;
|
|
63
|
+
|
|
64
|
+
var _useState = react.useState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)),
|
|
65
|
+
state = _useState[0],
|
|
66
|
+
setState = _useState[1];
|
|
67
|
+
|
|
68
|
+
var latestState = react.useRef(state);
|
|
69
|
+
var timeoutId = react.useRef();
|
|
70
|
+
|
|
71
|
+
var _getTimeout = getTimeout(timeout),
|
|
72
|
+
enterTimeout = _getTimeout[0],
|
|
73
|
+
exitTimeout = _getTimeout[1];
|
|
74
|
+
|
|
75
|
+
var endTransition = react.useCallback(function () {
|
|
76
|
+
var newState = getEndState(latestState.current, unmountOnExit);
|
|
77
|
+
newState && updateState$1(newState, setState, latestState, timeoutId, onChange);
|
|
78
|
+
}, [onChange, unmountOnExit]);
|
|
79
|
+
var toggle = react.useCallback(function (toEnter) {
|
|
80
|
+
var transitState = function transitState(newState) {
|
|
81
|
+
updateState$1(newState, setState, latestState, timeoutId, onChange);
|
|
82
|
+
|
|
83
|
+
switch (newState) {
|
|
84
|
+
case ENTERING:
|
|
85
|
+
if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
|
|
86
|
+
break;
|
|
87
|
+
|
|
88
|
+
case EXITING:
|
|
89
|
+
if (exitTimeout >= 0) timeoutId.current = setTimeout(endTransition, exitTimeout);
|
|
90
|
+
break;
|
|
91
|
+
|
|
92
|
+
case PRE_ENTER:
|
|
93
|
+
case PRE_EXIT:
|
|
94
|
+
timeoutId.current = setTimeout(function () {
|
|
95
|
+
return transitState(newState + 1);
|
|
96
|
+
}, 0);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
var enterStage = latestState.current <= ENTERED;
|
|
102
|
+
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
103
|
+
|
|
104
|
+
if (toEnter) {
|
|
105
|
+
if (!enterStage) {
|
|
106
|
+
transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
if (enterStage) {
|
|
110
|
+
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
|
|
114
|
+
react.useEffect(function () {
|
|
115
|
+
return function () {
|
|
116
|
+
return clearTimeout(timeoutId.current);
|
|
117
|
+
};
|
|
118
|
+
}, []);
|
|
119
|
+
return [STATES[state], toggle, endTransition];
|
|
120
|
+
};
|
|
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
|
+
var initialStateMap = new Map();
|
|
141
|
+
var initialConfigMap = new Map();
|
|
142
|
+
|
|
143
|
+
var updateState = function updateState(_ref) {
|
|
144
|
+
var key = _ref.key,
|
|
145
|
+
_state = _ref.newState,
|
|
146
|
+
setStateMap = _ref.setStateMap,
|
|
147
|
+
latestStateMap = _ref.latestStateMap,
|
|
148
|
+
timeoutId = _ref.timeoutId,
|
|
149
|
+
onChange = _ref.onChange;
|
|
150
|
+
clearTimeout(timeoutId);
|
|
151
|
+
var state = getFullState(_state);
|
|
152
|
+
var stateMap = new Map(latestStateMap.current);
|
|
153
|
+
stateMap.set(key, state);
|
|
154
|
+
setStateMap(stateMap);
|
|
155
|
+
latestStateMap.current = stateMap;
|
|
156
|
+
onChange && onChange(_extends({
|
|
157
|
+
key: key
|
|
158
|
+
}, state));
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
var useTransitionMap = function useTransitionMap(_temp) {
|
|
162
|
+
var _ref2 = _temp === void 0 ? {} : _temp,
|
|
163
|
+
singleEnter = _ref2.singleEnter;
|
|
164
|
+
|
|
165
|
+
var _useState = react.useState(initialStateMap),
|
|
166
|
+
stateMap = _useState[0],
|
|
167
|
+
setStateMap = _useState[1];
|
|
168
|
+
|
|
169
|
+
var latestStateMap = react.useRef(stateMap);
|
|
170
|
+
var configMap = react.useRef(initialConfigMap);
|
|
171
|
+
var setItem = react.useCallback(function (key, config) {
|
|
172
|
+
if (config === void 0) {
|
|
173
|
+
config = {};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
var _config = config,
|
|
177
|
+
initialEntered = _config.initialEntered,
|
|
178
|
+
mountOnEnter = _config.mountOnEnter;
|
|
179
|
+
var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
180
|
+
updateState({
|
|
181
|
+
key: key,
|
|
182
|
+
newState: newState,
|
|
183
|
+
setStateMap: setStateMap,
|
|
184
|
+
latestStateMap: latestStateMap
|
|
185
|
+
});
|
|
186
|
+
configMap.current.set(key, _extends({}, config));
|
|
187
|
+
}, []);
|
|
188
|
+
var deleteItem = react.useCallback(function (key) {
|
|
189
|
+
var newStateMap = new Map(latestStateMap.current);
|
|
190
|
+
|
|
191
|
+
if (newStateMap.delete(key)) {
|
|
192
|
+
setStateMap(newStateMap);
|
|
193
|
+
latestStateMap.current = newStateMap;
|
|
194
|
+
configMap.current.delete(key);
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return false;
|
|
199
|
+
}, []);
|
|
200
|
+
var endTransition = react.useCallback(function (key) {
|
|
201
|
+
var stateObj = latestStateMap.current.get(key);
|
|
202
|
+
|
|
203
|
+
if (!stateObj) {
|
|
204
|
+
process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
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;
|
|
212
|
+
|
|
213
|
+
var newState = getEndState(stateObj._state, unmountOnExit);
|
|
214
|
+
newState && updateState({
|
|
215
|
+
key: key,
|
|
216
|
+
newState: newState,
|
|
217
|
+
setStateMap: setStateMap,
|
|
218
|
+
latestStateMap: latestStateMap,
|
|
219
|
+
timeoutId: timeoutId,
|
|
220
|
+
onChange: onChange
|
|
221
|
+
});
|
|
222
|
+
}, []);
|
|
223
|
+
var toggle = react.useCallback(function (key, toEnter) {
|
|
224
|
+
var stateObj = latestStateMap.current.get(key);
|
|
225
|
+
|
|
226
|
+
if (!stateObj) {
|
|
227
|
+
process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
var config = configMap.current.get(key);
|
|
232
|
+
var _config$enter = config.enter,
|
|
233
|
+
enter = _config$enter === void 0 ? true : _config$enter,
|
|
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) {
|
|
244
|
+
updateState({
|
|
245
|
+
key: key,
|
|
246
|
+
newState: newState,
|
|
247
|
+
setStateMap: setStateMap,
|
|
248
|
+
latestStateMap: latestStateMap,
|
|
249
|
+
timeoutId: timeoutId,
|
|
250
|
+
onChange: onChange
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
var _getTimeout = getTimeout(timeout),
|
|
254
|
+
enterTimeout = _getTimeout[0],
|
|
255
|
+
exitTimeout = _getTimeout[1];
|
|
256
|
+
|
|
257
|
+
switch (newState) {
|
|
258
|
+
case ENTERING:
|
|
259
|
+
if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
260
|
+
return endTransition(key);
|
|
261
|
+
}, enterTimeout);
|
|
262
|
+
break;
|
|
263
|
+
|
|
264
|
+
case EXITING:
|
|
265
|
+
if (exitTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
266
|
+
return endTransition(key);
|
|
267
|
+
}, exitTimeout);
|
|
268
|
+
break;
|
|
269
|
+
|
|
270
|
+
case PRE_ENTER:
|
|
271
|
+
case PRE_EXIT:
|
|
272
|
+
config.timeoutId = setTimeout(function () {
|
|
273
|
+
return transitState(newState + 1);
|
|
274
|
+
}, 0);
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
var enterStage = stateObj._state <= ENTERED;
|
|
280
|
+
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
281
|
+
|
|
282
|
+
if (toEnter) {
|
|
283
|
+
if (!enterStage) {
|
|
284
|
+
transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
285
|
+
singleEnter && latestStateMap.current.forEach(function (_, _key) {
|
|
286
|
+
return _key !== key && toggle(_key, false);
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
} else {
|
|
290
|
+
if (enterStage) {
|
|
291
|
+
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}, [endTransition, singleEnter]);
|
|
295
|
+
return {
|
|
296
|
+
stateMap: stateMap,
|
|
297
|
+
toggle: toggle,
|
|
298
|
+
endTransition: endTransition,
|
|
299
|
+
setItem: setItem,
|
|
300
|
+
deleteItem: deleteItem
|
|
301
|
+
};
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
exports["default"] = useTransition;
|
|
305
|
+
exports.useTransition = useTransition;
|
|
306
|
+
exports.useTransitionMap = useTransitionMap;
|
|
@@ -0,0 +1,19 @@
|
|
|
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 };
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
var PRE_ENTER = 0;
|
|
4
|
-
var ENTERING = 1;
|
|
5
|
-
var ENTERED = 2;
|
|
6
|
-
var PRE_EXIT = 3;
|
|
7
|
-
var EXITING = 4;
|
|
8
|
-
var EXITED = 5;
|
|
9
|
-
var UNMOUNTED = 6;
|
|
10
|
-
var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
|
|
11
|
-
|
|
12
|
-
var startOrEnd = function startOrEnd(unmounted) {
|
|
13
|
-
return unmounted ? UNMOUNTED : EXITED;
|
|
14
|
-
};
|
|
2
|
+
import { ENTERED, startOrEnd, getTimeout, getEndState, PRE_EXIT, EXITING, STATES, PRE_ENTER, ENTERING } from './utils.js';
|
|
15
3
|
|
|
16
4
|
var updateState = function updateState(state, setState, latestState, timeoutId, onChange) {
|
|
17
5
|
clearTimeout(timeoutId.current);
|
|
@@ -42,33 +30,14 @@ var useTransition = function useTransition(_temp) {
|
|
|
42
30
|
|
|
43
31
|
var latestState = useRef(state);
|
|
44
32
|
var timeoutId = useRef();
|
|
45
|
-
var enterTimeout, exitTimeout;
|
|
46
33
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
} else {
|
|
51
|
-
enterTimeout = exitTimeout = timeout;
|
|
52
|
-
}
|
|
34
|
+
var _getTimeout = getTimeout(timeout),
|
|
35
|
+
enterTimeout = _getTimeout[0],
|
|
36
|
+
exitTimeout = _getTimeout[1];
|
|
53
37
|
|
|
54
38
|
var endTransition = useCallback(function () {
|
|
55
|
-
var newState;
|
|
56
|
-
|
|
57
|
-
switch (latestState.current) {
|
|
58
|
-
case ENTERING:
|
|
59
|
-
case PRE_ENTER:
|
|
60
|
-
newState = ENTERED;
|
|
61
|
-
break;
|
|
62
|
-
|
|
63
|
-
case EXITING:
|
|
64
|
-
case PRE_EXIT:
|
|
65
|
-
newState = startOrEnd(unmountOnExit);
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (newState !== undefined) {
|
|
70
|
-
updateState(newState, setState, latestState, timeoutId, onChange);
|
|
71
|
-
}
|
|
39
|
+
var newState = getEndState(latestState.current, unmountOnExit);
|
|
40
|
+
newState && updateState(newState, setState, latestState, timeoutId, onChange);
|
|
72
41
|
}, [onChange, unmountOnExit]);
|
|
73
42
|
var toggle = useCallback(function (toEnter) {
|
|
74
43
|
var transitState = function transitState(newState) {
|
|
@@ -113,4 +82,4 @@ var useTransition = function useTransition(_temp) {
|
|
|
113
82
|
return [STATES[state], toggle, endTransition];
|
|
114
83
|
};
|
|
115
84
|
|
|
116
|
-
export { useTransition
|
|
85
|
+
export { useTransition };
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { extends as _extends } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { useState, useRef, useCallback } from 'react';
|
|
3
|
+
import { ENTERED, startOrEnd, getEndState, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, getFullState, getTimeout } from './utils.js';
|
|
4
|
+
|
|
5
|
+
var initialStateMap = new Map();
|
|
6
|
+
var initialConfigMap = new Map();
|
|
7
|
+
|
|
8
|
+
var updateState = function updateState(_ref) {
|
|
9
|
+
var key = _ref.key,
|
|
10
|
+
_state = _ref.newState,
|
|
11
|
+
setStateMap = _ref.setStateMap,
|
|
12
|
+
latestStateMap = _ref.latestStateMap,
|
|
13
|
+
timeoutId = _ref.timeoutId,
|
|
14
|
+
onChange = _ref.onChange;
|
|
15
|
+
clearTimeout(timeoutId);
|
|
16
|
+
var state = getFullState(_state);
|
|
17
|
+
var stateMap = new Map(latestStateMap.current);
|
|
18
|
+
stateMap.set(key, state);
|
|
19
|
+
setStateMap(stateMap);
|
|
20
|
+
latestStateMap.current = stateMap;
|
|
21
|
+
onChange && onChange(_extends({
|
|
22
|
+
key: key
|
|
23
|
+
}, state));
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var useTransitionMap = function useTransitionMap(_temp) {
|
|
27
|
+
var _ref2 = _temp === void 0 ? {} : _temp,
|
|
28
|
+
singleEnter = _ref2.singleEnter;
|
|
29
|
+
|
|
30
|
+
var _useState = useState(initialStateMap),
|
|
31
|
+
stateMap = _useState[0],
|
|
32
|
+
setStateMap = _useState[1];
|
|
33
|
+
|
|
34
|
+
var latestStateMap = useRef(stateMap);
|
|
35
|
+
var configMap = useRef(initialConfigMap);
|
|
36
|
+
var setItem = useCallback(function (key, config) {
|
|
37
|
+
if (config === void 0) {
|
|
38
|
+
config = {};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var _config = config,
|
|
42
|
+
initialEntered = _config.initialEntered,
|
|
43
|
+
mountOnEnter = _config.mountOnEnter;
|
|
44
|
+
var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
|
|
45
|
+
updateState({
|
|
46
|
+
key: key,
|
|
47
|
+
newState: newState,
|
|
48
|
+
setStateMap: setStateMap,
|
|
49
|
+
latestStateMap: latestStateMap
|
|
50
|
+
});
|
|
51
|
+
configMap.current.set(key, _extends({}, config));
|
|
52
|
+
}, []);
|
|
53
|
+
var deleteItem = useCallback(function (key) {
|
|
54
|
+
var newStateMap = new Map(latestStateMap.current);
|
|
55
|
+
|
|
56
|
+
if (newStateMap.delete(key)) {
|
|
57
|
+
setStateMap(newStateMap);
|
|
58
|
+
latestStateMap.current = newStateMap;
|
|
59
|
+
configMap.current.delete(key);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return false;
|
|
64
|
+
}, []);
|
|
65
|
+
var endTransition = useCallback(function (key) {
|
|
66
|
+
var stateObj = latestStateMap.current.get(key);
|
|
67
|
+
|
|
68
|
+
if (!stateObj) {
|
|
69
|
+
process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
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;
|
|
77
|
+
|
|
78
|
+
var newState = getEndState(stateObj._state, unmountOnExit);
|
|
79
|
+
newState && updateState({
|
|
80
|
+
key: key,
|
|
81
|
+
newState: newState,
|
|
82
|
+
setStateMap: setStateMap,
|
|
83
|
+
latestStateMap: latestStateMap,
|
|
84
|
+
timeoutId: timeoutId,
|
|
85
|
+
onChange: onChange
|
|
86
|
+
});
|
|
87
|
+
}, []);
|
|
88
|
+
var toggle = useCallback(function (key, toEnter) {
|
|
89
|
+
var stateObj = latestStateMap.current.get(key);
|
|
90
|
+
|
|
91
|
+
if (!stateObj) {
|
|
92
|
+
process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var config = configMap.current.get(key);
|
|
97
|
+
var _config$enter = config.enter,
|
|
98
|
+
enter = _config$enter === void 0 ? true : _config$enter,
|
|
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) {
|
|
109
|
+
updateState({
|
|
110
|
+
key: key,
|
|
111
|
+
newState: newState,
|
|
112
|
+
setStateMap: setStateMap,
|
|
113
|
+
latestStateMap: latestStateMap,
|
|
114
|
+
timeoutId: timeoutId,
|
|
115
|
+
onChange: onChange
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
var _getTimeout = getTimeout(timeout),
|
|
119
|
+
enterTimeout = _getTimeout[0],
|
|
120
|
+
exitTimeout = _getTimeout[1];
|
|
121
|
+
|
|
122
|
+
switch (newState) {
|
|
123
|
+
case ENTERING:
|
|
124
|
+
if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
125
|
+
return endTransition(key);
|
|
126
|
+
}, enterTimeout);
|
|
127
|
+
break;
|
|
128
|
+
|
|
129
|
+
case EXITING:
|
|
130
|
+
if (exitTimeout >= 0) config.timeoutId = setTimeout(function () {
|
|
131
|
+
return endTransition(key);
|
|
132
|
+
}, exitTimeout);
|
|
133
|
+
break;
|
|
134
|
+
|
|
135
|
+
case PRE_ENTER:
|
|
136
|
+
case PRE_EXIT:
|
|
137
|
+
config.timeoutId = setTimeout(function () {
|
|
138
|
+
return transitState(newState + 1);
|
|
139
|
+
}, 0);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
var enterStage = stateObj._state <= ENTERED;
|
|
145
|
+
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
146
|
+
|
|
147
|
+
if (toEnter) {
|
|
148
|
+
if (!enterStage) {
|
|
149
|
+
transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
150
|
+
singleEnter && latestStateMap.current.forEach(function (_, _key) {
|
|
151
|
+
return _key !== key && toggle(_key, false);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
} else {
|
|
155
|
+
if (enterStage) {
|
|
156
|
+
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}, [endTransition, singleEnter]);
|
|
160
|
+
return {
|
|
161
|
+
stateMap: stateMap,
|
|
162
|
+
toggle: toggle,
|
|
163
|
+
endTransition: endTransition,
|
|
164
|
+
setItem: setItem,
|
|
165
|
+
deleteItem: deleteItem
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export { useTransitionMap };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var PRE_ENTER = 0;
|
|
2
|
+
var ENTERING = 1;
|
|
3
|
+
var ENTERED = 2;
|
|
4
|
+
var PRE_EXIT = 3;
|
|
5
|
+
var EXITING = 4;
|
|
6
|
+
var EXITED = 5;
|
|
7
|
+
var UNMOUNTED = 6;
|
|
8
|
+
var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
|
|
9
|
+
var getFullState = function getFullState(_state) {
|
|
10
|
+
return {
|
|
11
|
+
_state: _state,
|
|
12
|
+
state: STATES[_state],
|
|
13
|
+
isEnter: _state < PRE_EXIT,
|
|
14
|
+
isMounted: _state !== UNMOUNTED
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
var startOrEnd = function startOrEnd(unmounted) {
|
|
18
|
+
return unmounted ? UNMOUNTED : EXITED;
|
|
19
|
+
};
|
|
20
|
+
var getEndState = function getEndState(state, unmountOnExit) {
|
|
21
|
+
switch (state) {
|
|
22
|
+
case ENTERING:
|
|
23
|
+
case PRE_ENTER:
|
|
24
|
+
return ENTERED;
|
|
25
|
+
|
|
26
|
+
case EXITING:
|
|
27
|
+
case PRE_EXIT:
|
|
28
|
+
return startOrEnd(unmountOnExit);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var getTimeout = function getTimeout(timeout) {
|
|
32
|
+
return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATES, UNMOUNTED, getEndState, getFullState, getTimeout, startOrEnd };
|
package/dist/es/index.js
ADDED
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-transition-state",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-alpha.2",
|
|
4
4
|
"description": "Zero dependency, 0.7KB react-transition-group alternative.",
|
|
5
5
|
"author": "Zheng Song",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "szhsin/react-transition-state",
|
|
8
8
|
"homepage": "https://szhsin.github.io/react-transition-state/",
|
|
9
|
-
"main": "dist/index.js",
|
|
10
|
-
"module": "dist/index.
|
|
11
|
-
"types": "
|
|
9
|
+
"main": "dist/cjs/index.js",
|
|
10
|
+
"module": "dist/es/index.js",
|
|
11
|
+
"types": "types/index.d.ts",
|
|
12
12
|
"sideEffects": false,
|
|
13
13
|
"files": [
|
|
14
|
-
"dist"
|
|
14
|
+
"dist/",
|
|
15
|
+
"types/*.d.ts"
|
|
15
16
|
],
|
|
16
17
|
"keywords": [
|
|
17
18
|
"react",
|
|
@@ -26,12 +27,12 @@
|
|
|
26
27
|
"bundle": "rollup -c",
|
|
27
28
|
"test": "jest",
|
|
28
29
|
"eg": "npm start --prefix example",
|
|
29
|
-
"
|
|
30
|
-
"types": "npm run dtslint && cp -f types/index.d.ts dist/",
|
|
30
|
+
"types": "dtslint --localTs node_modules/typescript/lib types",
|
|
31
31
|
"tsc": "cd types && tsc",
|
|
32
32
|
"lint": "eslint .",
|
|
33
33
|
"lint:fix": "eslint --fix .",
|
|
34
|
-
"pret": "prettier
|
|
34
|
+
"pret": "prettier -c .",
|
|
35
|
+
"pret:fix": "prettier -w .",
|
|
35
36
|
"build": "run-s clean lint pret bundle types"
|
|
36
37
|
},
|
|
37
38
|
"peerDependencies": {
|
|
@@ -39,24 +40,24 @@
|
|
|
39
40
|
"react-dom": ">=16.8.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
|
-
"@babel/core": "^7.17.
|
|
43
|
+
"@babel/core": "^7.17.9",
|
|
43
44
|
"@babel/preset-env": "^7.16.11",
|
|
44
|
-
"@rollup/plugin-babel": "^5.3.
|
|
45
|
+
"@rollup/plugin-babel": "^5.3.1",
|
|
45
46
|
"@testing-library/react-hooks": "^7.0.2",
|
|
46
|
-
"@types/jest": "^27.4.
|
|
47
|
+
"@types/jest": "^27.4.1",
|
|
47
48
|
"babel-plugin-pure-annotations": "^0.1.2",
|
|
48
49
|
"dtslint": "^4.1.6",
|
|
49
|
-
"eslint": "^8.
|
|
50
|
-
"eslint-config-prettier": "^8.
|
|
51
|
-
"eslint-plugin-jest": "^26.1.
|
|
52
|
-
"eslint-plugin-react-hooks": "^4.
|
|
50
|
+
"eslint": "^8.12.0",
|
|
51
|
+
"eslint-config-prettier": "^8.5.0",
|
|
52
|
+
"eslint-plugin-jest": "^26.1.3",
|
|
53
|
+
"eslint-plugin-react-hooks": "^4.4.0",
|
|
53
54
|
"jest": "^27.5.1",
|
|
54
55
|
"npm-run-all": "^4.1.5",
|
|
55
|
-
"prettier": "^2.
|
|
56
|
+
"prettier": "^2.6.2",
|
|
56
57
|
"react": "^17.0.2",
|
|
57
58
|
"react-dom": "^17.0.2",
|
|
58
59
|
"regenerator-runtime": "^0.13.9",
|
|
59
|
-
"rollup": "^2.
|
|
60
|
-
"typescript": "^4.
|
|
60
|
+
"rollup": "^2.70.1",
|
|
61
|
+
"typescript": "^4.6.3"
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -23,4 +23,22 @@ export const useTransition: (
|
|
|
23
23
|
options?: TransitionOptions
|
|
24
24
|
) => [TransitionState, (toEnter?: boolean) => void, () => void];
|
|
25
25
|
|
|
26
|
+
interface State {
|
|
27
|
+
state: TransitionState;
|
|
28
|
+
isMounted: boolean;
|
|
29
|
+
isEnter: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface TransitionMapOptions<K> extends Omit<TransitionOptions, 'onChange'> {
|
|
33
|
+
onChange?: (event: { key: K } & State) => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const useTransitionMap: <K>(options?: { singleEnter: boolean }) => {
|
|
37
|
+
stateMap: Omit<Map<K, State>, 'clear' | 'delete' | 'set'>;
|
|
38
|
+
toggle: (key: K, toEnter?: boolean) => void;
|
|
39
|
+
endTransition: (key: K) => void;
|
|
40
|
+
setItem: (key: K, options?: TransitionMapOptions<K>) => void;
|
|
41
|
+
deleteItem: (key: K) => boolean;
|
|
42
|
+
};
|
|
43
|
+
|
|
26
44
|
export default useTransition;
|
package/dist/index.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var react = require('react');
|
|
6
|
-
|
|
7
|
-
var PRE_ENTER = 0;
|
|
8
|
-
var ENTERING = 1;
|
|
9
|
-
var ENTERED = 2;
|
|
10
|
-
var PRE_EXIT = 3;
|
|
11
|
-
var EXITING = 4;
|
|
12
|
-
var EXITED = 5;
|
|
13
|
-
var UNMOUNTED = 6;
|
|
14
|
-
var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
|
|
15
|
-
|
|
16
|
-
var startOrEnd = function startOrEnd(unmounted) {
|
|
17
|
-
return unmounted ? UNMOUNTED : EXITED;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
var updateState = function updateState(state, setState, latestState, timeoutId, onChange) {
|
|
21
|
-
clearTimeout(timeoutId.current);
|
|
22
|
-
setState(state);
|
|
23
|
-
latestState.current = state;
|
|
24
|
-
onChange && onChange({
|
|
25
|
-
state: STATES[state]
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
var useTransition = function useTransition(_temp) {
|
|
30
|
-
var _ref = _temp === void 0 ? {} : _temp,
|
|
31
|
-
_ref$enter = _ref.enter,
|
|
32
|
-
enter = _ref$enter === void 0 ? true : _ref$enter,
|
|
33
|
-
_ref$exit = _ref.exit,
|
|
34
|
-
exit = _ref$exit === void 0 ? true : _ref$exit,
|
|
35
|
-
preEnter = _ref.preEnter,
|
|
36
|
-
preExit = _ref.preExit,
|
|
37
|
-
timeout = _ref.timeout,
|
|
38
|
-
initialEntered = _ref.initialEntered,
|
|
39
|
-
mountOnEnter = _ref.mountOnEnter,
|
|
40
|
-
unmountOnExit = _ref.unmountOnExit,
|
|
41
|
-
onChange = _ref.onChange;
|
|
42
|
-
|
|
43
|
-
var _useState = react.useState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)),
|
|
44
|
-
state = _useState[0],
|
|
45
|
-
setState = _useState[1];
|
|
46
|
-
|
|
47
|
-
var latestState = react.useRef(state);
|
|
48
|
-
var timeoutId = react.useRef();
|
|
49
|
-
var enterTimeout, exitTimeout;
|
|
50
|
-
|
|
51
|
-
if (typeof timeout === 'object') {
|
|
52
|
-
enterTimeout = timeout.enter;
|
|
53
|
-
exitTimeout = timeout.exit;
|
|
54
|
-
} else {
|
|
55
|
-
enterTimeout = exitTimeout = timeout;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
var endTransition = react.useCallback(function () {
|
|
59
|
-
var newState;
|
|
60
|
-
|
|
61
|
-
switch (latestState.current) {
|
|
62
|
-
case ENTERING:
|
|
63
|
-
case PRE_ENTER:
|
|
64
|
-
newState = ENTERED;
|
|
65
|
-
break;
|
|
66
|
-
|
|
67
|
-
case EXITING:
|
|
68
|
-
case PRE_EXIT:
|
|
69
|
-
newState = startOrEnd(unmountOnExit);
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (newState !== undefined) {
|
|
74
|
-
updateState(newState, setState, latestState, timeoutId, onChange);
|
|
75
|
-
}
|
|
76
|
-
}, [onChange, unmountOnExit]);
|
|
77
|
-
var toggle = react.useCallback(function (toEnter) {
|
|
78
|
-
var transitState = function transitState(newState) {
|
|
79
|
-
updateState(newState, setState, latestState, timeoutId, onChange);
|
|
80
|
-
|
|
81
|
-
switch (newState) {
|
|
82
|
-
case ENTERING:
|
|
83
|
-
if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
|
|
84
|
-
break;
|
|
85
|
-
|
|
86
|
-
case EXITING:
|
|
87
|
-
if (exitTimeout >= 0) timeoutId.current = setTimeout(endTransition, exitTimeout);
|
|
88
|
-
break;
|
|
89
|
-
|
|
90
|
-
case PRE_ENTER:
|
|
91
|
-
case PRE_EXIT:
|
|
92
|
-
timeoutId.current = setTimeout(function () {
|
|
93
|
-
return transitState(newState + 1);
|
|
94
|
-
}, 0);
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
var enterStage = latestState.current <= ENTERED;
|
|
100
|
-
if (typeof toEnter !== 'boolean') toEnter = !enterStage;
|
|
101
|
-
|
|
102
|
-
if (toEnter) {
|
|
103
|
-
if (!enterStage) {
|
|
104
|
-
transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
|
|
105
|
-
}
|
|
106
|
-
} else {
|
|
107
|
-
if (enterStage) {
|
|
108
|
-
transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
|
|
112
|
-
react.useEffect(function () {
|
|
113
|
-
return function () {
|
|
114
|
-
return clearTimeout(timeoutId.current);
|
|
115
|
-
};
|
|
116
|
-
}, []);
|
|
117
|
-
return [STATES[state], toggle, endTransition];
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
exports['default'] = useTransition;
|
|
121
|
-
exports.useTransition = useTransition;
|