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
@@ -2515,6 +2515,41 @@
2515
2515
  return () => isMounted.current;
2516
2516
  }
2517
2517
 
2518
+ var State;
2519
+ (function (State) {
2520
+ State[State["InitialValue"] = 0] = "InitialValue";
2521
+ State[State["First"] = 1] = "First";
2522
+ State[State["NotFirst"] = 2] = "NotFirst";
2523
+ })(State || (State = {}));
2524
+ function useIsFirstRender() {
2525
+ const state = react.exports.useRef(State.InitialValue);
2526
+ switch (state.current) {
2527
+ case State.InitialValue:
2528
+ state.current = State.First;
2529
+ break;
2530
+ case State.First:
2531
+ state.current = State.NotFirst;
2532
+ break;
2533
+ case State.NotFirst: break;
2534
+ }
2535
+ return () => state.current === State.First;
2536
+ }
2537
+
2538
+ function useRenderCounter() {
2539
+ const counter = react.exports.useRef(0);
2540
+ counter.current++;
2541
+ return counter.current;
2542
+ }
2543
+
2544
+ function useUpdateEffect(effect, deps) {
2545
+ const isFirstRender = useIsFirstRender();
2546
+ react.exports.useEffect(() => {
2547
+ if (!isFirstRender()) {
2548
+ return effect();
2549
+ }
2550
+ }, deps);
2551
+ }
2552
+
2518
2553
  var es2018$7 = {};
2519
2554
 
2520
2555
  var array = {};
@@ -5330,14 +5365,14 @@
5330
5365
  return es2018$6;
5331
5366
  }
5332
5367
 
5333
- var es2018Exports = requireEs2018();
5368
+ var es2018Exports$1 = requireEs2018();
5334
5369
 
5335
- function useSingleSelection(values, defaultIndex) {
5336
- es2018Exports.assert(values.length > 0, 'The parameter values must be a non-empty array');
5337
- if (es2018$7.isntUndefined(defaultIndex)) {
5338
- es2018Exports.assert(defaultIndex >= 0 && defaultIndex < values.length, 'The parameter defaultIndex must be in the range of 0 to values.length');
5370
+ function useSingleSelection(values, defaultSelectedIndex) {
5371
+ es2018Exports$1.assert(values.length > 0, 'The parameter values must be a non-empty array');
5372
+ if (es2018$7.isntUndefined(defaultSelectedIndex)) {
5373
+ es2018Exports$1.assert(defaultSelectedIndex >= 0 && defaultSelectedIndex < values.length, 'The parameter defaultSelectedIndex must be in the range of 0 to values.length');
5339
5374
  }
5340
- const [selectedIndex, setSelectedIndex] = react.exports.useState(defaultIndex);
5375
+ const [selectedIndex, setSelectedIndex] = react.exports.useState(defaultSelectedIndex);
5341
5376
  return {
5342
5377
  value: es2018$7.isUndefined(selectedIndex) ? undefined : values[selectedIndex],
5343
5378
  options: values.map((value, index) => ({
@@ -5349,6 +5384,40 @@
5349
5384
  };
5350
5385
  }
5351
5386
 
5387
+ var es2018Exports = requireEs2018$1();
5388
+
5389
+ function useMultipleSelection(values, defaultSelectedIndexes = []) {
5390
+ es2018Exports$1.assert(values.length > 0, 'The parameter values must be a non-empty array');
5391
+ for (const index of defaultSelectedIndexes) {
5392
+ es2018Exports$1.assert(index >= 0 && index < values.length, 'The index of parameter defaultSelectedIndexes must be in the range of 0 to values.length');
5393
+ }
5394
+ const [selectedIndexes, setSelectedIndexes] = react.exports.useState(new Set(defaultSelectedIndexes));
5395
+ return {
5396
+ values: es2018Exports.toArray(es2018Exports.map(selectedIndexes, i => values[i])),
5397
+ options: values.map((value, index) => {
5398
+ const selected = selectedIndexes.has(index);
5399
+ const select = () => {
5400
+ const set = new Set(selectedIndexes);
5401
+ set.add(index);
5402
+ setSelectedIndexes(set);
5403
+ };
5404
+ const unselect = () => {
5405
+ const set = new Set(selectedIndexes);
5406
+ set.delete(index);
5407
+ setSelectedIndexes(set);
5408
+ };
5409
+ return {
5410
+ value,
5411
+ index,
5412
+ selected,
5413
+ select,
5414
+ unselect,
5415
+ toggle: selected ? unselect : select
5416
+ };
5417
+ })
5418
+ };
5419
+ }
5420
+
5352
5421
  function useStateCycle(stateList, initialStateIndex = 0) {
5353
5422
  const [index, setIndex] = react.exports.useState(initialStateIndex);
5354
5423
  return [
@@ -13628,13 +13697,17 @@
13628
13697
  exports.useFiniteStateMachine = useFiniteStateMachine;
13629
13698
  exports.useForceUpdate = useForceUpdate;
13630
13699
  exports.useIncrement = useIncrement;
13700
+ exports.useIsFirstRender = useIsFirstRender;
13631
13701
  exports.useIsMounted = useIsMounted;
13632
13702
  exports.useMount = useMount;
13703
+ exports.useMultipleSelection = useMultipleSelection;
13704
+ exports.useRenderCounter = useRenderCounter;
13633
13705
  exports.useResizeObserver = useResizeObserver;
13634
13706
  exports.useSingleSelection = useSingleSelection;
13635
13707
  exports.useStateCycle = useStateCycle;
13636
13708
  exports.useStep = useStep;
13637
13709
  exports.useToggle = useToggle;
13710
+ exports.useUpdateEffect = useUpdateEffect;
13638
13711
 
13639
13712
  Object.defineProperty(exports, '__esModule', { value: true });
13640
13713