@mic-rexjs/usecases-react 2.3.2 → 2.3.4

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.
@@ -36,7 +36,8 @@ var fileUseCase = function fileUseCase() {
36
36
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
37
37
  var entityReducers = (0, _usecases.objectUseCase)();
38
38
  var _options$pathPrefix = options.pathPrefix,
39
- pathPrefix = _options$pathPrefix === void 0 ? '' : _options$pathPrefix;
39
+ pathPrefix = _options$pathPrefix === void 0 ? '' : _options$pathPrefix,
40
+ onPathChange = options.onPathChange;
40
41
  var init = function init(entity) {
41
42
  var newEntity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultFile;
42
43
  return /*#__PURE__*/_regenerator["default"].mark(function _callee() {
@@ -56,15 +57,20 @@ var fileUseCase = function fileUseCase() {
56
57
  };
57
58
  var setPath = /*#__PURE__*/_regenerator["default"].mark(function setPath(entity, path) {
58
59
  var _path$match;
60
+ var oldPath, newPath;
59
61
  return _regenerator["default"].wrap(function setPath$(_context2) {
60
62
  while (1) switch (_context2.prev = _context2.next) {
61
63
  case 0:
62
- _context2.next = 2;
64
+ oldPath = entity.path;
65
+ newPath = pathPrefix + path;
66
+ _context2.next = 4;
63
67
  return _objectSpread(_objectSpread({}, entity), {}, {
64
- path: pathPrefix + path,
68
+ path: newPath,
65
69
  ext: ((_path$match = path.match(/\.[^.]+$/)) === null || _path$match === void 0 ? void 0 : _path$match[0]) || ''
66
70
  });
67
- case 2:
71
+ case 4:
72
+ onPathChange === null || onPathChange === void 0 || onPathChange(newPath, oldPath);
73
+ case 5:
68
74
  case "end":
69
75
  return _context2.stop();
70
76
  }
@@ -126,9 +132,6 @@ var mathUseCase = function mathUseCase() {
126
132
  subtraction: subtractionReducer
127
133
  };
128
134
  };
129
- var fieldPathUseCase = function fieldPathUseCase() {
130
- return (0, _usecases.objectUseCase)();
131
- };
132
135
  var Child = function Child(_ref2) {
133
136
  var _ref2$textPrefix = _ref2.textPrefix,
134
137
  textPrefix = _ref2$textPrefix === void 0 ? '' : _ref2$textPrefix,
@@ -606,15 +609,14 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
606
609
  ext: EXT_1
607
610
  }), defaultFile);
608
611
  });
609
- (0, _globals.test)('`options.onChange` should be updated after `deps` changed', function () {
612
+ (0, _globals.test)('`options.onChange` should always trigger the latest one', function () {
610
613
  var onChange1 = _globals.jest.fn();
611
614
  var onChange2 = _globals.jest.fn();
612
615
  var onChange = onChange1;
613
- var deps = [1];
614
616
  var _renderHook13 = (0, _react.renderHook)(function () {
615
617
  return (0, _.useUseCase)(defaultFile, fileUseCase, {
616
618
  onChange: onChange
617
- }, deps);
619
+ }, []);
618
620
  }),
619
621
  result = _renderHook13.result;
620
622
  var cores = result.current;
@@ -624,7 +626,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
624
626
  (0, _globals.expect)(onChange1).toHaveBeenCalledTimes(0);
625
627
  (0, _react.act)(function () {
626
628
  setPath(PATH_1);
627
- deps = [2];
628
629
  onChange = onChange2;
629
630
  });
630
631
  (0, _globals.expect)(onChange2).toHaveBeenCalledTimes(0);
@@ -646,46 +647,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
646
647
  ext: EXT_1
647
648
  }));
648
649
  });
649
- (0, _globals.test)('`options.onChange` should not be updated if `deps` has not changed', function () {
650
- var onChange1 = _globals.jest.fn();
651
- var onChange2 = _globals.jest.fn();
652
- var onChange = onChange1;
653
- var _renderHook14 = (0, _react.renderHook)(function () {
654
- return (0, _.useUseCase)(defaultFile, fileUseCase, {
655
- onChange: onChange
656
- }, []);
657
- }),
658
- result = _renderHook14.result;
659
- var cores = result.current;
660
- var _cores12 = (0, _slicedToArray2["default"])(cores, 2),
661
- reducers = _cores12[1];
662
- var setPath = reducers.setPath;
663
- (0, _globals.expect)(onChange1).toHaveBeenCalledTimes(0);
664
- (0, _react.act)(function () {
665
- setPath(PATH_1);
666
- onChange = onChange2;
667
- });
668
- (0, _globals.expect)(onChange2).toHaveBeenCalledTimes(0);
669
- (0, _globals.expect)(onChange1).toHaveBeenCalledTimes(1);
670
- (0, _globals.expect)(onChange1).toHaveBeenLastCalledWith(_objectSpread(_objectSpread({}, defaultFile), {}, {
671
- path: PATH_1,
672
- ext: EXT_1
673
- }), defaultFile);
674
- (0, _react.act)(function () {
675
- setPath(PATH_2);
676
- });
677
- (0, _globals.expect)(onChange2).toHaveBeenCalledTimes(0);
678
- (0, _globals.expect)(onChange1).toHaveBeenCalledTimes(2);
679
- (0, _globals.expect)(onChange1).toHaveBeenLastCalledWith(_objectSpread(_objectSpread({}, defaultFile), {}, {
680
- path: PATH_2,
681
- ext: EXT_2
682
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
683
- path: PATH_1,
684
- ext: EXT_1
685
- }));
686
- });
687
650
  (0, _globals.test)('`options.options` should override rest options', function () {
688
- var _renderHook15 = (0, _react.renderHook)(function () {
651
+ var _renderHook14 = (0, _react.renderHook)(function () {
689
652
  return (0, _.useUseCase)(defaultFile, fileUseCase, {
690
653
  pathPrefix: 'xyz/',
691
654
  options: {
@@ -693,11 +656,11 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
693
656
  }
694
657
  });
695
658
  }),
696
- result = _renderHook15.result;
659
+ result = _renderHook14.result;
697
660
  var cores = result.current;
698
- var _cores13 = (0, _slicedToArray2["default"])(cores, 2),
699
- path = _cores13[0].path,
700
- reducers = _cores13[1];
661
+ var _cores12 = (0, _slicedToArray2["default"])(cores, 2),
662
+ path = _cores12[0].path,
663
+ reducers = _cores12[1];
701
664
  var setPath = reducers.setPath;
702
665
  (0, _globals.expect)(path).toBe('');
703
666
  (0, _react.act)(function () {
@@ -708,7 +671,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
708
671
  (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
709
672
  var onUpdate = _globals.jest.fn();
710
673
  var onDeepUpdate = _globals.jest.fn();
711
- var _renderHook16 = (0, _react.renderHook)(function () {
674
+ var _renderHook15 = (0, _react.renderHook)(function () {
712
675
  var _useState = (0, _react2.useState)('user/'),
713
676
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
714
677
  pathPrefix = _useState2[0],
@@ -724,7 +687,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
724
687
  }, [context]);
725
688
  return setPathPrefix;
726
689
  }),
727
- result = _renderHook16.result;
690
+ result = _renderHook15.result;
728
691
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
729
692
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
730
693
  (0, _react.act)(function () {
@@ -733,42 +696,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
733
696
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
734
697
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
735
698
  });
736
- (0, _globals.test)('when `entity` change, it should trigger watchers', function () {
737
- var onPathChange = _globals.jest.fn();
738
- var onSizeChange = _globals.jest.fn();
739
- var _renderHook17 = (0, _react.renderHook)(function () {
740
- return (0, _.useUseCase)(defaultFile, fileUseCase, {
741
- watch: {
742
- path: onPathChange,
743
- size: onSizeChange
744
- }
745
- });
746
- }),
747
- result = _renderHook17.result;
748
- var cores = result.current;
749
- var _cores14 = (0, _slicedToArray2["default"])(cores, 2),
750
- setPath = _cores14[1].setPath;
751
- (0, _globals.expect)(onPathChange).toHaveBeenCalledTimes(0);
752
- (0, _react.act)(function () {
753
- setPath(PATH_1);
754
- });
755
- (0, _globals.expect)(onPathChange).toHaveBeenCalledTimes(1);
756
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(0);
757
- (0, _globals.expect)(onPathChange).toHaveBeenLastCalledWith({
758
- fieldPaths: ['path'],
759
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
760
- path: PATH_1,
761
- ext: EXT_1
762
- }),
763
- oldEntity: defaultFile,
764
- newValue: PATH_1,
765
- oldValue: ''
766
- });
767
- });
768
699
  (0, _globals.test)('when `deps` has changed, it should trigger update', function () {
769
700
  var onUpdate = _globals.jest.fn();
770
701
  var onDeepUpdate = _globals.jest.fn();
771
- var _renderHook18 = (0, _react.renderHook)(function () {
702
+ var _renderHook16 = (0, _react.renderHook)(function () {
772
703
  var _useState3 = (0, _react2.useState)('user/'),
773
704
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
774
705
  pathPrefix = _useState4[0],
@@ -784,7 +715,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
784
715
  }, [context]);
785
716
  return setPathPrefix;
786
717
  }),
787
- result = _renderHook18.result;
718
+ result = _renderHook16.result;
788
719
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
789
720
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
790
721
  (0, _react.act)(function () {
@@ -796,7 +727,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
796
727
  (0, _globals.test)('empty `deps` should not trigger update', function () {
797
728
  var onUpdate = _globals.jest.fn();
798
729
  var onDeepUpdate = _globals.jest.fn();
799
- var _renderHook19 = (0, _react.renderHook)(function () {
730
+ var _renderHook17 = (0, _react.renderHook)(function () {
800
731
  var _useState5 = (0, _react2.useState)('user/'),
801
732
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
802
733
  pathPrefix = _useState6[0],
@@ -812,7 +743,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
812
743
  }, [context]);
813
744
  return setPathPrefix;
814
745
  }),
815
- result = _renderHook19.result;
746
+ result = _renderHook17.result;
816
747
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
817
748
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
818
749
  (0, _react.act)(function () {
@@ -821,610 +752,32 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
821
752
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
822
753
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
823
754
  });
824
- (0, _globals.test)('`options.watch` should be updated after `deps` changed', function () {
755
+ (0, _globals.test)("should call latest functions of usecase options even deps has not change", function () {
825
756
  var onPathChange1 = _globals.jest.fn();
826
757
  var onPathChange2 = _globals.jest.fn();
827
758
  var onPathChange = onPathChange1;
828
- var deps = [1];
829
- var _renderHook20 = (0, _react.renderHook)(function () {
759
+ var _renderHook18 = (0, _react.renderHook)(function () {
830
760
  return (0, _.useUseCase)(defaultFile, fileUseCase, {
831
- watch: {
832
- path: onPathChange
833
- }
834
- }, deps);
761
+ onPathChange: onPathChange
762
+ });
835
763
  }),
836
- result = _renderHook20.result;
837
- var cores = result.current;
838
- var _cores15 = (0, _slicedToArray2["default"])(cores, 2),
839
- _cores15$ = _cores15[1],
840
- setPath = _cores15$.setPath,
841
- setEntity = _cores15$.setEntity;
842
- (0, _globals.expect)(onPathChange1).toHaveBeenCalledTimes(0);
764
+ result = _renderHook18.result;
765
+ var context = result.current;
766
+ var _context6 = (0, _slicedToArray2["default"])(context, 2),
767
+ setPath = _context6[1].setPath;
843
768
  (0, _react.act)(function () {
844
769
  setPath(PATH_1);
845
- setEntity({
846
- size: 5000
847
- });
848
- deps = [2];
849
770
  onPathChange = onPathChange2;
850
771
  });
851
772
  (0, _globals.expect)(onPathChange1).toHaveBeenCalledTimes(1);
852
- (0, _globals.expect)(onPathChange1).toHaveBeenLastCalledWith({
853
- fieldPaths: ['path'],
854
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
855
- path: PATH_1,
856
- ext: EXT_1
857
- }),
858
- oldEntity: defaultFile,
859
- newValue: PATH_1,
860
- oldValue: ''
861
- });
773
+ (0, _globals.expect)(onPathChange2).toHaveBeenCalledTimes(0);
774
+ (0, _globals.expect)(onPathChange1).toHaveBeenLastCalledWith(PATH_1, '');
862
775
  (0, _react.act)(function () {
863
- setPath('');
776
+ setPath(PATH_2);
864
777
  });
865
778
  (0, _globals.expect)(onPathChange1).toHaveBeenCalledTimes(1);
866
779
  (0, _globals.expect)(onPathChange2).toHaveBeenCalledTimes(1);
867
- (0, _globals.expect)(onPathChange2).toHaveBeenLastCalledWith({
868
- fieldPaths: ['path'],
869
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
870
- size: 5000
871
- }),
872
- oldEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
873
- path: PATH_1,
874
- ext: EXT_1,
875
- size: 5000
876
- }),
877
- newValue: '',
878
- oldValue: PATH_1
879
- });
880
- });
881
- (0, _globals.test)('`options.watch` should not be updated if `deps` has not changed', function () {
882
- var onPathChange1 = _globals.jest.fn();
883
- var onPathChange2 = _globals.jest.fn();
884
- var onPathChange = onPathChange1;
885
- var _renderHook21 = (0, _react.renderHook)(function () {
886
- return (0, _.useUseCase)(defaultFile, fileUseCase, {
887
- watch: {
888
- path: onPathChange
889
- }
890
- }, []);
891
- }),
892
- result = _renderHook21.result;
893
- var cores = result.current;
894
- var _cores16 = (0, _slicedToArray2["default"])(cores, 2),
895
- _cores16$ = _cores16[1],
896
- setPath = _cores16$.setPath,
897
- setEntity = _cores16$.setEntity;
898
- (0, _globals.expect)(onPathChange1).toHaveBeenCalledTimes(0);
899
- (0, _react.act)(function () {
900
- setPath(PATH_1);
901
- setEntity({
902
- size: 5000
903
- });
904
- onPathChange = onPathChange2;
905
- });
906
- (0, _globals.expect)(onPathChange1).toHaveBeenCalledTimes(1);
907
- (0, _globals.expect)(onPathChange1).toHaveBeenLastCalledWith({
908
- fieldPaths: ['path'],
909
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
910
- path: PATH_1,
911
- ext: EXT_1
912
- }),
913
- oldEntity: defaultFile,
914
- newValue: PATH_1,
915
- oldValue: ''
916
- });
917
- (0, _react.act)(function () {
918
- setPath('');
919
- });
920
- (0, _globals.expect)(onPathChange2).toHaveBeenCalledTimes(0);
921
- (0, _globals.expect)(onPathChange1).toHaveBeenCalledTimes(2);
922
- (0, _globals.expect)(onPathChange1).toHaveBeenLastCalledWith({
923
- fieldPaths: ['path'],
924
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
925
- size: 5000
926
- }),
927
- oldEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
928
- path: PATH_1,
929
- ext: EXT_1,
930
- size: 5000
931
- }),
932
- newValue: '',
933
- oldValue: PATH_1
934
- });
935
- });
936
- (0, _globals.test)('`options.watch` should work with array field path of array', function () {
937
- var onExtChange = _globals.jest.fn();
938
- var onSizeChange = _globals.jest.fn();
939
- var _renderHook22 = (0, _react.renderHook)(function () {
940
- return (0, _.useUseCase)({}, fieldPathUseCase, {
941
- watch: {
942
- 'list.ext': onExtChange,
943
- 'list.size': onSizeChange
944
- }
945
- });
946
- }),
947
- result = _renderHook22.result;
948
- var cores = result.current;
949
- var _cores17 = (0, _slicedToArray2["default"])(cores, 2),
950
- setEntity = _cores17[1].setEntity;
951
- (0, _react.act)(function () {
952
- setEntity({
953
- list: [defaultFile]
954
- });
955
- });
956
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(1);
957
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(1);
958
- (0, _globals.expect)(onExtChange).toHaveBeenCalledWith({
959
- fieldPaths: ['list', '0', 'ext'],
960
- newEntity: {
961
- list: [defaultFile]
962
- },
963
- oldEntity: {},
964
- newValue: '',
965
- oldValue: void 0
966
- });
967
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledWith({
968
- fieldPaths: ['list', '0', 'size'],
969
- newEntity: {
970
- list: [defaultFile]
971
- },
972
- oldEntity: {},
973
- newValue: 0,
974
- oldValue: void 0
975
- });
976
- (0, _react.act)(function () {
977
- setEntity({
978
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
979
- ext: EXT_1
980
- })]
981
- });
982
- });
983
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(2);
984
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(1);
985
- (0, _globals.expect)(onExtChange).toHaveBeenCalledWith({
986
- fieldPaths: ['list', '0', 'ext'],
987
- newEntity: {
988
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
989
- ext: EXT_1
990
- })]
991
- },
992
- oldEntity: {
993
- list: [defaultFile]
994
- },
995
- newValue: EXT_1,
996
- oldValue: ''
997
- });
998
- (0, _react.act)(function () {
999
- setEntity({
1000
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1001
- ext: EXT_1
1002
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1003
- ext: EXT_2
1004
- })]
1005
- });
1006
- });
1007
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(3);
1008
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(2);
1009
- (0, _globals.expect)(onExtChange).toHaveBeenCalledWith({
1010
- fieldPaths: ['list', '1', 'ext'],
1011
- newEntity: {
1012
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1013
- ext: EXT_1
1014
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1015
- ext: EXT_2
1016
- })]
1017
- },
1018
- oldEntity: {
1019
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1020
- ext: EXT_1
1021
- })]
1022
- },
1023
- newValue: EXT_2,
1024
- oldValue: void 0
1025
- });
1026
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledWith({
1027
- fieldPaths: ['list', '1', 'size'],
1028
- newEntity: {
1029
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1030
- ext: EXT_1
1031
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1032
- ext: EXT_2
1033
- })]
1034
- },
1035
- oldEntity: {
1036
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1037
- ext: EXT_1
1038
- })]
1039
- },
1040
- newValue: 0,
1041
- oldValue: void 0
1042
- });
1043
- (0, _react.act)(function () {
1044
- setEntity({
1045
- nestedList: []
1046
- });
1047
- });
1048
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(3);
1049
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(2);
1050
- (0, _react.act)(function () {
1051
- setEntity(function () {
1052
- return {
1053
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1054
- ext: EXT_2
1055
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1056
- ext: EXT_1
1057
- }), defaultFile]
1058
- };
1059
- });
1060
- });
1061
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(6);
1062
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(3);
1063
- (0, _globals.expect)(onExtChange).toHaveBeenNthCalledWith(4, {
1064
- fieldPaths: ['list', '0', 'ext'],
1065
- newEntity: {
1066
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1067
- ext: EXT_2
1068
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1069
- ext: EXT_1
1070
- }), defaultFile]
1071
- },
1072
- oldEntity: {
1073
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1074
- ext: EXT_1
1075
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1076
- ext: EXT_2
1077
- })],
1078
- nestedList: []
1079
- },
1080
- newValue: EXT_2,
1081
- oldValue: EXT_1
1082
- });
1083
- (0, _globals.expect)(onExtChange).toHaveBeenNthCalledWith(5, {
1084
- fieldPaths: ['list', '1', 'ext'],
1085
- newEntity: {
1086
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1087
- ext: EXT_2
1088
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1089
- ext: EXT_1
1090
- }), defaultFile]
1091
- },
1092
- oldEntity: {
1093
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1094
- ext: EXT_1
1095
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1096
- ext: EXT_2
1097
- })],
1098
- nestedList: []
1099
- },
1100
- newValue: EXT_1,
1101
- oldValue: EXT_2
1102
- });
1103
- (0, _globals.expect)(onExtChange).toHaveBeenNthCalledWith(6, {
1104
- fieldPaths: ['list', '2', 'ext'],
1105
- newEntity: {
1106
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1107
- ext: EXT_2
1108
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1109
- ext: EXT_1
1110
- }), defaultFile]
1111
- },
1112
- oldEntity: {
1113
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1114
- ext: EXT_1
1115
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1116
- ext: EXT_2
1117
- })],
1118
- nestedList: []
1119
- },
1120
- newValue: '',
1121
- oldValue: void 0
1122
- });
1123
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledWith({
1124
- fieldPaths: ['list', '2', 'size'],
1125
- newEntity: {
1126
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1127
- ext: EXT_2
1128
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1129
- ext: EXT_1
1130
- }), defaultFile]
1131
- },
1132
- oldEntity: {
1133
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1134
- ext: EXT_1
1135
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1136
- ext: EXT_2
1137
- })],
1138
- nestedList: []
1139
- },
1140
- newValue: 0,
1141
- oldValue: void 0
1142
- });
1143
- (0, _react.act)(function () {
1144
- setEntity(function () {
1145
- return {};
1146
- });
1147
- });
1148
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(9);
1149
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(6);
1150
- (0, _globals.expect)(onExtChange).toHaveBeenNthCalledWith(7, {
1151
- fieldPaths: ['list', '0', 'ext'],
1152
- newEntity: {},
1153
- oldEntity: {
1154
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1155
- ext: EXT_2
1156
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1157
- ext: EXT_1
1158
- }), defaultFile]
1159
- },
1160
- newValue: void 0,
1161
- oldValue: EXT_2
1162
- });
1163
- (0, _globals.expect)(onExtChange).toHaveBeenNthCalledWith(8, {
1164
- fieldPaths: ['list', '1', 'ext'],
1165
- newEntity: {},
1166
- oldEntity: {
1167
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1168
- ext: EXT_2
1169
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1170
- ext: EXT_1
1171
- }), defaultFile]
1172
- },
1173
- newValue: void 0,
1174
- oldValue: EXT_1
1175
- });
1176
- (0, _globals.expect)(onExtChange).toHaveBeenNthCalledWith(9, {
1177
- fieldPaths: ['list', '2', 'ext'],
1178
- newEntity: {},
1179
- oldEntity: {
1180
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1181
- ext: EXT_2
1182
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1183
- ext: EXT_1
1184
- }), defaultFile]
1185
- },
1186
- newValue: void 0,
1187
- oldValue: ''
1188
- });
1189
- (0, _globals.expect)(onSizeChange).toHaveBeenNthCalledWith(4, {
1190
- fieldPaths: ['list', '0', 'size'],
1191
- newEntity: {},
1192
- oldEntity: {
1193
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1194
- ext: EXT_2
1195
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1196
- ext: EXT_1
1197
- }), defaultFile]
1198
- },
1199
- newValue: void 0,
1200
- oldValue: 0
1201
- });
1202
- (0, _globals.expect)(onSizeChange).toHaveBeenNthCalledWith(5, {
1203
- fieldPaths: ['list', '1', 'size'],
1204
- newEntity: {},
1205
- oldEntity: {
1206
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1207
- ext: EXT_2
1208
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1209
- ext: EXT_1
1210
- }), defaultFile]
1211
- },
1212
- newValue: void 0,
1213
- oldValue: 0
1214
- });
1215
- (0, _globals.expect)(onSizeChange).toHaveBeenNthCalledWith(6, {
1216
- fieldPaths: ['list', '2', 'size'],
1217
- newEntity: {},
1218
- oldEntity: {
1219
- list: [_objectSpread(_objectSpread({}, defaultFile), {}, {
1220
- ext: EXT_2
1221
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1222
- ext: EXT_1
1223
- }), defaultFile]
1224
- },
1225
- newValue: void 0,
1226
- oldValue: 0
1227
- });
1228
- });
1229
- (0, _globals.test)('`options.watch` should work with field path of array length', function () {
1230
- var onEntityLengthChange = _globals.jest.fn();
1231
- var onListLengthChange = _globals.jest.fn();
1232
- var lengthUseCase = function lengthUseCase() {
1233
- return (0, _usecases.entityUseCase)();
1234
- };
1235
- var _renderHook23 = (0, _react.renderHook)(function () {
1236
- return (0, _.useUseCase)([], lengthUseCase, {
1237
- watch: {
1238
- length: onEntityLengthChange,
1239
- 'list.length': onListLengthChange
1240
- }
1241
- });
1242
- }),
1243
- result = _renderHook23.result;
1244
- var cores = result.current;
1245
- var _cores18 = (0, _slicedToArray2["default"])(cores, 2),
1246
- setEntity = _cores18[1].setEntity;
1247
- (0, _globals.expect)(onEntityLengthChange).toHaveBeenCalledTimes(0);
1248
- (0, _globals.expect)(onListLengthChange).toHaveBeenCalledTimes(0);
1249
- (0, _react.act)(function () {
1250
- setEntity([{
1251
- list: [defaultFile, defaultFile]
1252
- }]);
1253
- });
1254
- (0, _globals.expect)(onEntityLengthChange).toHaveBeenCalledTimes(1);
1255
- (0, _globals.expect)(onListLengthChange).toHaveBeenCalledTimes(1);
1256
- (0, _globals.expect)(onEntityLengthChange).toHaveBeenCalledWith({
1257
- fieldPaths: ['length'],
1258
- newEntity: [{
1259
- list: [defaultFile, defaultFile]
1260
- }],
1261
- oldEntity: [],
1262
- newValue: 1,
1263
- oldValue: 0
1264
- });
1265
- (0, _globals.expect)(onListLengthChange).toHaveBeenCalledWith({
1266
- fieldPaths: ['0', 'list', 'length'],
1267
- newEntity: [{
1268
- list: [defaultFile, defaultFile]
1269
- }],
1270
- oldEntity: [],
1271
- newValue: 2,
1272
- oldValue: void 0
1273
- });
1274
- });
1275
- (0, _globals.test)('`options.watch` should work with field path of nested array', function () {
1276
- var onChange = _globals.jest.fn();
1277
- var _renderHook24 = (0, _react.renderHook)(function () {
1278
- return (0, _.useUseCase)({}, fieldPathUseCase, {
1279
- watch: {
1280
- 'nestedList.size': onChange
1281
- }
1282
- });
1283
- }),
1284
- result = _renderHook24.result;
1285
- var cores = result.current;
1286
- var _cores19 = (0, _slicedToArray2["default"])(cores, 2),
1287
- setEntity = _cores19[1].setEntity;
1288
- (0, _globals.expect)(onChange).toHaveBeenCalledTimes(0);
1289
- (0, _react.act)(function () {
1290
- setEntity({
1291
- nestedList: [[[defaultFile]]]
1292
- });
1293
- });
1294
- (0, _globals.expect)(onChange).toHaveBeenCalledTimes(1);
1295
- (0, _globals.expect)(onChange).toHaveBeenCalledWith({
1296
- fieldPaths: ['nestedList', '0', '0', '0', 'size'],
1297
- newEntity: {
1298
- nestedList: [[[defaultFile]]]
1299
- },
1300
- oldEntity: {},
1301
- newValue: 0,
1302
- oldValue: void 0
1303
- });
1304
- (0, _react.act)(function () {
1305
- setEntity({
1306
- nestedList: [[[_objectSpread(_objectSpread({}, defaultFile), {}, {
1307
- size: 100
1308
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1309
- size: 200
1310
- })]], [[_objectSpread(_objectSpread({}, defaultFile), {}, {
1311
- size: 300
1312
- })]]]
1313
- });
1314
- });
1315
- (0, _globals.expect)(onChange).toHaveBeenCalledTimes(4);
1316
- (0, _globals.expect)(onChange).toHaveBeenNthCalledWith(2, {
1317
- fieldPaths: ['nestedList', '0', '0', '0', 'size'],
1318
- newEntity: {
1319
- nestedList: [[[_objectSpread(_objectSpread({}, defaultFile), {}, {
1320
- size: 100
1321
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1322
- size: 200
1323
- })]], [[_objectSpread(_objectSpread({}, defaultFile), {}, {
1324
- size: 300
1325
- })]]]
1326
- },
1327
- oldEntity: {
1328
- nestedList: [[[defaultFile]]]
1329
- },
1330
- newValue: 100,
1331
- oldValue: 0
1332
- });
1333
- (0, _globals.expect)(onChange).toHaveBeenNthCalledWith(3, {
1334
- fieldPaths: ['nestedList', '0', '0', '1', 'size'],
1335
- newEntity: {
1336
- nestedList: [[[_objectSpread(_objectSpread({}, defaultFile), {}, {
1337
- size: 100
1338
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1339
- size: 200
1340
- })]], [[_objectSpread(_objectSpread({}, defaultFile), {}, {
1341
- size: 300
1342
- })]]]
1343
- },
1344
- oldEntity: {
1345
- nestedList: [[[defaultFile]]]
1346
- },
1347
- newValue: 200,
1348
- oldValue: void 0
1349
- });
1350
- (0, _globals.expect)(onChange).toHaveBeenNthCalledWith(4, {
1351
- fieldPaths: ['nestedList', '1', '0', '0', 'size'],
1352
- newEntity: {
1353
- nestedList: [[[_objectSpread(_objectSpread({}, defaultFile), {}, {
1354
- size: 100
1355
- }), _objectSpread(_objectSpread({}, defaultFile), {}, {
1356
- size: 200
1357
- })]], [[_objectSpread(_objectSpread({}, defaultFile), {}, {
1358
- size: 300
1359
- })]]]
1360
- },
1361
- oldEntity: {
1362
- nestedList: [[[defaultFile]]]
1363
- },
1364
- newValue: 300,
1365
- oldValue: void 0
1366
- });
1367
- });
1368
- (0, _globals.test)('`options.watch` should work with field path of object', function () {
1369
- var onExtChange = _globals.jest.fn();
1370
- var onSizeChange = _globals.jest.fn();
1371
- var _renderHook25 = (0, _react.renderHook)(function () {
1372
- return (0, _.useUseCase)({}, fieldPathUseCase, {
1373
- watch: {
1374
- 'obj.file.ext': onExtChange,
1375
- 'obj.file.size': onSizeChange
1376
- }
1377
- });
1378
- }),
1379
- result = _renderHook25.result;
1380
- var cores = result.current;
1381
- var _cores20 = (0, _slicedToArray2["default"])(cores, 2),
1382
- setEntity = _cores20[1].setEntity;
1383
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(0);
1384
- (0, _react.act)(function () {
1385
- setEntity({
1386
- obj: {
1387
- file: {
1388
- ext: EXT_1
1389
- }
1390
- }
1391
- });
1392
- });
1393
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(1);
1394
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(0);
1395
- (0, _globals.expect)(onExtChange).toHaveBeenCalledWith({
1396
- fieldPaths: ['obj', 'file', 'ext'],
1397
- newEntity: {
1398
- obj: {
1399
- file: {
1400
- ext: EXT_1
1401
- }
1402
- }
1403
- },
1404
- oldEntity: {},
1405
- newValue: EXT_1,
1406
- oldValue: void 0
1407
- });
1408
- (0, _react.act)(function () {
1409
- setEntity(function () {
1410
- return {};
1411
- });
1412
- });
1413
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(2);
1414
- (0, _globals.expect)(onSizeChange).toHaveBeenCalledTimes(0);
1415
- (0, _globals.expect)(onExtChange).toHaveBeenCalledWith({
1416
- fieldPaths: ['obj', 'file', 'ext'],
1417
- newEntity: {},
1418
- oldEntity: {
1419
- obj: {
1420
- file: {
1421
- ext: EXT_1
1422
- }
1423
- }
1424
- },
1425
- newValue: void 0,
1426
- oldValue: EXT_1
1427
- });
780
+ (0, _globals.expect)(onPathChange2).toHaveBeenLastCalledWith(PATH_2, PATH_1);
1428
781
  });
1429
782
  (0, _globals.test)('multiple `Provider` should work', function () {
1430
783
  var onNumberMount = _globals.jest.fn();
@@ -1479,28 +832,28 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1479
832
  });
1480
833
  (0, _globals.describe)('`useUseCase` should work the same as `ModeCoreCollectionHook`', function () {
1481
834
  _globals.test.each([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('[mode=%s]: check context type', function (mode) {
1482
- var _renderHook26 = (0, _react.renderHook)(function () {
835
+ var _renderHook19 = (0, _react.renderHook)(function () {
1483
836
  return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
1484
837
  }),
1485
- result = _renderHook26.result;
838
+ result = _renderHook19.result;
1486
839
  var cores = result.current;
1487
840
  (0, _globals.expect)(Array.isArray(cores)).toBe(true);
1488
841
  (0, _globals.expect)(cores).toHaveLength(3);
1489
842
  });
1490
843
  (0, _globals.test)('stateless mode should not generate new reducers when `yeild entity`', function () {
1491
844
  var onUpdate = _globals.jest.fn();
1492
- var _renderHook27 = (0, _react.renderHook)(function () {
845
+ var _renderHook20 = (0, _react.renderHook)(function () {
1493
846
  var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultFile;
1494
847
  (0, _ahooks.useUpdateEffect)(function () {
1495
848
  onUpdate();
1496
849
  });
1497
850
  return (0, _.useUseCase)(file, fileUseCase, _UseCaseModes.UseCaseModes.Stateless);
1498
851
  }),
1499
- result = _renderHook27.result,
1500
- rerender = _renderHook27.rerender;
852
+ result = _renderHook20.result,
853
+ rerender = _renderHook20.rerender;
1501
854
  var cores = result.current;
1502
- var _cores21 = (0, _slicedToArray2["default"])(cores, 2),
1503
- setPath = _cores21[1].setPath;
855
+ var _cores13 = (0, _slicedToArray2["default"])(cores, 2),
856
+ setPath = _cores13[1].setPath;
1504
857
  setPath(PATH_1);
1505
858
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1506
859
  (0, _globals.expect)(result.current[0].path).toBe('');
@@ -1513,16 +866,16 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1513
866
  });
1514
867
  (0, _globals.test)('stateless mode should not trigger update when after `yield entity`', function () {
1515
868
  var onUpdate = _globals.jest.fn();
1516
- var _renderHook28 = (0, _react.renderHook)(function () {
869
+ var _renderHook21 = (0, _react.renderHook)(function () {
1517
870
  (0, _ahooks.useUpdateEffect)(function () {
1518
871
  onUpdate();
1519
872
  });
1520
873
  return (0, _.useUseCase)(defaultFile, fileUseCase, _UseCaseModes.UseCaseModes.Stateless);
1521
874
  }),
1522
- result = _renderHook28.result;
875
+ result = _renderHook21.result;
1523
876
  var cores = result.current;
1524
- var _cores22 = (0, _slicedToArray2["default"])(cores, 2),
1525
- reducers = _cores22[1];
877
+ var _cores14 = (0, _slicedToArray2["default"])(cores, 2),
878
+ reducers = _cores14[1];
1526
879
  var setPath = reducers.setPath;
1527
880
  (0, _react.act)(function () {
1528
881
  setPath(PATH_1);
@@ -1751,130 +1104,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1751
1104
  _react.fireEvent.click(_react.screen.getByText(updateButtonText));
1752
1105
  (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
1753
1106
  });
1754
- _globals.test.each([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('[mode=%s]: `options.watch` should be updated in child element after `deps` changed', function (mode) {
1755
- var onFirstExtChange = _globals.jest.fn();
1756
- var onSecondExtChange = _globals.jest.fn();
1757
- var onExtChange = onFirstExtChange;
1758
- var deps = [1];
1759
- var firstButtonText = 'first button';
1760
- var secondButtonText = 'second button';
1761
- var A = function A() {
1762
- (0, _.useUseCase)(fileUseCase, {
1763
- watch: {
1764
- ext: onExtChange
1765
- }
1766
- }, deps);
1767
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1768
- };
1769
- var B = function B() {
1770
- var _useState7 = (0, _react2.useState)(defaultFile),
1771
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
1772
- file = _useState8[0],
1773
- setFile = _useState8[1];
1774
- var _useUseCase38 = (0, _.useUseCase)(file, fileUseCase, mode, {
1775
- onChange: function onChange(newFile) {
1776
- if ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
1777
- return;
1778
- }
1779
- // `stateless` 不会保存状态,所以需要手动保存
1780
- setFile(newFile);
1781
- }
1782
- }),
1783
- _useUseCase39 = (0, _slicedToArray2["default"])(_useUseCase38, 3),
1784
- setPath = _useUseCase39[1].setPath,
1785
- Provider = _useUseCase39[2];
1786
- var onFirstClick = function onFirstClick() {
1787
- setPath(PATH_1);
1788
- deps = [2];
1789
- onExtChange = onSecondExtChange;
1790
- };
1791
- var onSecondClick = function onSecondClick() {
1792
- setPath('');
1793
- };
1794
- return (0, _jsxRuntime.jsxs)(Provider, {
1795
- children: [(0, _jsxRuntime.jsx)(A, {}), (0, _jsxRuntime.jsx)("button", {
1796
- onClick: onFirstClick,
1797
- children: firstButtonText
1798
- }), (0, _jsxRuntime.jsx)("button", {
1799
- onClick: onSecondClick,
1800
- children: secondButtonText
1801
- })]
1802
- });
1803
- };
1804
- (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1805
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(0);
1806
- _react.fireEvent.click(_react.screen.getByText(firstButtonText));
1807
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
1808
- (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(0);
1809
- _react.fireEvent.click(_react.screen.getByText(secondButtonText));
1810
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
1811
- (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(1);
1812
- (0, _globals.expect)(onSecondExtChange).toHaveBeenLastCalledWith({
1813
- fieldPaths: ['ext'],
1814
- newEntity: defaultFile,
1815
- oldEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
1816
- ext: EXT_1,
1817
- path: PATH_1
1818
- }),
1819
- newValue: '',
1820
- oldValue: EXT_1
1821
- });
1822
- });
1823
- _globals.test.each([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('`options.watch` should not be updated in child element if `deps` has not changed', function (mode) {
1824
- var onFirstExtChange = _globals.jest.fn();
1825
- var onSecondExtChange = _globals.jest.fn();
1826
- var onExtChange = onFirstExtChange;
1827
- var firstButtonText = 'first button';
1828
- var secondButtonText = 'second button';
1829
- var A = function A() {
1830
- (0, _.useUseCase)(fileUseCase, {
1831
- watch: {
1832
- ext: onExtChange
1833
- }
1834
- }, []);
1835
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1836
- };
1837
- var B = function B() {
1838
- var _useUseCase40 = (0, _.useUseCase)(defaultFile, fileUseCase, mode),
1839
- _useUseCase41 = (0, _slicedToArray2["default"])(_useUseCase40, 3),
1840
- setPath = _useUseCase41[1].setPath,
1841
- Provider = _useUseCase41[2];
1842
- var onFirstClick = function onFirstClick() {
1843
- setPath(PATH_1);
1844
- onExtChange = onSecondExtChange;
1845
- };
1846
- var onSecondClick = function onSecondClick() {
1847
- setPath('');
1848
- };
1849
- return (0, _jsxRuntime.jsxs)(Provider, {
1850
- children: [(0, _jsxRuntime.jsx)(A, {}), (0, _jsxRuntime.jsx)("button", {
1851
- onClick: onFirstClick,
1852
- children: firstButtonText
1853
- }), (0, _jsxRuntime.jsx)("button", {
1854
- onClick: onSecondClick,
1855
- children: secondButtonText
1856
- })]
1857
- });
1858
- };
1859
- (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1860
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(0);
1861
- _react.fireEvent.click(_react.screen.getByText(firstButtonText));
1862
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(1);
1863
- (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(0);
1864
- _react.fireEvent.click(_react.screen.getByText(secondButtonText));
1865
- (0, _globals.expect)(onFirstExtChange).toHaveBeenCalledTimes(2);
1866
- (0, _globals.expect)(onSecondExtChange).toHaveBeenCalledTimes(0);
1867
- (0, _globals.expect)(onFirstExtChange).toHaveBeenLastCalledWith({
1868
- fieldPaths: ['ext'],
1869
- newEntity: defaultFile,
1870
- oldEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
1871
- ext: EXT_1,
1872
- path: PATH_1
1873
- }),
1874
- newValue: '',
1875
- oldValue: EXT_1
1876
- });
1877
- });
1878
1107
  (0, _globals.test)('`options.onChange` event should be trigger in orders', function () {
1879
1108
  var changeTimes = 0;
1880
1109
  var updateChangeTimes = function updateChangeTimes() {
@@ -1900,12 +1129,12 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1900
1129
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1901
1130
  };
1902
1131
  var C = function C() {
1903
- var _useUseCase42 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1132
+ var _useUseCase38 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1904
1133
  onChange: onChangeC
1905
1134
  }),
1906
- _useUseCase43 = (0, _slicedToArray2["default"])(_useUseCase42, 3),
1907
- setPath = _useUseCase43[1].setPath,
1908
- Provider = _useUseCase43[2];
1135
+ _useUseCase39 = (0, _slicedToArray2["default"])(_useUseCase38, 3),
1136
+ setPath = _useUseCase39[1].setPath,
1137
+ Provider = _useUseCase39[2];
1909
1138
  var onFirstClick = function onFirstClick() {
1910
1139
  setPath(PATH_1);
1911
1140
  };
@@ -1925,139 +1154,103 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1925
1154
  (0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
1926
1155
  (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
1927
1156
  });
1928
- (0, _globals.test)('`options.watch` should be trigger at child elements', function () {
1929
- var onExtChange = _globals.jest.fn();
1157
+ _globals.test.each([_UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Stateless])('[mode=%s]: `options.onChange` should always trigger the latest one in child components', function (mode) {
1158
+ var onFirstChange = _globals.jest.fn();
1159
+ var onSecondChange = _globals.jest.fn();
1160
+ var onChange = onFirstChange;
1930
1161
  var firstButtonText = 'first button';
1162
+ var secondButtonText = 'second button';
1931
1163
  var A = function A() {
1932
- (0, _.useUseCase)(fileUseCase, {
1933
- watch: {
1934
- ext: onExtChange
1935
- }
1936
- });
1937
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1938
- };
1939
- var B = function B() {
1940
- var _useUseCase44 = (0, _.useUseCase)(defaultFile, fileUseCase, {}),
1941
- _useUseCase45 = (0, _slicedToArray2["default"])(_useUseCase44, 3),
1942
- setPath = _useUseCase45[1].setPath,
1943
- Provider = _useUseCase45[2];
1164
+ var _useUseCase40 = (0, _.useUseCase)(fileUseCase, {
1165
+ onChange: onChange
1166
+ }),
1167
+ _useUseCase41 = (0, _slicedToArray2["default"])(_useUseCase40, 2),
1168
+ setPath = _useUseCase41[1].setPath;
1944
1169
  var onFirstClick = function onFirstClick() {
1945
1170
  setPath(PATH_1);
1171
+ onChange = onSecondChange;
1946
1172
  };
1947
- return (0, _jsxRuntime.jsxs)(Provider, {
1948
- children: [(0, _jsxRuntime.jsx)(A, {}), (0, _jsxRuntime.jsx)("button", {
1173
+ var onSecondClick = function onSecondClick() {
1174
+ setPath('');
1175
+ };
1176
+ return (0, _jsxRuntime.jsxs)(_react2.Fragment, {
1177
+ children: [(0, _jsxRuntime.jsx)("button", {
1949
1178
  onClick: onFirstClick,
1950
1179
  children: firstButtonText
1180
+ }), (0, _jsxRuntime.jsx)("button", {
1181
+ onClick: onSecondClick,
1182
+ children: secondButtonText
1951
1183
  })]
1952
1184
  });
1953
1185
  };
1954
- (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1955
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(0);
1956
- _react.fireEvent.click(_react.screen.getByText(firstButtonText));
1957
- (0, _globals.expect)(onExtChange).toHaveBeenCalledTimes(1);
1958
- (0, _globals.expect)(onExtChange).toHaveBeenLastCalledWith({
1959
- fieldPaths: ['ext'],
1960
- newEntity: _objectSpread(_objectSpread({}, defaultFile), {}, {
1961
- ext: EXT_1,
1962
- path: PATH_1
1963
- }),
1964
- oldEntity: defaultFile,
1965
- newValue: EXT_1,
1966
- oldValue: ''
1967
- });
1968
- });
1969
- (0, _globals.test)('`options.watch` should be trigger in orders', function () {
1970
- var changeTimes = 0;
1971
- var updateChangeTimes = function updateChangeTimes(e) {
1972
- void e;
1973
- return ++changeTimes;
1974
- };
1975
- var onChangeA = _globals.jest.fn(updateChangeTimes);
1976
- var onChangeB = _globals.jest.fn(updateChangeTimes);
1977
- var onChangeC = _globals.jest.fn(updateChangeTimes);
1978
- var buttonText = 'my button';
1979
- var A = function A(_ref8) {
1980
- var children = _ref8.children;
1981
- (0, _.useUseCase)(fileUseCase, {
1982
- watch: {
1983
- ext: onChangeA
1984
- }
1985
- });
1986
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {
1987
- children: children
1988
- });
1989
- };
1990
1186
  var B = function B() {
1991
- (0, _.useUseCase)(fileUseCase, {
1992
- watch: {
1993
- ext: onChangeB
1994
- }
1995
- });
1996
- return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1997
- };
1998
- var C = function C() {
1999
- var _useUseCase46 = (0, _.useUseCase)(defaultFile, fileUseCase, {
2000
- watch: {
2001
- ext: onChangeC
1187
+ var _useState7 = (0, _react2.useState)(defaultFile),
1188
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
1189
+ file = _useState8[0],
1190
+ setFile = _useState8[1];
1191
+ var _useUseCase42 = (0, _.useUseCase)(file, fileUseCase, mode, {
1192
+ onChange: function onChange(newFile) {
1193
+ if ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
1194
+ return;
1195
+ }
1196
+ // `stateless` 不会保存状态,所以需要手动保存
1197
+ setFile(newFile);
2002
1198
  }
2003
1199
  }),
2004
- _useUseCase47 = (0, _slicedToArray2["default"])(_useUseCase46, 3),
2005
- setPath = _useUseCase47[1].setPath,
2006
- Provider = _useUseCase47[2];
2007
- var onFirstClick = function onFirstClick() {
2008
- setPath(PATH_1);
2009
- };
2010
- return (0, _jsxRuntime.jsxs)(Provider, {
2011
- children: [(0, _jsxRuntime.jsx)(A, {
2012
- children: (0, _jsxRuntime.jsx)(B, {})
2013
- }), (0, _jsxRuntime.jsx)("button", {
2014
- onClick: onFirstClick,
2015
- children: buttonText
2016
- })]
1200
+ _useUseCase43 = (0, _slicedToArray2["default"])(_useUseCase42, 3),
1201
+ Provider = _useUseCase43[2];
1202
+ return (0, _jsxRuntime.jsx)(Provider, {
1203
+ children: (0, _jsxRuntime.jsx)(A, {})
2017
1204
  });
2018
1205
  };
2019
- (0, _react.render)((0, _jsxRuntime.jsx)(C, {}));
2020
- (0, _globals.expect)(changeTimes).toBe(0);
2021
- _react.fireEvent.click(_react.screen.getByText(buttonText));
2022
- (0, _globals.expect)(onChangeA).toHaveReturnedWith(2);
2023
- (0, _globals.expect)(onChangeB).toHaveReturnedWith(1);
2024
- (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
1206
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1207
+ (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(0);
1208
+ _react.fireEvent.click(_react.screen.getByText(firstButtonText));
1209
+ (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
1210
+ (0, _globals.expect)(onSecondChange).toHaveBeenCalledTimes(0);
1211
+ _react.fireEvent.click(_react.screen.getByText(secondButtonText));
1212
+ (0, _globals.expect)(onFirstChange).toHaveBeenCalledTimes(1);
1213
+ (0, _globals.expect)(onSecondChange).toHaveBeenCalledTimes(1);
1214
+ (0, _globals.expect)(onSecondChange).toHaveBeenLastCalledWith(defaultFile, _objectSpread(_objectSpread({}, defaultFile), {}, {
1215
+ ext: EXT_1,
1216
+ path: PATH_1
1217
+ }));
2025
1218
  });
2026
1219
  });
2027
1220
  (0, _globals.describe)('`useUseCase` should work the same as `useReducers`', function () {
2028
1221
  (0, _globals.test)('`entity` should equal `defaultFile`', function () {
2029
- var _renderHook29 = (0, _react.renderHook)(function () {
1222
+ var _renderHook22 = (0, _react.renderHook)(function () {
2030
1223
  return (0, _.useUseCase)(mathUseCase);
2031
1224
  }),
2032
- result = _renderHook29.result;
1225
+ result = _renderHook22.result;
2033
1226
  var reducers = result.current;
2034
1227
  (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
2035
1228
  });
2036
1229
  (0, _globals.test)('returned reducer should work', function () {
2037
- var _renderHook30 = (0, _react.renderHook)(function () {
1230
+ var _renderHook23 = (0, _react.renderHook)(function () {
2038
1231
  return (0, _.useUseCase)(mathUseCase);
2039
1232
  }),
2040
- result = _renderHook30.result;
1233
+ result = _renderHook23.result;
2041
1234
  var reducers = result.current;
2042
1235
  var add = reducers.add;
2043
1236
  (0, _globals.expect)(add(1, 2)).toBe(3);
2044
1237
  });
2045
1238
  (0, _globals.test)('`usecase` should be called only once if deps has not provided', function () {
2046
1239
  var mockUseCase = _globals.jest.fn(mathUseCase);
2047
- var _renderHook31 = (0, _react.renderHook)(function () {
1240
+ var _renderHook24 = (0, _react.renderHook)(function () {
2048
1241
  return (0, _.useUseCase)(mockUseCase);
2049
1242
  }),
2050
- rerender = _renderHook31.rerender;
1243
+ rerender = _renderHook24.rerender;
2051
1244
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
2052
1245
  rerender();
2053
1246
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
2054
1247
  });
2055
1248
  (0, _globals.test)('`usecase` should be called only once if deps has not changed', function () {
2056
1249
  var mockUseCase = _globals.jest.fn(mathUseCase);
2057
- var _renderHook32 = (0, _react.renderHook)(function () {
1250
+ var _renderHook25 = (0, _react.renderHook)(function () {
2058
1251
  return (0, _.useUseCase)(mockUseCase, {}, [1, 'x']);
2059
1252
  }),
2060
- rerender = _renderHook32.rerender;
1253
+ rerender = _renderHook25.rerender;
2061
1254
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
2062
1255
  rerender();
2063
1256
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
@@ -2065,10 +1258,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2065
1258
  (0, _globals.test)('`usecase` should be called if deps has changed', function () {
2066
1259
  var i = 0;
2067
1260
  var mockUseCase = _globals.jest.fn(mathUseCase);
2068
- var _renderHook33 = (0, _react.renderHook)(function () {
1261
+ var _renderHook26 = (0, _react.renderHook)(function () {
2069
1262
  return (0, _.useUseCase)(mockUseCase, {}, [i++, 'x']);
2070
1263
  }),
2071
- rerender = _renderHook33.rerender;
1264
+ rerender = _renderHook26.rerender;
2072
1265
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
2073
1266
  rerender();
2074
1267
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(2);
@@ -2076,8 +1269,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2076
1269
  (0, _globals.test)('reducer call should not be cached if component is at rendering phase', function () {
2077
1270
  var buttonText = 'button';
2078
1271
  var CacheTestComponent = function CacheTestComponent() {
2079
- var _useUseCase48 = (0, _.useUseCase)(mathUseCase),
2080
- subtraction = _useUseCase48.subtraction;
1272
+ var _useUseCase44 = (0, _.useUseCase)(mathUseCase),
1273
+ subtraction = _useUseCase44.subtraction;
2081
1274
  var update = (0, _ahooks.useUpdate)();
2082
1275
  var onClick = function onClick() {
2083
1276
  update();
@@ -2100,8 +1293,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2100
1293
  (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
2101
1294
  var buttonText = 'button';
2102
1295
  var CacheTestComponent = function CacheTestComponent() {
2103
- var _useUseCase49 = (0, _.useUseCase)(mathUseCase),
2104
- subtraction = _useUseCase49.subtraction;
1296
+ var _useUseCase45 = (0, _.useUseCase)(mathUseCase),
1297
+ subtraction = _useUseCase45.subtraction;
2105
1298
  var onClick = function onClick() {
2106
1299
  subtraction(5, 3);
2107
1300
  };
@@ -2129,8 +1322,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2129
1322
  var count = 0;
2130
1323
  var buttonText = 'button';
2131
1324
  var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
2132
- var _useUseCase50 = (0, _.useUseCase)(mathUseCase),
2133
- subtraction = _useUseCase50.subtraction;
1325
+ var _useUseCase46 = (0, _.useUseCase)(mathUseCase),
1326
+ subtraction = _useUseCase46.subtraction;
2134
1327
  var update = (0, _ahooks.useUpdate)();
2135
1328
  subtraction(5, count++);
2136
1329
  var onUpdate = function onUpdate() {
@@ -2152,12 +1345,12 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2152
1345
  (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(4);
2153
1346
  });
2154
1347
  (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
2155
- var _renderHook34 = (0, _react.renderHook)(function () {
1348
+ var _renderHook27 = (0, _react.renderHook)(function () {
2156
1349
  return (0, _.useUseCase)(mathUseCase, {
2157
1350
  extraValue: 5
2158
1351
  });
2159
1352
  }),
2160
- result = _renderHook34.result;
1353
+ result = _renderHook27.result;
2161
1354
  var reducers = result.current;
2162
1355
  var add = reducers.add;
2163
1356
  (0, _globals.expect)(add(1, 2)).toBe(8);
@@ -2165,7 +1358,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2165
1358
  (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
2166
1359
  var onUpdate = _globals.jest.fn();
2167
1360
  var onDeepUpdate = _globals.jest.fn();
2168
- var _renderHook35 = (0, _react.renderHook)(function () {
1361
+ var _renderHook28 = (0, _react.renderHook)(function () {
2169
1362
  var _useState9 = (0, _react2.useState)(0),
2170
1363
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
2171
1364
  extraValue = _useState10[0],
@@ -2181,7 +1374,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2181
1374
  }, [reducers]);
2182
1375
  return setExtraValue;
2183
1376
  }),
2184
- result = _renderHook35.result;
1377
+ result = _renderHook28.result;
2185
1378
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2186
1379
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2187
1380
  (0, _react.act)(function () {
@@ -2193,7 +1386,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2193
1386
  (0, _globals.test)('when `deps` change, it should update reducers', function () {
2194
1387
  var onUpdate = _globals.jest.fn();
2195
1388
  var onDeepUpdate = _globals.jest.fn();
2196
- var _renderHook36 = (0, _react.renderHook)(function () {
1389
+ var _renderHook29 = (0, _react.renderHook)(function () {
2197
1390
  var _useState11 = (0, _react2.useState)(0),
2198
1391
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
2199
1392
  extraValue = _useState12[0],
@@ -2209,7 +1402,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2209
1402
  }, [reducers]);
2210
1403
  return setExtraValue;
2211
1404
  }),
2212
- result = _renderHook36.result;
1405
+ result = _renderHook29.result;
2213
1406
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2214
1407
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2215
1408
  (0, _react.act)(function () {
@@ -2221,7 +1414,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2221
1414
  (0, _globals.test)('empty `deps` should not update reducers', function () {
2222
1415
  var onUpdate = _globals.jest.fn();
2223
1416
  var onDeepUpdate = _globals.jest.fn();
2224
- var _renderHook37 = (0, _react.renderHook)(function () {
1417
+ var _renderHook30 = (0, _react.renderHook)(function () {
2225
1418
  var _useState13 = (0, _react2.useState)(0),
2226
1419
  _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
2227
1420
  extraValue = _useState14[0],
@@ -2237,7 +1430,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2237
1430
  }, [reducers]);
2238
1431
  return setExtraValue;
2239
1432
  }),
2240
- result = _renderHook37.result;
1433
+ result = _renderHook30.result;
2241
1434
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2242
1435
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2243
1436
  (0, _react.act)(function () {