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 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 STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
15
- var getFullState = function getFullState(_state) {
14
+ var STATUS = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
15
+ var getState = function getState(_status) {
16
16
  return {
17
- _state: _state,
18
- state: STATES[_state],
19
- isEnter: _state < PRE_EXIT,
20
- isMounted: _state !== UNMOUNTED
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 getEndState = function getEndState(state, unmountOnExit) {
27
- switch (state) {
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(state, setState, latestState, timeoutId, onChange) {
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
- state: STATES[state]
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.onChange;
64
+ onChange = _ref.onStateChange;
63
65
 
64
- var _useState = react.useState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)),
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 newState = getEndState(latestState.current, unmountOnExit);
77
- newState && updateState$1(newState, setState, latestState, timeoutId, onChange);
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(newState) {
81
- updateState$1(newState, setState, latestState, timeoutId, onChange);
84
+ var transitState = function transitState(status) {
85
+ updateState$1(status, setState, latestState, timeoutId, onChange);
82
86
 
83
- switch (newState) {
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(newState + 1);
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
- if (!enterStage) {
106
- transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
107
- }
109
+ !enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
108
110
  } else {
109
- if (enterStage) {
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 [STATES[state], toggle, endTransition];
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
- _state = _ref.newState,
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 = getFullState(_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(_extends({
157
- key: key
158
- }, state));
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
- if (config === void 0) {
173
- config = {};
174
- }
171
+ var _ref3 = config || {},
172
+ _ref3$initialEntered = _ref3.initialEntered,
173
+ _initialEntered = _ref3$initialEntered === void 0 ? initialEntered : _ref3$initialEntered;
175
174
 
176
- var _config = config,
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
- newState: newState,
178
+ status: status,
183
179
  setStateMap: setStateMap,
184
180
  latestStateMap: latestStateMap
185
181
  });
186
- configMap.current.set(key, _extends({}, config));
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 newState = getEndState(stateObj._state, unmountOnExit);
214
- newState && updateState({
207
+ var status = getEndStatus(stateObj._status, unmountOnExit);
208
+ status && updateState({
215
209
  key: key,
216
- newState: newState,
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
- 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) {
226
+
227
+ var transitState = function transitState(status) {
244
228
  updateState({
245
229
  key: key,
246
- newState: newState,
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
- var _getTimeout = getTimeout(timeout),
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(newState + 1);
253
+ return transitState(status + 1);
274
254
  }, 0);
275
255
  break;
276
256
  }
277
257
  };
278
258
 
279
- var enterStage = stateObj._state <= ENTERED;
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, getEndState, PRE_EXIT, EXITING, STATES, PRE_ENTER, ENTERING } from './utils.js';
2
+ import { getState, ENTERED, startOrEnd, getTimeout, getEndStatus, PRE_EXIT, EXITING, PRE_ENTER, ENTERING } from './utils.js';
3
3
 
4
- var updateState = function updateState(state, setState, latestState, timeoutId, onChange) {
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
- state: STATES[state]
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.onChange;
26
+ onChange = _ref.onStateChange;
26
27
 
27
- var _useState = useState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)),
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 newState = getEndState(latestState.current, unmountOnExit);
40
- newState && updateState(newState, setState, latestState, timeoutId, onChange);
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(newState) {
44
- updateState(newState, setState, latestState, timeoutId, onChange);
46
+ var transitState = function transitState(status) {
47
+ updateState(status, setState, latestState, timeoutId, onChange);
45
48
 
46
- switch (newState) {
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(newState + 1);
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
- if (!enterStage) {
69
- transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
70
- }
71
+ !enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
71
72
  } else {
72
- if (enterStage) {
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 [STATES[state], toggle, endTransition];
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, getEndState, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, getFullState, getTimeout } from './utils.js';
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
- _state = _ref.newState,
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 = getFullState(_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(_extends({
22
- key: key
23
- }, state));
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
- if (config === void 0) {
38
- config = {};
39
- }
53
+ var _ref3 = config || {},
54
+ _ref3$initialEntered = _ref3.initialEntered,
55
+ _initialEntered = _ref3$initialEntered === void 0 ? initialEntered : _ref3$initialEntered;
40
56
 
41
- var _config = config,
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
- newState: newState,
60
+ status: status,
48
61
  setStateMap: setStateMap,
49
62
  latestStateMap: latestStateMap
50
63
  });
51
- configMap.current.set(key, _extends({}, config));
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 newState = getEndState(stateObj._state, unmountOnExit);
79
- newState && updateState({
89
+ var status = getEndStatus(stateObj._status, unmountOnExit);
90
+ status && updateState({
80
91
  key: key,
81
- newState: newState,
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
- 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) {
108
+
109
+ var transitState = function transitState(status) {
109
110
  updateState({
110
111
  key: key,
111
- newState: newState,
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
- var _getTimeout = getTimeout(timeout),
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(newState + 1);
135
+ return transitState(status + 1);
139
136
  }, 0);
140
137
  break;
141
138
  }
142
139
  };
143
140
 
144
- var enterStage = stateObj._state <= ENTERED;
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,
@@ -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 STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
9
- var getFullState = function getFullState(_state) {
8
+ var STATUS = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
9
+ var getState = function getState(_status) {
10
10
  return {
11
- _state: _state,
12
- state: STATES[_state],
13
- isEnter: _state < PRE_EXIT,
14
- isMounted: _state !== UNMOUNTED
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 getEndState = function getEndState(state, unmountOnExit) {
21
- switch (state) {
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, STATES, UNMOUNTED, getEndState, getFullState, getTimeout, startOrEnd };
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": "1.2.0-alpha.3",
4
- "description": "Zero dependency, 0.7KB react-transition-group alternative.",
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 TransitionState =
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 State {
11
- state: TransitionState;
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
- onChange?: (event: { state: TransitionState }) => void;
26
+ onStateChange?: (event: { current: TransitionState }) => void;
26
27
  }
27
28
 
28
- export interface TransitionItemOptions<K> extends Omit<TransitionOptions, 'onChange'> {
29
- onChange?: (event: { key: K } & State) => void;
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: Omit<Map<K, State>, 'clear' | 'delete' | 'set'>;
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<K>) => void;
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 };