react-transition-state 1.2.0-alpha.1 → 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 CHANGED
@@ -12,6 +12,14 @@ var EXITING = 4;
12
12
  var EXITED = 5;
13
13
  var UNMOUNTED = 6;
14
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
+ };
15
23
  var startOrEnd = function startOrEnd(unmounted) {
16
24
  return unmounted ? UNMOUNTED : EXITED;
17
25
  };
@@ -111,72 +119,100 @@ var useTransition = function useTransition(_temp) {
111
119
  return [STATES[state], toggle, endTransition];
112
120
  };
113
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
+
114
140
  var initialStateMap = new Map();
115
141
  var initialConfigMap = new Map();
116
142
 
117
143
  var updateState = function updateState(_ref) {
118
- var item = _ref.item,
144
+ var key = _ref.key,
119
145
  _state = _ref.newState,
120
146
  setStateMap = _ref.setStateMap,
121
147
  latestStateMap = _ref.latestStateMap,
122
148
  timeoutId = _ref.timeoutId,
123
149
  onChange = _ref.onChange;
124
150
  clearTimeout(timeoutId);
125
- var state = {
126
- state: STATES[_state],
127
- _state: _state
128
- };
151
+ var state = getFullState(_state);
129
152
  var stateMap = new Map(latestStateMap.current);
130
- stateMap.set(item, state);
153
+ stateMap.set(key, state);
131
154
  setStateMap(stateMap);
132
155
  latestStateMap.current = stateMap;
133
- onChange && onChange(item, state);
156
+ onChange && onChange(_extends({
157
+ key: key
158
+ }, state));
134
159
  };
135
160
 
136
- var useTransitionMap = function useTransitionMap() {
161
+ var useTransitionMap = function useTransitionMap(_temp) {
162
+ var _ref2 = _temp === void 0 ? {} : _temp,
163
+ singleEnter = _ref2.singleEnter;
164
+
137
165
  var _useState = react.useState(initialStateMap),
138
166
  stateMap = _useState[0],
139
167
  setStateMap = _useState[1];
140
168
 
141
169
  var latestStateMap = react.useRef(stateMap);
142
170
  var configMap = react.useRef(initialConfigMap);
143
- var addItem = react.useCallback(function (item, config) {
144
- var initialEntered = config.initialEntered,
145
- mountOnEnter = config.mountOnEnter;
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;
146
179
  var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
147
180
  updateState({
148
- item: item,
181
+ key: key,
149
182
  newState: newState,
150
183
  setStateMap: setStateMap,
151
184
  latestStateMap: latestStateMap
152
185
  });
153
- configMap.current.set(item, config);
186
+ configMap.current.set(key, _extends({}, config));
154
187
  }, []);
155
- var removeItem = react.useCallback(function (item) {
188
+ var deleteItem = react.useCallback(function (key) {
156
189
  var newStateMap = new Map(latestStateMap.current);
157
190
 
158
- if (newStateMap.delete(item)) {
191
+ if (newStateMap.delete(key)) {
159
192
  setStateMap(newStateMap);
160
193
  latestStateMap.current = newStateMap;
161
- configMap.current.delete(item);
194
+ configMap.current.delete(key);
195
+ return true;
162
196
  }
197
+
198
+ return false;
163
199
  }, []);
164
- var endTransition = react.useCallback(function (item) {
165
- var stateObj = latestStateMap.current.get(item);
200
+ var endTransition = react.useCallback(function (key) {
201
+ var stateObj = latestStateMap.current.get(key);
166
202
 
167
203
  if (!stateObj) {
168
- process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid item key for " + item);
204
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
169
205
  return;
170
206
  }
171
207
 
172
- var _configMap$current$ge = configMap.current.get(item),
208
+ var _configMap$current$ge = configMap.current.get(key),
173
209
  timeoutId = _configMap$current$ge.timeoutId,
174
210
  onChange = _configMap$current$ge.onChange,
175
211
  unmountOnExit = _configMap$current$ge.unmountOnExit;
176
212
 
177
213
  var newState = getEndState(stateObj._state, unmountOnExit);
178
214
  newState && updateState({
179
- item: item,
215
+ key: key,
180
216
  newState: newState,
181
217
  setStateMap: setStateMap,
182
218
  latestStateMap: latestStateMap,
@@ -184,15 +220,15 @@ var useTransitionMap = function useTransitionMap() {
184
220
  onChange: onChange
185
221
  });
186
222
  }, []);
187
- var toggle = react.useCallback(function (item, toEnter) {
188
- var stateObj = latestStateMap.current.get(item);
223
+ var toggle = react.useCallback(function (key, toEnter) {
224
+ var stateObj = latestStateMap.current.get(key);
189
225
 
190
226
  if (!stateObj) {
191
- process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid item key for " + item);
227
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
192
228
  return;
193
229
  }
194
230
 
195
- var config = configMap.current.get(item);
231
+ var config = configMap.current.get(key);
196
232
  var _config$enter = config.enter,
197
233
  enter = _config$enter === void 0 ? true : _config$enter,
198
234
  _config$exit = config.exit,
@@ -206,7 +242,7 @@ var useTransitionMap = function useTransitionMap() {
206
242
 
207
243
  var transitState = function transitState(newState) {
208
244
  updateState({
209
- item: item,
245
+ key: key,
210
246
  newState: newState,
211
247
  setStateMap: setStateMap,
212
248
  latestStateMap: latestStateMap,
@@ -221,13 +257,13 @@ var useTransitionMap = function useTransitionMap() {
221
257
  switch (newState) {
222
258
  case ENTERING:
223
259
  if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
224
- return endTransition(item);
260
+ return endTransition(key);
225
261
  }, enterTimeout);
226
262
  break;
227
263
 
228
264
  case EXITING:
229
265
  if (exitTimeout >= 0) config.timeoutId = setTimeout(function () {
230
- return endTransition(item);
266
+ return endTransition(key);
231
267
  }, exitTimeout);
232
268
  break;
233
269
 
@@ -246,19 +282,22 @@ var useTransitionMap = function useTransitionMap() {
246
282
  if (toEnter) {
247
283
  if (!enterStage) {
248
284
  transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
285
+ singleEnter && latestStateMap.current.forEach(function (_, _key) {
286
+ return _key !== key && toggle(_key, false);
287
+ });
249
288
  }
250
289
  } else {
251
290
  if (enterStage) {
252
291
  transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
253
292
  }
254
293
  }
255
- }, [endTransition]);
294
+ }, [endTransition, singleEnter]);
256
295
  return {
257
296
  stateMap: stateMap,
258
297
  toggle: toggle,
259
298
  endTransition: endTransition,
260
- addItem: addItem,
261
- removeItem: removeItem
299
+ setItem: setItem,
300
+ deleteItem: deleteItem
262
301
  };
263
302
  };
264
303
 
@@ -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,72 +1,83 @@
1
+ import { extends as _extends } from '../_virtual/_rollupPluginBabelHelpers.js';
1
2
  import { useState, useRef, useCallback } from 'react';
2
- import { ENTERED, startOrEnd, getEndState, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, STATES, getTimeout } from './utils.js';
3
+ import { ENTERED, startOrEnd, getEndState, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, getFullState, getTimeout } from './utils.js';
3
4
 
4
5
  var initialStateMap = new Map();
5
6
  var initialConfigMap = new Map();
6
7
 
7
8
  var updateState = function updateState(_ref) {
8
- var item = _ref.item,
9
+ var key = _ref.key,
9
10
  _state = _ref.newState,
10
11
  setStateMap = _ref.setStateMap,
11
12
  latestStateMap = _ref.latestStateMap,
12
13
  timeoutId = _ref.timeoutId,
13
14
  onChange = _ref.onChange;
14
15
  clearTimeout(timeoutId);
15
- var state = {
16
- state: STATES[_state],
17
- _state: _state
18
- };
16
+ var state = getFullState(_state);
19
17
  var stateMap = new Map(latestStateMap.current);
20
- stateMap.set(item, state);
18
+ stateMap.set(key, state);
21
19
  setStateMap(stateMap);
22
20
  latestStateMap.current = stateMap;
23
- onChange && onChange(item, state);
21
+ onChange && onChange(_extends({
22
+ key: key
23
+ }, state));
24
24
  };
25
25
 
26
- var useTransitionMap = function useTransitionMap() {
26
+ var useTransitionMap = function useTransitionMap(_temp) {
27
+ var _ref2 = _temp === void 0 ? {} : _temp,
28
+ singleEnter = _ref2.singleEnter;
29
+
27
30
  var _useState = useState(initialStateMap),
28
31
  stateMap = _useState[0],
29
32
  setStateMap = _useState[1];
30
33
 
31
34
  var latestStateMap = useRef(stateMap);
32
35
  var configMap = useRef(initialConfigMap);
33
- var addItem = useCallback(function (item, config) {
34
- var initialEntered = config.initialEntered,
35
- mountOnEnter = config.mountOnEnter;
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;
36
44
  var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
37
45
  updateState({
38
- item: item,
46
+ key: key,
39
47
  newState: newState,
40
48
  setStateMap: setStateMap,
41
49
  latestStateMap: latestStateMap
42
50
  });
43
- configMap.current.set(item, config);
51
+ configMap.current.set(key, _extends({}, config));
44
52
  }, []);
45
- var removeItem = useCallback(function (item) {
53
+ var deleteItem = useCallback(function (key) {
46
54
  var newStateMap = new Map(latestStateMap.current);
47
55
 
48
- if (newStateMap.delete(item)) {
56
+ if (newStateMap.delete(key)) {
49
57
  setStateMap(newStateMap);
50
58
  latestStateMap.current = newStateMap;
51
- configMap.current.delete(item);
59
+ configMap.current.delete(key);
60
+ return true;
52
61
  }
62
+
63
+ return false;
53
64
  }, []);
54
- var endTransition = useCallback(function (item) {
55
- var stateObj = latestStateMap.current.get(item);
65
+ var endTransition = useCallback(function (key) {
66
+ var stateObj = latestStateMap.current.get(key);
56
67
 
57
68
  if (!stateObj) {
58
- process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid item key for " + item);
69
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
59
70
  return;
60
71
  }
61
72
 
62
- var _configMap$current$ge = configMap.current.get(item),
73
+ var _configMap$current$ge = configMap.current.get(key),
63
74
  timeoutId = _configMap$current$ge.timeoutId,
64
75
  onChange = _configMap$current$ge.onChange,
65
76
  unmountOnExit = _configMap$current$ge.unmountOnExit;
66
77
 
67
78
  var newState = getEndState(stateObj._state, unmountOnExit);
68
79
  newState && updateState({
69
- item: item,
80
+ key: key,
70
81
  newState: newState,
71
82
  setStateMap: setStateMap,
72
83
  latestStateMap: latestStateMap,
@@ -74,15 +85,15 @@ var useTransitionMap = function useTransitionMap() {
74
85
  onChange: onChange
75
86
  });
76
87
  }, []);
77
- var toggle = useCallback(function (item, toEnter) {
78
- var stateObj = latestStateMap.current.get(item);
88
+ var toggle = useCallback(function (key, toEnter) {
89
+ var stateObj = latestStateMap.current.get(key);
79
90
 
80
91
  if (!stateObj) {
81
- process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid item key for " + item);
92
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
82
93
  return;
83
94
  }
84
95
 
85
- var config = configMap.current.get(item);
96
+ var config = configMap.current.get(key);
86
97
  var _config$enter = config.enter,
87
98
  enter = _config$enter === void 0 ? true : _config$enter,
88
99
  _config$exit = config.exit,
@@ -96,7 +107,7 @@ var useTransitionMap = function useTransitionMap() {
96
107
 
97
108
  var transitState = function transitState(newState) {
98
109
  updateState({
99
- item: item,
110
+ key: key,
100
111
  newState: newState,
101
112
  setStateMap: setStateMap,
102
113
  latestStateMap: latestStateMap,
@@ -111,13 +122,13 @@ var useTransitionMap = function useTransitionMap() {
111
122
  switch (newState) {
112
123
  case ENTERING:
113
124
  if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
114
- return endTransition(item);
125
+ return endTransition(key);
115
126
  }, enterTimeout);
116
127
  break;
117
128
 
118
129
  case EXITING:
119
130
  if (exitTimeout >= 0) config.timeoutId = setTimeout(function () {
120
- return endTransition(item);
131
+ return endTransition(key);
121
132
  }, exitTimeout);
122
133
  break;
123
134
 
@@ -136,19 +147,22 @@ var useTransitionMap = function useTransitionMap() {
136
147
  if (toEnter) {
137
148
  if (!enterStage) {
138
149
  transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
150
+ singleEnter && latestStateMap.current.forEach(function (_, _key) {
151
+ return _key !== key && toggle(_key, false);
152
+ });
139
153
  }
140
154
  } else {
141
155
  if (enterStage) {
142
156
  transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
143
157
  }
144
158
  }
145
- }, [endTransition]);
159
+ }, [endTransition, singleEnter]);
146
160
  return {
147
161
  stateMap: stateMap,
148
162
  toggle: toggle,
149
163
  endTransition: endTransition,
150
- addItem: addItem,
151
- removeItem: removeItem
164
+ setItem: setItem,
165
+ deleteItem: deleteItem
152
166
  };
153
167
  };
154
168
 
@@ -6,6 +6,14 @@ var EXITING = 4;
6
6
  var EXITED = 5;
7
7
  var UNMOUNTED = 6;
8
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
+ };
9
17
  var startOrEnd = function startOrEnd(unmounted) {
10
18
  return unmounted ? UNMOUNTED : EXITED;
11
19
  };
@@ -24,4 +32,4 @@ var getTimeout = function getTimeout(timeout) {
24
32
  return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
25
33
  };
26
34
 
27
- export { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATES, UNMOUNTED, getEndState, getTimeout, startOrEnd };
35
+ export { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATES, UNMOUNTED, getEndState, getFullState, getTimeout, startOrEnd };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-transition-state",
3
- "version": "1.2.0-alpha.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",
@@ -8,10 +8,11 @@
8
8
  "homepage": "https://szhsin.github.io/react-transition-state/",
9
9
  "main": "dist/cjs/index.js",
10
10
  "module": "dist/es/index.js",
11
- "types": "dist/index.d.ts",
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
- "dtslint": "dtslint --localTs node_modules/typescript/lib types",
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 --write .",
34
+ "pret": "prettier -c .",
35
+ "pret:fix": "prettier -w .",
35
36
  "build": "run-s clean lint pret bundle types"
36
37
  },
37
38
  "peerDependencies": {
@@ -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;