@mic-rexjs/usecases-react 1.3.36 → 1.4.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.
Files changed (85) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/components/UpdateFragment/index.d.ts +2 -0
  3. package/es/components/UpdateFragment/index.js +8 -0
  4. package/es/components/UpdateFragment/types.d.ts +3 -0
  5. package/es/components/UseCaseFragment/index.d.ts +1 -1
  6. package/es/components/UseCaseFragment/types.d.ts +2 -2
  7. package/es/configs/defaultUseCaseContext/index.d.ts +3 -1
  8. package/es/configs/defaultUseCaseContext/index.js +1 -1
  9. package/es/configs/defaultUseCaseContext/types.d.ts +11 -0
  10. package/es/configs/defaultUseCaseContext/types.js +1 -0
  11. package/es/configs/usecaseContextMap/index.d.ts +1 -3
  12. package/es/configs/usecaseContextMap/types.d.ts +4 -17
  13. package/es/hooks/useCompareDeps/index.d.ts +1 -0
  14. package/es/hooks/useCompareDeps/index.js +24 -0
  15. package/es/hooks/useConstant/index.d.ts +2 -0
  16. package/es/hooks/useConstant/index.js +5 -0
  17. package/es/hooks/useConstant/types.d.ts +3 -0
  18. package/es/hooks/useConstant/types.js +1 -0
  19. package/es/hooks/useConstantFn/index.d.ts +1 -0
  20. package/es/hooks/useConstantFn/index.js +7 -0
  21. package/es/hooks/useOptionsRefCollection/index.d.ts +3 -0
  22. package/es/hooks/useOptionsRefCollection/index.js +22 -0
  23. package/es/hooks/useOptionsRefCollection/types.d.ts +2 -0
  24. package/es/hooks/useOptionsRefCollection/types.js +1 -0
  25. package/es/hooks/useProvider/index.d.ts +7 -0
  26. package/es/hooks/useProvider/index.js +17 -0
  27. package/es/hooks/useProvider/types.d.ts +3 -0
  28. package/es/hooks/useProvider/types.js +1 -0
  29. package/es/hooks/useScope/index.d.ts +2 -0
  30. package/es/hooks/useScope/index.js +3 -0
  31. package/es/hooks/useScope/types.d.ts +3 -0
  32. package/es/hooks/useScope/types.js +1 -0
  33. package/es/hooks/useUseCase/index.js +68 -89
  34. package/es/hooks/useUseCase/index.test.js +166 -136
  35. package/es/hooks/useUseCase/types.d.ts +9 -7
  36. package/es/hooks/useUseCaseContext/index.d.ts +3 -0
  37. package/es/hooks/useUseCaseContext/index.js +17 -0
  38. package/es/index.d.ts +3 -2
  39. package/es/methods/getRootEntity/index.d.ts +2 -0
  40. package/es/methods/getRootEntity/index.js +9 -0
  41. package/es/methods/initEntityReducers/index.d.ts +5 -0
  42. package/es/methods/initEntityReducers/index.js +13 -0
  43. package/es/methods/initEntityReducers/types.d.ts +3 -0
  44. package/es/methods/initEntityReducers/types.js +1 -0
  45. package/es/methods/removeItem/index.d.ts +1 -0
  46. package/es/methods/removeItem/index.js +7 -0
  47. package/es/methods/triggerCallbacks/index.d.ts +3 -0
  48. package/es/methods/triggerCallbacks/index.js +14 -0
  49. package/es/{hooks/useUseCase/methods → methods}/triggerWatchers/index.d.ts +1 -1
  50. package/lib/components/UpdateFragment/index.js +16 -0
  51. package/lib/configs/defaultUseCaseContext/index.js +1 -1
  52. package/lib/configs/defaultUseCaseContext/types.js +5 -0
  53. package/lib/hooks/useCompareDeps/index.js +31 -0
  54. package/lib/hooks/useConstant/index.js +16 -0
  55. package/lib/hooks/useConstant/types.js +5 -0
  56. package/lib/hooks/useConstantFn/index.js +18 -0
  57. package/lib/hooks/useOptionsRefCollection/index.js +29 -0
  58. package/lib/hooks/useOptionsRefCollection/types.js +5 -0
  59. package/lib/hooks/useProvider/index.js +30 -0
  60. package/lib/hooks/useProvider/types.js +5 -0
  61. package/lib/hooks/useScope/index.js +10 -0
  62. package/lib/hooks/useScope/types.js +5 -0
  63. package/lib/hooks/useUseCase/index.js +73 -115
  64. package/lib/hooks/useUseCase/index.test.js +226 -177
  65. package/lib/hooks/useUseCaseContext/index.js +24 -0
  66. package/lib/methods/getRootEntity/index.js +16 -0
  67. package/lib/methods/initEntityReducers/index.js +29 -0
  68. package/lib/methods/initEntityReducers/types.js +5 -0
  69. package/lib/methods/removeItem/index.js +14 -0
  70. package/lib/methods/triggerCallbacks/index.js +22 -0
  71. package/package.json +2 -2
  72. package/es/core/usecases/optionsGetterCellectionUseCase/index.d.ts +0 -2
  73. package/es/core/usecases/optionsGetterCellectionUseCase/index.js +0 -13
  74. package/es/core/usecases/optionsGetterCellectionUseCase/types.d.ts +0 -8
  75. package/es/hooks/useOptionsTransfer/index.d.ts +0 -3
  76. package/es/hooks/useOptionsTransfer/index.js +0 -15
  77. package/es/hooks/useUseCase/methods/triggerCallbacks/index.d.ts +0 -3
  78. package/es/hooks/useUseCase/methods/triggerCallbacks/index.js +0 -11
  79. package/lib/core/usecases/optionsGetterCellectionUseCase/index.js +0 -23
  80. package/lib/hooks/useOptionsTransfer/index.js +0 -23
  81. package/lib/hooks/useUseCase/methods/triggerCallbacks/index.js +0 -32
  82. /package/es/{core/usecases/optionsGetterCellectionUseCase → components/UpdateFragment}/types.js +0 -0
  83. /package/es/{hooks/useUseCase/methods → methods}/triggerWatchers/index.js +0 -0
  84. /package/lib/{core/usecases/optionsGetterCellectionUseCase → components/UpdateFragment}/types.js +0 -0
  85. /package/lib/{hooks/useUseCase/methods → methods}/triggerWatchers/index.js +0 -0
@@ -459,6 +459,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
459
459
  });
460
460
  }),
461
461
  result = _renderHook11.result;
462
+ "";
462
463
  var context = result.current;
463
464
  var _context14 = (0, _slicedToArray2["default"])(context, 2),
464
465
  reducers = _context14[1];
@@ -621,93 +622,157 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
621
622
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
622
623
  });
623
624
  });
624
- (0, _globals.describe)('`useUseCase` should work with 1+ argument on accessor mode', function () {
625
- (0, _globals.test)('check `context.length`', function () {
625
+ (0, _globals.describe)('`useUseCase` should work with 1+ arguments on non-entity mode', function () {
626
+ (0, _globals.test)('`entity` should equal `defaultFile`', function () {
626
627
  var _renderHook17 = (0, _react.renderHook)(function () {
627
- return (0, _.useUseCase)(fileUseCase);
628
+ return (0, _.useUseCase)(mathUseCase);
628
629
  }),
629
630
  result = _renderHook17.result;
630
- var context = result.current;
631
- (0, _globals.expect)(context).toHaveLength(2);
631
+ var reducers = result.current;
632
+ (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
632
633
  });
633
- (0, _globals.test)('`entity` should be `undefined`', function () {
634
+ (0, _globals.test)('returned reducer should work', function () {
634
635
  var _renderHook18 = (0, _react.renderHook)(function () {
635
- return (0, _.useUseCase)(fileUseCase);
636
+ return (0, _.useUseCase)(mathUseCase);
636
637
  }),
637
638
  result = _renderHook18.result;
638
- var context = result.current;
639
- var _context17 = (0, _slicedToArray2["default"])(context, 1),
640
- entity = _context17[0];
641
- (0, _globals.expect)(entity).toBe(void 0);
639
+ var reducers = result.current;
640
+ var add = reducers.add;
641
+ (0, _globals.expect)(add(1, 2)).toBe(3);
642
642
  });
643
- (0, _globals.test)('`reducers` should be returned as an object', function () {
643
+ (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
644
644
  var _renderHook19 = (0, _react.renderHook)(function () {
645
- return (0, _.useUseCase)(fileUseCase);
645
+ return (0, _.useUseCase)(mathUseCase, {
646
+ extraValue: 5
647
+ });
646
648
  }),
647
649
  result = _renderHook19.result;
648
- var context = result.current;
649
- var _context18 = (0, _slicedToArray2["default"])(context, 2),
650
- reducers = _context18[1];
651
- (0, _globals.expect)((0, _typeof2["default"])(reducers)).toBe('object');
650
+ var reducers = result.current;
651
+ var add = reducers.add;
652
+ (0, _globals.expect)(add(1, 2)).toBe(8);
652
653
  });
653
- (0, _globals.test)('`yield entity` should not trigger update', function () {
654
+ (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
654
655
  var onUpdate = _globals.jest.fn();
656
+ var onDeepUpdate = _globals.jest.fn();
655
657
  var _renderHook20 = (0, _react.renderHook)(function () {
658
+ var _useState7 = (0, _react2.useState)(0),
659
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
660
+ extraValue = _useState8[0],
661
+ setExtraValue = _useState8[1];
662
+ var reducers = (0, _.useUseCase)(mathUseCase, {
663
+ extraValue: extraValue
664
+ });
656
665
  (0, _ahooks.useUpdateEffect)(function () {
657
666
  onUpdate();
658
- });
659
- return (0, _.useUseCase)(fileUseCase);
667
+ }, [reducers]);
668
+ useDeepCompareUpdate(function () {
669
+ onDeepUpdate();
670
+ }, [reducers]);
671
+ return setExtraValue;
660
672
  }),
661
673
  result = _renderHook20.result;
662
- var context = result.current;
663
- var _context19 = (0, _slicedToArray2["default"])(context, 2),
664
- reducers = _context19[1];
665
- var setPath = reducers.setPath;
674
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
675
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
666
676
  (0, _react.act)(function () {
667
- setPath(PATH_1);
677
+ result.current(3);
678
+ });
679
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
680
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
681
+ });
682
+ (0, _globals.test)('when `deps` change, it should update reducers', function () {
683
+ var onUpdate = _globals.jest.fn();
684
+ var onDeepUpdate = _globals.jest.fn();
685
+ var _renderHook21 = (0, _react.renderHook)(function () {
686
+ var _useState9 = (0, _react2.useState)(0),
687
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
688
+ extraValue = _useState10[0],
689
+ setExtraValue = _useState10[1];
690
+ var reducers = (0, _.useUseCase)(mathUseCase, {
691
+ extraValue: extraValue
692
+ }, [extraValue]);
693
+ (0, _ahooks.useUpdateEffect)(function () {
694
+ onUpdate();
695
+ }, [reducers]);
696
+ useDeepCompareUpdate(function () {
697
+ onDeepUpdate();
698
+ }, [reducers]);
699
+ return setExtraValue;
700
+ }),
701
+ result = _renderHook21.result;
702
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
703
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
704
+ (0, _react.act)(function () {
705
+ result.current(3);
706
+ });
707
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
708
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(1);
709
+ });
710
+ (0, _globals.test)('empty `deps` should not update reducers', function () {
711
+ var onUpdate = _globals.jest.fn();
712
+ var onDeepUpdate = _globals.jest.fn();
713
+ var _renderHook22 = (0, _react.renderHook)(function () {
714
+ var _useState11 = (0, _react2.useState)(0),
715
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
716
+ extraValue = _useState12[0],
717
+ setExtraValue = _useState12[1];
718
+ var reducers = (0, _.useUseCase)(mathUseCase, {
719
+ extraValue: extraValue
720
+ }, []);
721
+ (0, _ahooks.useUpdateEffect)(function () {
722
+ onUpdate();
723
+ }, [reducers]);
724
+ useDeepCompareUpdate(function () {
725
+ onDeepUpdate();
726
+ }, [reducers]);
727
+ return setExtraValue;
728
+ }),
729
+ result = _renderHook22.result;
730
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
731
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
732
+ (0, _react.act)(function () {
733
+ result.current(3);
668
734
  });
669
- (0, _globals.expect)(result.current).toBe(context);
670
- (0, _globals.expect)(result.current).toEqual(context);
671
735
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
736
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
672
737
  });
673
- (0, _globals.test)('should work within <Child />', function () {
738
+ (0, _globals.test)('should not trigger update', function () {
739
+ var onUpdate = _globals.jest.fn();
740
+ (0, _react.render)((0, _jsxRuntime.jsx)(MathParent, {
741
+ onUpdate: onUpdate
742
+ }));
743
+ _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
744
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
745
+ });
746
+ });
747
+ (0, _globals.describe)('`useUseCase` should work with 1+ arguments on context mode', function () {
748
+ (0, _globals.test)('should work within <Child /> which it is under <Parent />', function () {
674
749
  var textPrefix = '>>';
675
- var onUpdate1 = _globals.jest.fn();
676
- var onPathChange1 = _globals.jest.fn();
677
- var onUndefinedEntity1 = _globals.jest.fn();
678
- var onUpdate2 = _globals.jest.fn();
679
- var onPathChange2 = _globals.jest.fn();
680
- var onUndefinedEntity2 = _globals.jest.fn();
750
+ var onUpdate = _globals.jest.fn();
751
+ var onPathChange = _globals.jest.fn();
752
+ var onUndefinedEntity = _globals.jest.fn();
681
753
  var onSetPath = _globals.jest.fn(function () {
682
754
  return PATH_1;
683
755
  });
684
- (0, _react.render)((0, _jsxRuntime.jsxs)("div", {
685
- children: [(0, _jsxRuntime.jsx)(Parent, {
756
+ (0, _react.render)((0, _jsxRuntime.jsx)("div", {
757
+ children: (0, _jsxRuntime.jsx)(Parent, {
686
758
  onSetPath: onSetPath,
687
759
  children: (0, _jsxRuntime.jsx)(Child, {
688
760
  textPrefix: textPrefix,
689
- onUpdate: onUpdate1,
690
- onPathChange: onPathChange1,
691
- onUndefinedEntity: onUndefinedEntity1
761
+ onUpdate: onUpdate,
762
+ onPathChange: onPathChange,
763
+ onUndefinedEntity: onUndefinedEntity
692
764
  })
693
- }), (0, _jsxRuntime.jsx)(Child, {
694
- onUpdate: onUpdate2,
695
- onPathChange: onPathChange2,
696
- onUndefinedEntity: onUndefinedEntity2
697
- })]
765
+ })
698
766
  }));
699
767
  _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
700
768
  (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
701
- (0, _globals.expect)(onUpdate1).toHaveBeenCalledTimes(1);
702
- (0, _globals.expect)(onPathChange1).toHaveBeenCalledWith(PATH_1);
769
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
770
+ (0, _globals.expect)(onPathChange).toHaveBeenCalledWith(PATH_1);
703
771
  _react.fireEvent.click(_react.screen.getByText(textPrefix + CHILD_BUTTON_TEXT));
704
772
  (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
705
- (0, _globals.expect)(onUpdate1).toHaveBeenCalledTimes(2);
706
- (0, _globals.expect)(onPathChange1).toHaveBeenCalledWith('');
707
- (0, _globals.expect)(onUpdate2).toHaveBeenCalledTimes(0);
708
- (0, _globals.expect)(onPathChange2).toHaveBeenCalledTimes(0);
709
- (0, _globals.expect)(onUndefinedEntity1).toHaveBeenCalledTimes(0);
710
- (0, _globals.expect)(onUndefinedEntity2).toHaveBeenCalledTimes(1);
773
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(2);
774
+ (0, _globals.expect)(onPathChange).toHaveBeenCalledWith('');
775
+ (0, _globals.expect)(onUndefinedEntity).toHaveBeenCalledTimes(0);
711
776
  });
712
777
  (0, _globals.test)('`options.onChange` event should be trigger at child elements', function () {
713
778
  var onFirstChange = _globals.jest.fn();
@@ -765,6 +830,56 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
765
830
  (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
766
831
  (0, _globals.expect)(onParentPathChange).toHaveBeenCalledTimes(2);
767
832
  });
833
+ (0, _globals.test)('`options.onChange` event should be trigger in orders', function () {
834
+ var changeTimes = 0;
835
+ var updateChangeTimes = function updateChangeTimes() {
836
+ return ++changeTimes;
837
+ };
838
+ var onChangeA = _globals.jest.fn(updateChangeTimes);
839
+ var onChangeB = _globals.jest.fn(updateChangeTimes);
840
+ var onChangeC = _globals.jest.fn(updateChangeTimes);
841
+ var buttonText = 'my button';
842
+ var A = function A(_ref7) {
843
+ var children = _ref7.children;
844
+ (0, _.useUseCase)(fileUseCase, {
845
+ onChange: onChangeA
846
+ });
847
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {
848
+ children: children
849
+ });
850
+ };
851
+ var B = function B() {
852
+ (0, _.useUseCase)(fileUseCase, {
853
+ onChange: onChangeB
854
+ });
855
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
856
+ };
857
+ var C = function C() {
858
+ var _useUseCase8 = (0, _.useUseCase)(defaultFile, fileUseCase, {
859
+ onChange: onChangeC
860
+ }),
861
+ _useUseCase9 = (0, _slicedToArray2["default"])(_useUseCase8, 3),
862
+ setPath = _useUseCase9[1].setPath,
863
+ Provider = _useUseCase9[2];
864
+ var onFirstClick = function onFirstClick() {
865
+ setPath(PATH_1);
866
+ };
867
+ return (0, _jsxRuntime.jsxs)(Provider, {
868
+ children: [(0, _jsxRuntime.jsx)(A, {
869
+ children: (0, _jsxRuntime.jsx)(B, {})
870
+ }), (0, _jsxRuntime.jsx)("button", {
871
+ onClick: onFirstClick,
872
+ children: buttonText
873
+ })]
874
+ });
875
+ };
876
+ (0, _react.render)((0, _jsxRuntime.jsx)(C, {}));
877
+ (0, _globals.expect)(changeTimes).toBe(0);
878
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
879
+ (0, _globals.expect)(onChangeA).toHaveReturnedWith(2);
880
+ (0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
881
+ (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
882
+ });
768
883
  (0, _globals.test)('`options.watch` should be trigger at child elements', function () {
769
884
  var onFirstExtChange = _globals.jest.fn();
770
885
  var onSecondExtChange = _globals.jest.fn();
@@ -781,14 +896,14 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
781
896
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
782
897
  };
783
898
  var B = function B() {
784
- var _useUseCase8 = (0, _.useUseCase)(defaultFile, fileUseCase, {
899
+ var _useUseCase10 = (0, _.useUseCase)(defaultFile, fileUseCase, {
785
900
  watch: {
786
901
  ext: onParentExtChange
787
902
  }
788
903
  }),
789
- _useUseCase9 = (0, _slicedToArray2["default"])(_useUseCase8, 3),
790
- setPath = _useUseCase9[1].setPath,
791
- Provider = _useUseCase9[2];
904
+ _useUseCase11 = (0, _slicedToArray2["default"])(_useUseCase10, 3),
905
+ setPath = _useUseCase11[1].setPath,
906
+ Provider = _useUseCase11[2];
792
907
  var onFirstClick = function onFirstClick() {
793
908
  setPath(PATH_1);
794
909
  onExtChange = onSecondExtChange;
@@ -825,127 +940,61 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
825
940
  (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
826
941
  (0, _globals.expect)(onParentExtChange).toHaveBeenCalledTimes(2);
827
942
  });
828
- });
829
- (0, _globals.describe)('`useUseCase` should work with 1+ arguments on non-entity mode', function () {
830
- (0, _globals.test)('`entity` should equal `defaultFile`', function () {
831
- var _renderHook21 = (0, _react.renderHook)(function () {
832
- return (0, _.useUseCase)(mathUseCase);
833
- }),
834
- result = _renderHook21.result;
835
- var reducers = result.current;
836
- (0, _globals.expect)((0, _typeof2["default"])(reducers)).toBe('object');
837
- });
838
- (0, _globals.test)('returned reducer should work', function () {
839
- var _renderHook22 = (0, _react.renderHook)(function () {
840
- return (0, _.useUseCase)(mathUseCase);
841
- }),
842
- result = _renderHook22.result;
843
- var reducers = result.current;
844
- var add = reducers.add;
845
- (0, _globals.expect)(add(1, 2)).toBe(3);
846
- });
847
- (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
848
- var _renderHook23 = (0, _react.renderHook)(function () {
849
- return (0, _.useUseCase)(mathUseCase, {
850
- extraValue: 5
851
- });
852
- }),
853
- result = _renderHook23.result;
854
- var reducers = result.current;
855
- var add = reducers.add;
856
- (0, _globals.expect)(add(1, 2)).toBe(8);
857
- });
858
- (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
859
- var onUpdate = _globals.jest.fn();
860
- var onDeepUpdate = _globals.jest.fn();
861
- var _renderHook24 = (0, _react.renderHook)(function () {
862
- var _useState7 = (0, _react2.useState)(0),
863
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
864
- extraValue = _useState8[0],
865
- setExtraValue = _useState8[1];
866
- var reducers = (0, _.useUseCase)(mathUseCase, {
867
- extraValue: extraValue
868
- });
869
- (0, _ahooks.useUpdateEffect)(function () {
870
- onUpdate();
871
- }, [reducers]);
872
- useDeepCompareUpdate(function () {
873
- onDeepUpdate();
874
- }, [reducers]);
875
- return setExtraValue;
876
- }),
877
- result = _renderHook24.result;
878
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
879
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
880
- (0, _react.act)(function () {
881
- result.current(3);
882
- });
883
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
884
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
885
- });
886
- (0, _globals.test)('when `deps` change, it should update reducers', function () {
887
- var onUpdate = _globals.jest.fn();
888
- var onDeepUpdate = _globals.jest.fn();
889
- var _renderHook25 = (0, _react.renderHook)(function () {
890
- var _useState9 = (0, _react2.useState)(0),
891
- _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
892
- extraValue = _useState10[0],
893
- setExtraValue = _useState10[1];
894
- var reducers = (0, _.useUseCase)(mathUseCase, {
895
- extraValue: extraValue
896
- }, [extraValue]);
897
- (0, _ahooks.useUpdateEffect)(function () {
898
- onUpdate();
899
- }, [reducers]);
900
- useDeepCompareUpdate(function () {
901
- onDeepUpdate();
902
- }, [reducers]);
903
- return setExtraValue;
904
- }),
905
- result = _renderHook25.result;
906
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
907
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
908
- (0, _react.act)(function () {
909
- result.current(3);
910
- });
911
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
912
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(1);
913
- });
914
- (0, _globals.test)('empty `deps` should not update reducers', function () {
915
- var onUpdate = _globals.jest.fn();
916
- var onDeepUpdate = _globals.jest.fn();
917
- var _renderHook26 = (0, _react.renderHook)(function () {
918
- var _useState11 = (0, _react2.useState)(0),
919
- _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
920
- extraValue = _useState12[0],
921
- setExtraValue = _useState12[1];
922
- var reducers = (0, _.useUseCase)(mathUseCase, {
923
- extraValue: extraValue
924
- }, []);
925
- (0, _ahooks.useUpdateEffect)(function () {
926
- onUpdate();
927
- }, [reducers]);
928
- useDeepCompareUpdate(function () {
929
- onDeepUpdate();
930
- }, [reducers]);
931
- return setExtraValue;
932
- }),
933
- result = _renderHook26.result;
934
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
935
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
936
- (0, _react.act)(function () {
937
- result.current(3);
938
- });
939
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
940
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
941
- });
942
- (0, _globals.test)('should not trigger update', function () {
943
- var onUpdate = _globals.jest.fn();
944
- (0, _react.render)((0, _jsxRuntime.jsx)(MathParent, {
945
- onUpdate: onUpdate
946
- }));
947
- _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
948
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
943
+ (0, _globals.test)('`options.watch` should be trigger in orders', function () {
944
+ var changeTimes = 0;
945
+ var updateChangeTimes = function updateChangeTimes() {
946
+ return ++changeTimes;
947
+ };
948
+ var onChangeA = _globals.jest.fn(updateChangeTimes);
949
+ var onChangeB = _globals.jest.fn(updateChangeTimes);
950
+ var onChangeC = _globals.jest.fn(updateChangeTimes);
951
+ var buttonText = 'my button';
952
+ var A = function A(_ref8) {
953
+ var children = _ref8.children;
954
+ (0, _.useUseCase)(fileUseCase, {
955
+ watch: {
956
+ ext: onChangeA
957
+ }
958
+ });
959
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {
960
+ children: children
961
+ });
962
+ };
963
+ var B = function B() {
964
+ (0, _.useUseCase)(fileUseCase, {
965
+ watch: {
966
+ ext: onChangeB
967
+ }
968
+ });
969
+ return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
970
+ };
971
+ var C = function C() {
972
+ var _useUseCase12 = (0, _.useUseCase)(defaultFile, fileUseCase, {
973
+ watch: {
974
+ ext: onChangeC
975
+ }
976
+ }),
977
+ _useUseCase13 = (0, _slicedToArray2["default"])(_useUseCase12, 3),
978
+ setPath = _useUseCase13[1].setPath,
979
+ Provider = _useUseCase13[2];
980
+ var onFirstClick = function onFirstClick() {
981
+ setPath(PATH_1);
982
+ };
983
+ return (0, _jsxRuntime.jsxs)(Provider, {
984
+ children: [(0, _jsxRuntime.jsx)(A, {
985
+ children: (0, _jsxRuntime.jsx)(B, {})
986
+ }), (0, _jsxRuntime.jsx)("button", {
987
+ onClick: onFirstClick,
988
+ children: buttonText
989
+ })]
990
+ });
991
+ };
992
+ (0, _react.render)((0, _jsxRuntime.jsx)(C, {}));
993
+ (0, _globals.expect)(changeTimes).toBe(0);
994
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
995
+ (0, _globals.expect)(onChangeA).toHaveReturnedWith(2);
996
+ (0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
997
+ (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
949
998
  });
950
999
  });
951
1000
  });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useUseCaseContext = void 0;
7
+ var _useConstant = require("../useConstant");
8
+ var _usecaseContextMap = require("../../configs/usecaseContextMap");
9
+ var _react = require("react");
10
+ var useUseCaseContext = function useUseCaseContext(usecase, defaultContext) {
11
+ return (0, _useConstant.useConstant)(function () {
12
+ var map = _usecaseContextMap.usecaseContextMap;
13
+ if (map.has(usecase)) {
14
+ return map.get(usecase);
15
+ }
16
+ if (defaultContext) {
17
+ return defaultContext;
18
+ }
19
+ var ctx = (0, _react.createContext)({});
20
+ map.set(usecase, ctx);
21
+ return ctx;
22
+ });
23
+ };
24
+ exports.useUseCaseContext = useUseCaseContext;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getRootEntity = void 0;
7
+ var getRootEntity = function getRootEntity(entityState, entityArg, stateless) {
8
+ if (!stateless) {
9
+ return entityState;
10
+ }
11
+ if (typeof entityArg === 'function') {
12
+ return entityArg();
13
+ }
14
+ return entityArg;
15
+ };
16
+ exports.getRootEntity = getRootEntity;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.initEntityReducers = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
+ var _usecases = require("@mic-rexjs/usecases");
11
+ var _excluded = ["stateless", "watch", "onChange", "options"];
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+ var initEntityReducers = function initEntityReducers(entity, usecase, options, onEntityChange) {
15
+ var _entityReducerUseCase = (0, _usecases.entityReducerUseCase)(),
16
+ createEntityReducers = _entityReducerUseCase.createEntityReducers;
17
+ var stateless = options.stateless,
18
+ watch = options.watch,
19
+ onChange = options.onChange,
20
+ usecaseOptions = options.options,
21
+ restUseCaseOptions = (0, _objectWithoutProperties2["default"])(options, _excluded);
22
+ return createEntityReducers(entity, usecase, _objectSpread(_objectSpread(_objectSpread({}, restUseCaseOptions), usecaseOptions), {}, {
23
+ onChange: onEntityChange,
24
+ onGenerate: function onGenerate(newEntity, result) {
25
+ return result;
26
+ }
27
+ }));
28
+ };
29
+ exports.initEntityReducers = initEntityReducers;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.removeItem = void 0;
7
+ var removeItem = function removeItem(list, item) {
8
+ var index = list.indexOf(item);
9
+ if (index === -1) {
10
+ return;
11
+ }
12
+ list.splice(index, 1);
13
+ };
14
+ exports.removeItem = removeItem;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.triggerCallbacks = void 0;
7
+ var _triggerWatchers = require("../triggerWatchers");
8
+ var triggerCallbacks = function triggerCallbacks(optionsRefCollection, newEntity, prevEntity) {
9
+ for (var i = optionsRefCollection.length; i > 0; i--) {
10
+ var options = optionsRefCollection[i - 1].current;
11
+ if (!options) {
12
+ continue;
13
+ }
14
+ var onChange = options.onChange,
15
+ watch = options.watch;
16
+ if (watch) {
17
+ (0, _triggerWatchers.triggerWatchers)(watch, newEntity, prevEntity);
18
+ }
19
+ onChange === null || onChange === void 0 ? void 0 : onChange(newEntity, prevEntity);
20
+ }
21
+ };
22
+ exports.triggerCallbacks = triggerCallbacks;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mic-rexjs/usecases-react",
3
- "version": "1.3.36",
3
+ "version": "1.4.0",
4
4
  "description": "React-based solution for use usecases of Clean Architecture",
5
5
  "private": false,
6
6
  "keywords": [
@@ -48,7 +48,7 @@
48
48
  "@commitlint/cli": "^17.6.6",
49
49
  "@commitlint/config-angular": "^17.6.6",
50
50
  "@jest/globals": "^29.5.0",
51
- "@mic-rexjs/usecases": "^1.4.9",
51
+ "@mic-rexjs/usecases": "^1.4.11",
52
52
  "@testing-library/react": "^14.0.0",
53
53
  "@types/node": "^20.4.2",
54
54
  "@types/react": "^18.2.14",
@@ -1,2 +0,0 @@
1
- import { OptionsGetter, OptionsGetterCollectionReducers } from './types';
2
- export declare const optionsGetterCollectionUseCase: <T>(collection: OptionsGetter<T>[]) => OptionsGetterCollectionReducers<T>;
@@ -1,13 +0,0 @@
1
- export const optionsGetterCollectionUseCase = (collection) => {
2
- const addOptionsGetter = (getter) => {
3
- collection.unshift(getter);
4
- };
5
- const removeOptionsGetter = (getter) => {
6
- const index = collection.indexOf(getter);
7
- if (index === -1) {
8
- return;
9
- }
10
- collection.splice(index, 1);
11
- };
12
- return { addOptionsGetter, removeOptionsGetter };
13
- };
@@ -1,8 +0,0 @@
1
- import { Reducers } from '@mic-rexjs/usecases';
2
- export interface OptionsGetter<T> {
3
- (): T;
4
- }
5
- export type OptionsGetterCollectionReducers<T> = Reducers<{
6
- addOptionsGetter(getter: OptionsGetter<T>): void;
7
- removeOptionsGetter(getter: OptionsGetter<T>): void;
8
- }>;
@@ -1,3 +0,0 @@
1
- import { UseCaseHookOptions } from '../useUseCase/types';
2
- import { OptionsGetterCollectionReducers } from '../../core/usecases/optionsGetterCellectionUseCase/types';
3
- export declare const useOptionsTransfer: <T, TOptions extends object>(options: UseCaseHookOptions<T, TOptions>, optionsGetterListReducers: OptionsGetterCollectionReducers<UseCaseHookOptions<T, TOptions>>) => void;