extra-react-hooks 0.1.12 → 0.1.15

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.
Files changed (54) hide show
  1. package/README.md +48 -5
  2. package/dist/es2015/index.min.mjs +2 -2
  3. package/dist/es2015/index.min.mjs.map +1 -1
  4. package/dist/es2015/index.mjs +76 -7
  5. package/dist/es2015/index.mjs.map +1 -1
  6. package/dist/es2015/index.umd.js +79 -6
  7. package/dist/es2015/index.umd.js.map +1 -1
  8. package/dist/es2015/index.umd.min.js +2 -2
  9. package/dist/es2015/index.umd.min.js.map +1 -1
  10. package/dist/es2018/index.min.mjs +2 -2
  11. package/dist/es2018/index.min.mjs.map +1 -1
  12. package/dist/es2018/index.mjs +76 -7
  13. package/dist/es2018/index.mjs.map +1 -1
  14. package/dist/es2018/index.umd.js +79 -6
  15. package/dist/es2018/index.umd.js.map +1 -1
  16. package/dist/es2018/index.umd.min.js +2 -2
  17. package/dist/es2018/index.umd.min.js.map +1 -1
  18. package/lib/es2015/index.d.ts +4 -0
  19. package/lib/es2015/index.js +4 -0
  20. package/lib/es2015/index.js.map +1 -1
  21. package/lib/es2015/use-is-first-render.d.ts +1 -0
  22. package/lib/es2015/use-is-first-render.js +25 -0
  23. package/lib/es2015/use-is-first-render.js.map +1 -0
  24. package/lib/es2015/use-multiple-selection.d.ts +13 -0
  25. package/lib/es2015/use-multiple-selection.js +39 -0
  26. package/lib/es2015/use-multiple-selection.js.map +1 -0
  27. package/lib/es2015/use-render-counter.d.ts +1 -0
  28. package/lib/es2015/use-render-counter.js +11 -0
  29. package/lib/es2015/use-render-counter.js.map +1 -0
  30. package/lib/es2015/use-single-selection.d.ts +5 -6
  31. package/lib/es2015/use-single-selection.js +4 -4
  32. package/lib/es2015/use-single-selection.js.map +1 -1
  33. package/lib/es2015/use-update-effect.d.ts +2 -0
  34. package/lib/es2015/use-update-effect.js +15 -0
  35. package/lib/es2015/use-update-effect.js.map +1 -0
  36. package/lib/es2018/index.d.ts +4 -0
  37. package/lib/es2018/index.js +4 -0
  38. package/lib/es2018/index.js.map +1 -1
  39. package/lib/es2018/use-is-first-render.d.ts +1 -0
  40. package/lib/es2018/use-is-first-render.js +25 -0
  41. package/lib/es2018/use-is-first-render.js.map +1 -0
  42. package/lib/es2018/use-multiple-selection.d.ts +13 -0
  43. package/lib/es2018/use-multiple-selection.js +39 -0
  44. package/lib/es2018/use-multiple-selection.js.map +1 -0
  45. package/lib/es2018/use-render-counter.d.ts +1 -0
  46. package/lib/es2018/use-render-counter.js +11 -0
  47. package/lib/es2018/use-render-counter.js.map +1 -0
  48. package/lib/es2018/use-single-selection.d.ts +5 -6
  49. package/lib/es2018/use-single-selection.js +4 -4
  50. package/lib/es2018/use-single-selection.js.map +1 -1
  51. package/lib/es2018/use-update-effect.d.ts +2 -0
  52. package/lib/es2018/use-update-effect.js +15 -0
  53. package/lib/es2018/use-update-effect.js.map +1 -0
  54. package/package.json +12 -11
@@ -2509,6 +2509,41 @@ function useIsMounted() {
2509
2509
  return () => isMounted.current;
2510
2510
  }
2511
2511
 
2512
+ var State;
2513
+ (function (State) {
2514
+ State[State["InitialValue"] = 0] = "InitialValue";
2515
+ State[State["First"] = 1] = "First";
2516
+ State[State["NotFirst"] = 2] = "NotFirst";
2517
+ })(State || (State = {}));
2518
+ function useIsFirstRender() {
2519
+ const state = react.exports.useRef(State.InitialValue);
2520
+ switch (state.current) {
2521
+ case State.InitialValue:
2522
+ state.current = State.First;
2523
+ break;
2524
+ case State.First:
2525
+ state.current = State.NotFirst;
2526
+ break;
2527
+ case State.NotFirst: break;
2528
+ }
2529
+ return () => state.current === State.First;
2530
+ }
2531
+
2532
+ function useRenderCounter() {
2533
+ const counter = react.exports.useRef(0);
2534
+ counter.current++;
2535
+ return counter.current;
2536
+ }
2537
+
2538
+ function useUpdateEffect(effect, deps) {
2539
+ const isFirstRender = useIsFirstRender();
2540
+ react.exports.useEffect(() => {
2541
+ if (!isFirstRender()) {
2542
+ return effect();
2543
+ }
2544
+ }, deps);
2545
+ }
2546
+
2512
2547
  var es2018$7 = {};
2513
2548
 
2514
2549
  var array = {};
@@ -5324,14 +5359,14 @@ function requireEs2018 () {
5324
5359
  return es2018$6;
5325
5360
  }
5326
5361
 
5327
- var es2018Exports = requireEs2018();
5362
+ var es2018Exports$1 = requireEs2018();
5328
5363
 
5329
- function useSingleSelection(values, defaultIndex) {
5330
- es2018Exports.assert(values.length > 0, 'The parameter values must be a non-empty array');
5331
- if (es2018$7.isntUndefined(defaultIndex)) {
5332
- es2018Exports.assert(defaultIndex >= 0 && defaultIndex < values.length, 'The parameter defaultIndex must be in the range of 0 to values.length');
5364
+ function useSingleSelection(values, defaultSelectedIndex) {
5365
+ es2018Exports$1.assert(values.length > 0, 'The parameter values must be a non-empty array');
5366
+ if (es2018$7.isntUndefined(defaultSelectedIndex)) {
5367
+ es2018Exports$1.assert(defaultSelectedIndex >= 0 && defaultSelectedIndex < values.length, 'The parameter defaultSelectedIndex must be in the range of 0 to values.length');
5333
5368
  }
5334
- const [selectedIndex, setSelectedIndex] = react.exports.useState(defaultIndex);
5369
+ const [selectedIndex, setSelectedIndex] = react.exports.useState(defaultSelectedIndex);
5335
5370
  return {
5336
5371
  value: es2018$7.isUndefined(selectedIndex) ? undefined : values[selectedIndex],
5337
5372
  options: values.map((value, index) => ({
@@ -5343,6 +5378,40 @@ function useSingleSelection(values, defaultIndex) {
5343
5378
  };
5344
5379
  }
5345
5380
 
5381
+ var es2018Exports = requireEs2018$1();
5382
+
5383
+ function useMultipleSelection(values, defaultSelectedIndexes = []) {
5384
+ es2018Exports$1.assert(values.length > 0, 'The parameter values must be a non-empty array');
5385
+ for (const index of defaultSelectedIndexes) {
5386
+ es2018Exports$1.assert(index >= 0 && index < values.length, 'The index of parameter defaultSelectedIndexes must be in the range of 0 to values.length');
5387
+ }
5388
+ const [selectedIndexes, setSelectedIndexes] = react.exports.useState(new Set(defaultSelectedIndexes));
5389
+ return {
5390
+ values: es2018Exports.toArray(es2018Exports.map(selectedIndexes, i => values[i])),
5391
+ options: values.map((value, index) => {
5392
+ const selected = selectedIndexes.has(index);
5393
+ const select = () => {
5394
+ const set = new Set(selectedIndexes);
5395
+ set.add(index);
5396
+ setSelectedIndexes(set);
5397
+ };
5398
+ const unselect = () => {
5399
+ const set = new Set(selectedIndexes);
5400
+ set.delete(index);
5401
+ setSelectedIndexes(set);
5402
+ };
5403
+ return {
5404
+ value,
5405
+ index,
5406
+ selected,
5407
+ select,
5408
+ unselect,
5409
+ toggle: selected ? unselect : select
5410
+ };
5411
+ })
5412
+ };
5413
+ }
5414
+
5346
5415
  function useStateCycle(stateList, initialStateIndex = 0) {
5347
5416
  const [index, setIndex] = react.exports.useState(initialStateIndex);
5348
5417
  return [
@@ -13619,5 +13688,5 @@ function useFiniteStateMachine(schema, initialState) {
13619
13688
  }
13620
13689
 
13621
13690
  var ObservableFiniteStateMachine = es2018$2.ObservableFiniteStateMachine;
13622
- export { ObservableFiniteStateMachine, useFiniteStateMachine, useForceUpdate, useIncrement, useIsMounted, useMount, useResizeObserver, useSingleSelection, useStateCycle, useStep, useToggle };
13691
+ export { ObservableFiniteStateMachine, useFiniteStateMachine, useForceUpdate, useIncrement, useIsFirstRender, useIsMounted, useMount, useMultipleSelection, useRenderCounter, useResizeObserver, useSingleSelection, useStateCycle, useStep, useToggle, useUpdateEffect };
13623
13692
  //# sourceMappingURL=index.mjs.map