@mic-rexjs/usecases-react 2.0.2 → 2.1.1

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 (102) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/components/UseCaseFragment/index.d.ts +2 -2
  3. package/es/components/UseCaseFragment/types.d.ts +3 -3
  4. package/es/configs/defaultUseCaseContext/index.d.ts +2 -3
  5. package/es/configs/defaultUseCaseContext/types.d.ts +10 -12
  6. package/es/configs/useCaseContextReferenceMap/types.d.ts +5 -5
  7. package/es/enums/UseCaseArgumentTypes/index.d.ts +5 -0
  8. package/es/enums/UseCaseArgumentTypes/index.js +6 -0
  9. package/es/enums/UseCaseModeErrors/index.d.ts +4 -0
  10. package/es/enums/UseCaseModeErrors/index.js +5 -0
  11. package/es/enums/UseCaseStatuses/index.d.ts +10 -0
  12. package/es/enums/UseCaseStatuses/index.js +18 -0
  13. package/es/hooks/useArgumentTypes/index.d.ts +3 -0
  14. package/es/hooks/useArgumentTypes/index.js +19 -0
  15. package/es/hooks/useContextualItem/index.d.ts +3 -0
  16. package/es/hooks/useContextualItem/index.js +13 -0
  17. package/es/hooks/useContextualItem/types.d.ts +3 -0
  18. package/es/hooks/useEntity/index.d.ts +4 -0
  19. package/es/hooks/useEntity/index.js +49 -0
  20. package/es/hooks/useGlobalUseCase/index.js +2 -8
  21. package/es/hooks/useGlobalUseCase/index.test.js +6 -56
  22. package/es/hooks/useGlobalUseCase/types.d.ts +4 -11
  23. package/es/hooks/useMemoizedCall/index.d.ts +2 -0
  24. package/es/hooks/useMemoizedCall/index.js +15 -0
  25. package/es/hooks/useProvider/index.d.ts +4 -4
  26. package/es/hooks/useProvider/index.js +16 -17
  27. package/es/hooks/useSafeMode/index.d.ts +3 -0
  28. package/es/hooks/useSafeMode/index.js +18 -0
  29. package/es/hooks/useStatelessUseCase/index.js +2 -5
  30. package/es/hooks/useStatelessUseCase/index.test.js +4 -42
  31. package/es/hooks/useStatelessUseCase/types.d.ts +2 -4
  32. package/es/hooks/useUseCase/index.js +45 -75
  33. package/es/hooks/useUseCase/index.test.js +74 -20
  34. package/es/hooks/useUseCase/types.d.ts +40 -45
  35. package/es/hooks/useUseCaseContext/index.d.ts +5 -3
  36. package/es/hooks/useUseCaseContext/index.js +10 -3
  37. package/es/hooks/useUseCaseContext/index.test.js +39 -12
  38. package/es/hooks/useUseCaseStatuses/index.d.ts +6 -0
  39. package/es/hooks/useUseCaseStatuses/index.js +29 -0
  40. package/es/index.d.ts +1 -1
  41. package/es/methods/cacheCall/index.d.ts +2 -0
  42. package/es/methods/cacheCall/index.js +26 -0
  43. package/es/methods/cacheCall/types.d.ts +13 -0
  44. package/es/methods/cacheCalls/index.d.ts +2 -0
  45. package/es/methods/cacheCalls/index.js +8 -0
  46. package/es/methods/fillArguments/index.d.ts +5 -0
  47. package/es/methods/fillArguments/index.js +41 -0
  48. package/es/methods/fillArguments/types.d.ts +10 -0
  49. package/es/methods/fillArguments/types.js +1 -0
  50. package/es/methods/getRenderingEntity/index.d.ts +3 -0
  51. package/es/methods/getRenderingEntity/index.js +13 -0
  52. package/es/methods/initEntityReducers/index.d.ts +2 -3
  53. package/es/methods/initEntityReducers/index.js +2 -3
  54. package/es/methods/triggerCallbacks/index.d.ts +1 -1
  55. package/es/methods/triggerCallbacks/index.js +3 -3
  56. package/lib/enums/UseCaseArgumentTypes/index.js +13 -0
  57. package/lib/enums/UseCaseModeErrors/index.js +12 -0
  58. package/lib/enums/UseCaseStatuses/index.js +25 -0
  59. package/lib/hooks/useArgumentTypes/index.js +31 -0
  60. package/lib/hooks/useContextualItem/index.js +21 -0
  61. package/lib/hooks/useEntity/index.js +63 -0
  62. package/lib/hooks/useGlobalUseCase/index.js +2 -15
  63. package/lib/hooks/useGlobalUseCase/index.test.js +5 -57
  64. package/lib/hooks/useMemoizedCall/index.js +22 -0
  65. package/lib/hooks/useProvider/index.js +18 -17
  66. package/lib/hooks/useSafeMode/index.js +25 -0
  67. package/lib/hooks/useStatelessUseCase/index.js +2 -12
  68. package/lib/hooks/useStatelessUseCase/index.test.js +2 -43
  69. package/lib/hooks/useUseCase/index.js +55 -83
  70. package/lib/hooks/useUseCase/index.test.js +104 -57
  71. package/lib/hooks/useUseCaseContext/index.js +12 -3
  72. package/lib/hooks/useUseCaseContext/index.test.js +45 -19
  73. package/lib/hooks/useUseCaseStatuses/index.js +36 -0
  74. package/lib/methods/cacheCall/index.js +42 -0
  75. package/lib/methods/cacheCalls/index.js +20 -0
  76. package/lib/methods/fillArguments/index.js +31 -0
  77. package/lib/methods/fillArguments/types.js +5 -0
  78. package/lib/methods/getRenderingEntity/index.js +20 -0
  79. package/lib/methods/initEntityReducers/index.js +2 -3
  80. package/lib/methods/triggerCallbacks/index.js +3 -3
  81. package/package.json +3 -3
  82. package/es/hooks/useChangeCallbackCollection/index.d.ts +0 -3
  83. package/es/hooks/useChangeCallbackCollection/index.js +0 -29
  84. package/es/methods/cacheReducerCalls/index.d.ts +0 -3
  85. package/es/methods/cacheReducerCalls/index.js +0 -26
  86. package/es/methods/cacheReducerCalls/types.d.ts +0 -11
  87. package/es/methods/getRootEntity/index.d.ts +0 -3
  88. package/es/methods/getRootEntity/index.js +0 -10
  89. package/es/methods/initEntityReducers/types.d.ts +0 -3
  90. package/es/methods/removeItem/index.d.ts +0 -1
  91. package/es/methods/removeItem/index.js +0 -7
  92. package/es/methods/toMaxArguments/index.d.ts +0 -3
  93. package/es/methods/toMaxArguments/index.js +0 -28
  94. package/lib/hooks/useChangeCallbackCollection/index.js +0 -37
  95. package/lib/methods/cacheReducerCalls/index.js +0 -45
  96. package/lib/methods/getRootEntity/index.js +0 -17
  97. package/lib/methods/removeItem/index.js +0 -14
  98. package/lib/methods/toMaxArguments/index.js +0 -25
  99. /package/es/{methods/cacheReducerCalls → hooks/useContextualItem}/types.js +0 -0
  100. /package/es/methods/{initEntityReducers → cacheCall}/types.js +0 -0
  101. /package/lib/{methods/cacheReducerCalls → hooks/useContextualItem}/types.js +0 -0
  102. /package/lib/methods/{initEntityReducers → cacheCall}/types.js +0 -0
@@ -8,103 +8,75 @@ exports.useUseCase = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _ahooks = require("ahooks");
10
10
  var _react = require("react");
11
- var _useConstant = require("../useConstant");
12
11
  var _useConstantFn = require("../useConstantFn");
13
12
  var _useProvider = require("../useProvider");
14
- var _useCompareDeps = require("../useCompareDeps");
15
13
  var _initEntityReducers = require("../../methods/initEntityReducers");
16
- var _triggerCallbacks = require("../../methods/triggerCallbacks");
17
- var _getRootEntity = require("../../methods/getRootEntity");
18
14
  var _useUseCaseContext = require("../useUseCaseContext");
19
- var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
20
15
  var _useIsRenderingRef = require("../useIsRenderingRef");
21
- var _cacheReducerCalls = require("../../methods/cacheReducerCalls");
22
- var _UseCaseModes = require("../../enums/UseCaseModes");
23
- var _toMaxArguments3 = require("../../methods/toMaxArguments");
24
- var _useChangeCallbackCollection = require("../useChangeCallbackCollection");
16
+ var _fillArguments = require("../../methods/fillArguments");
17
+ var _useArgumentTypes = require("../useArgumentTypes");
18
+ var _useUseCaseStatuses = require("../useUseCaseStatuses");
19
+ var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
20
+ var _useEntity3 = require("../useEntity");
21
+ var _useContextualItem = require("../useContextualItem");
22
+ var _cacheCalls = require("../../methods/cacheCalls");
23
+ var _useSafeMode = require("../useSafeMode");
25
24
  var useUseCase = function useUseCase() {
26
25
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
27
26
  args[_key] = arguments[_key];
28
27
  }
29
- var _toMaxArguments = (0, _toMaxArguments3.toMaxArguments)(args),
30
- _toMaxArguments2 = (0, _slicedToArray2["default"])(_toMaxArguments, 5),
31
- unsafeEntity = _toMaxArguments2[0],
32
- unsafeUsecase = _toMaxArguments2[1],
33
- unsafeMode = _toMaxArguments2[2],
34
- options = _toMaxArguments2[3],
35
- deps = _toMaxArguments2[4];
36
- var _useState = (0, _react.useState)(unsafeEntity),
37
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
38
- entityState = _useState2[0],
39
- setEntityState = _useState2[1];
40
- var usecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
41
- var entityUseCase = usecase;
42
- var mode = (0, _useConstant.useConstant)(unsafeMode);
43
- var depsKey = (0, _useCompareDeps.useCompareDeps)(deps);
28
+ var argumentTypes = (0, _useArgumentTypes.useArgumentTypes)(args);
29
+ var fullArguments = (0, _fillArguments.fillArguments)(args, argumentTypes);
30
+ var _fullArguments = (0, _slicedToArray2["default"])(fullArguments, 5),
31
+ unsafeEntity = _fullArguments[0],
32
+ unsafeUsecase = _fullArguments[1],
33
+ unsafeMode = _fullArguments[2],
34
+ options = _fullArguments[3],
35
+ deps = _fullArguments[4];
36
+ var unkownUsecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
37
+ var usecase = unkownUsecase;
38
+ var entityUseCase = unkownUsecase;
44
39
  var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
45
- var isContextRoot = (0, _useConstant.useConstant)(typeof args[1] === 'function');
46
- var defaultContext = _defaultUseCaseContext.defaultUseCaseContext;
47
- var context = (0, _useUseCaseContext.useUseCaseContext)(entityUseCase, isContextRoot ? null : defaultContext);
48
- var getContextValue = (0, _react.useContext)(context);
49
- var hasContextValueGetter = getContextValue !== null;
50
- var _ref = (getContextValue === null || getContextValue === void 0 ? void 0 : getContextValue()) || {},
51
- contextEntity = _ref.entity,
40
+ var mode = (0, _useSafeMode.useSafeMode)(unsafeMode, argumentTypes);
41
+ var context = (0, _useUseCaseContext.useUseCaseContext)(unkownUsecase, argumentTypes, mode);
42
+ var contextValue = (0, _react.useContext)(context);
43
+ var entityContextValue = contextValue;
44
+ var statuses = (0, _useUseCaseStatuses.useUseCaseStatuses)(argumentTypes, mode, contextValue);
45
+ var _ref = contextValue || {},
52
46
  _ref$reducers = _ref.reducers,
53
- contextEntityReducers = _ref$reducers === void 0 ? null : _ref$reducers,
54
- _ref$changeCallbackCo = _ref.changeCallbackCollection,
55
- contextChangeCallbackCollection = _ref$changeCallbackCo === void 0 ? null : _ref$changeCallbackCo;
56
- // 是否需要初始化根 `redurcers`
57
- var isRoot = isContextRoot || !hasContextValueGetter;
58
- // 是否为上下文模式
59
- var isContextMode = isContextRoot || hasContextValueGetter;
60
- var changeCallbackCollection = (0, _useChangeCallbackCollection.useChangeCallbackCollection)(isRoot, contextChangeCallbackCollection, options);
61
- var entity = (0, _ahooks.useCreation)(function () {
62
- if (!isContextRoot) {
63
- return contextEntity;
47
+ contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
48
+ var _ref2 = entityContextValue || {},
49
+ _ref2$store = _ref2.store,
50
+ contextStore = _ref2$store === void 0 ? null : _ref2$store;
51
+ var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options),
52
+ _useEntity2 = (0, _slicedToArray2["default"])(_useEntity, 2),
53
+ entity = _useEntity2[0],
54
+ store = _useEntity2[1];
55
+ var reducers = (0, _useContextualItem.useContextualItem)(statuses, contextReducers, function () {
56
+ if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
57
+ return usecase(options);
64
58
  }
65
- return (0, _getRootEntity.getRootEntity)(entityState, unsafeEntity, mode);
66
- }, [isContextRoot, contextEntity, mode, entityState, unsafeEntity]);
67
- var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
68
- if ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
69
- setEntityState(newEntity);
70
- }
71
- (0, _triggerCallbacks.triggerCallbacks)(changeCallbackCollection, newEntity, oldEntity);
72
- });
73
- var createRootEntityReducers = (0, _ahooks.useMemoizedFn)(function () {
74
- var initOptions = options;
75
- return (0, _initEntityReducers.initEntityReducers)(entity, entityUseCase, initOptions, onEntityChange);
76
- });
77
- var createReducers = (0, _ahooks.useMemoizedFn)(function () {
78
- return usecase(options);
79
- });
80
- var rootEntityReducers = (0, _ahooks.useCreation)(function () {
81
- void depsKey;
82
- if (!isContextRoot) {
83
- return null;
59
+ var hookOptions = options;
60
+ return (0, _initEntityReducers.initEntityReducers)(entityUseCase, store, hookOptions);
61
+ }, deps);
62
+ var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
63
+ return (0, _ahooks.useCreation)(function () {
64
+ if ((statuses & _UseCaseStatuses.UseCaseStatuses.ContextEnabled) !== _UseCaseStatuses.UseCaseStatuses.ContextEnabled) {
65
+ return reducers;
84
66
  }
85
- return createRootEntityReducers();
86
- }, [isContextRoot, depsKey, createRootEntityReducers]);
87
- var entityReducers = (0, _ahooks.useCreation)(function () {
88
- return rootEntityReducers || contextEntityReducers || {};
89
- }, [rootEntityReducers, contextEntityReducers]);
90
- var reducers = (0, _ahooks.useCreation)(function () {
91
- void depsKey;
92
- if (isContextMode) {
93
- return {};
67
+ var rootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.RootEnabled) === _UseCaseStatuses.UseCaseStatuses.RootEnabled;
68
+ if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
69
+ return rootEnabled ? [reducers, Provider] : reducers;
94
70
  }
95
- return createReducers();
96
- }, [isContextMode, depsKey, createReducers]);
97
- var Provider = (0, _useProvider.useProvider)(context, mode, entity, entityReducers, changeCallbackCollection);
98
- var createCoreCollection = (0, _ahooks.useMemoizedFn)(function (coreEntity, coreReducers) {
99
- return [coreEntity, (0, _cacheReducerCalls.cacheReducerCalls)(coreReducers, function () {
100
- return isRenderingRef.current;
101
- }), isContextRoot ? Provider : null];
102
- });
103
- return (0, _ahooks.useCreation)(function () {
104
- if (isContextMode) {
105
- return createCoreCollection(entity, entityReducers);
71
+ var cachedReducers = (0, _cacheCalls.cacheCalls)(reducers, {
72
+ onShouldCache: function onShouldCache() {
73
+ return isRenderingRef.current;
74
+ }
75
+ });
76
+ if (rootEnabled) {
77
+ return [entity, cachedReducers, Provider];
106
78
  }
107
- return reducers;
108
- }, [isContextMode, entity, entityReducers, reducers, createCoreCollection]);
79
+ return [entity, cachedReducers];
80
+ }, [statuses, entity, reducers, Provider, isRenderingRef]);
109
81
  };
110
82
  exports.useUseCase = useUseCase;
@@ -17,6 +17,7 @@ var _ = require(".");
17
17
  var _ahooks = require("ahooks");
18
18
  var _react2 = require("react");
19
19
  var _UseCaseModes = require("../../enums/UseCaseModes");
20
+ var _UseCaseModeErrors = require("../../enums/UseCaseModeErrors");
20
21
  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; }
21
22
  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; }
22
23
  function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
@@ -173,7 +174,8 @@ var Child = function Child(_ref2) {
173
174
  };
174
175
  var Parent = function Parent(_ref4) {
175
176
  var children = _ref4.children,
176
- mode = _ref4.mode,
177
+ _ref4$mode = _ref4.mode,
178
+ mode = _ref4$mode === void 0 ? _UseCaseModes.UseCaseModes.Normal : _ref4$mode,
177
179
  onUpdate = _ref4.onUpdate,
178
180
  onSetPath = _ref4.onSetPath;
179
181
  var _useUseCase3 = (0, _.useUseCase)(defaultFile, fileUseCase, mode),
@@ -243,10 +245,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
243
245
  subtractionReducer.mockClear();
244
246
  });
245
247
  (0, _globals.describe)('useUseCase', function () {
246
- _globals.describe.each([void 0, _UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Global])('[mode=%s]: `useUseCase` should work the same as `useRootCoreCollection`', function (mode) {
248
+ (0, _globals.describe)('`useUseCase` should work the same as `useRootCoreCollection`', function () {
247
249
  (0, _globals.test)('check `context.length`', function () {
248
250
  var _renderHook = (0, _react.renderHook)(function () {
249
- return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
251
+ return (0, _.useUseCase)(defaultFile, fileUseCase);
250
252
  }),
251
253
  result = _renderHook.result;
252
254
  var cores = result.current;
@@ -254,7 +256,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
254
256
  });
255
257
  (0, _globals.test)('`entity` should equal `defaultFile`', function () {
256
258
  var _renderHook2 = (0, _react.renderHook)(function () {
257
- return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
259
+ return (0, _.useUseCase)(defaultFile, fileUseCase);
258
260
  }),
259
261
  result = _renderHook2.result;
260
262
  var cores = result.current;
@@ -582,6 +584,26 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
582
584
  _react.fireEvent.click(_react.screen.getByText(updateButtonText));
583
585
  (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
584
586
  });
587
+ _globals.test.each([{
588
+ mode: _UseCaseModes.UseCaseModes.Normal,
589
+ toThrow: ''
590
+ }, {
591
+ mode: _UseCaseModes.UseCaseModes.Global,
592
+ toThrow: _UseCaseModeErrors.UseCaseModeErrors.UnsupportedGlobal
593
+ }, {
594
+ mode: _UseCaseModes.UseCaseModes.Stateless,
595
+ toThrow: ''
596
+ }])('does not support global mode', function (_ref7) {
597
+ var mode = _ref7.mode,
598
+ toThrow = _ref7.toThrow;
599
+ (0, _globals.expect)(function () {
600
+ (0, _react.renderHook)(function () {
601
+ (0, _.useUseCase)(defaultFile, fileUseCase, mode);
602
+ });
603
+ // 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
604
+ throw '';
605
+ }).toThrow(toThrow);
606
+ });
585
607
  (0, _globals.test)('stateless mode should not generate new reducers when `yeild entity`', function () {
586
608
  var onUpdate = _globals.jest.fn();
587
609
  var _renderHook12 = (0, _react.renderHook)(function () {
@@ -921,8 +943,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
921
943
  var onChangeB = _globals.jest.fn(updateChangeTimes);
922
944
  var onChangeC = _globals.jest.fn(updateChangeTimes);
923
945
  var buttonText = 'my button';
924
- var A = function A(_ref7) {
925
- var children = _ref7.children;
946
+ var A = function A(_ref8) {
947
+ var children = _ref8.children;
926
948
  (0, _.useUseCase)(fileUseCase, {
927
949
  watch: {
928
950
  ext: onChangeA
@@ -1570,31 +1592,6 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1570
1592
  (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(0);
1571
1593
  (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1572
1594
  });
1573
- (0, _globals.test)('global mode should trigger Parent to update, but Child shoud not be updated', function () {
1574
- var onParentUpdate = _globals.jest.fn();
1575
- var onChildUpdate = _globals.jest.fn();
1576
- var onSetPath = _globals.jest.fn(function () {
1577
- return PATH_1;
1578
- });
1579
- (0, _react.render)((0, _jsxRuntime.jsx)("div", {
1580
- children: (0, _jsxRuntime.jsx)(Parent, {
1581
- mode: _UseCaseModes.UseCaseModes.Global,
1582
- onSetPath: onSetPath,
1583
- onUpdate: onParentUpdate,
1584
- children: (0, _jsxRuntime.jsx)(Child, {
1585
- onUpdate: onChildUpdate
1586
- })
1587
- })
1588
- }));
1589
- _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1590
- (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1591
- (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(1);
1592
- (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1593
- _react.fireEvent.click(_react.screen.getByText(CHILD_BUTTON_TEXT));
1594
- (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1595
- (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(2);
1596
- (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1597
- });
1598
1595
  (0, _globals.test)('`usecase` should not be called at child component', function () {
1599
1596
  var mockUseCase = _globals.jest.fn(fileUseCase);
1600
1597
  var A = function A() {
@@ -1821,8 +1818,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1821
1818
  var onChangeB = _globals.jest.fn(updateChangeTimes);
1822
1819
  var onChangeC = _globals.jest.fn(updateChangeTimes);
1823
1820
  var buttonText = 'my button';
1824
- var A = function A(_ref8) {
1825
- var children = _ref8.children;
1821
+ var A = function A(_ref9) {
1822
+ var children = _ref9.children;
1826
1823
  (0, _.useUseCase)(fileUseCase, {
1827
1824
  onChange: onChangeA
1828
1825
  });
@@ -1863,40 +1860,90 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1863
1860
  (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
1864
1861
  });
1865
1862
  });
1863
+ (0, _globals.describe)('`useUseCase` should work the same as `usePseudoCoreCollection`', function () {
1864
+ (0, _globals.test)('the return value should be `PseudoCoreCollection`', function () {
1865
+ var _renderHook25 = (0, _react.renderHook)(function () {
1866
+ return (0, _.useUseCase)(mathUseCase, _UseCaseModes.UseCaseModes.Global);
1867
+ }),
1868
+ result = _renderHook25.result;
1869
+ var current = result.current;
1870
+ (0, _globals.expect)(current).toEqual([_globals.expect.any(Object), _globals.expect.any(Function)]);
1871
+ });
1872
+ _globals.test.each([{
1873
+ mode: _UseCaseModes.UseCaseModes.Normal,
1874
+ toThrow: ''
1875
+ }, {
1876
+ mode: _UseCaseModes.UseCaseModes.Global,
1877
+ toThrow: ''
1878
+ }, {
1879
+ mode: _UseCaseModes.UseCaseModes.Stateless,
1880
+ toThrow: _UseCaseModeErrors.UseCaseModeErrors.UnsupportedStateless
1881
+ }])('does not support stateless mode', function (_ref10) {
1882
+ var mode = _ref10.mode,
1883
+ toThrow = _ref10.toThrow;
1884
+ (0, _globals.expect)(function () {
1885
+ (0, _react.renderHook)(function () {
1886
+ (0, _.useUseCase)(mathUseCase, mode);
1887
+ });
1888
+ // 如果上面测试成功,则手动 throw '',保证与 toThrow 的值一致
1889
+ throw '';
1890
+ }).toThrow(toThrow);
1891
+ });
1892
+ (0, _globals.test)('the return value should be `reducers` object at child component', function () {
1893
+ var onMountA = _globals.jest.fn();
1894
+ var A = function A() {
1895
+ var reducers = (0, _.useUseCase)(mathUseCase);
1896
+ (0, _ahooks.useMount)(function () {
1897
+ onMountA(reducers);
1898
+ });
1899
+ return null;
1900
+ };
1901
+ var B = function B() {
1902
+ var _useUseCase46 = (0, _.useUseCase)(mathUseCase, _UseCaseModes.UseCaseModes.Global),
1903
+ _useUseCase47 = (0, _slicedToArray2["default"])(_useUseCase46, 2),
1904
+ Provider = _useUseCase47[1];
1905
+ return (0, _jsxRuntime.jsx)(Provider, {
1906
+ children: (0, _jsxRuntime.jsx)(A, {})
1907
+ });
1908
+ };
1909
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1910
+ (0, _globals.expect)(onMountA).toHaveBeenCalledWith(_globals.expect.any(Object));
1911
+ });
1912
+ });
1866
1913
  (0, _globals.describe)('`useUseCase` should work the same as `useReducers`', function () {
1867
1914
  (0, _globals.test)('`entity` should equal `defaultFile`', function () {
1868
- var _renderHook25 = (0, _react.renderHook)(function () {
1915
+ var _renderHook26 = (0, _react.renderHook)(function () {
1869
1916
  return (0, _.useUseCase)(mathUseCase);
1870
1917
  }),
1871
- result = _renderHook25.result;
1918
+ result = _renderHook26.result;
1872
1919
  var reducers = result.current;
1873
1920
  (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
1874
1921
  });
1875
1922
  (0, _globals.test)('returned reducer should work', function () {
1876
- var _renderHook26 = (0, _react.renderHook)(function () {
1923
+ var _renderHook27 = (0, _react.renderHook)(function () {
1877
1924
  return (0, _.useUseCase)(mathUseCase);
1878
1925
  }),
1879
- result = _renderHook26.result;
1926
+ result = _renderHook27.result;
1880
1927
  var reducers = result.current;
1881
1928
  var add = reducers.add;
1882
1929
  (0, _globals.expect)(add(1, 2)).toBe(3);
1883
1930
  });
1884
1931
  (0, _globals.test)('`usecase` should be called only once if deps has not provided', function () {
1885
1932
  var mockUseCase = _globals.jest.fn(mathUseCase);
1886
- var _renderHook27 = (0, _react.renderHook)(function () {
1933
+ var _renderHook28 = (0, _react.renderHook)(function () {
1887
1934
  return (0, _.useUseCase)(mockUseCase);
1888
1935
  }),
1889
- rerender = _renderHook27.rerender;
1936
+ rerender = _renderHook28.rerender;
1890
1937
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1891
1938
  rerender();
1892
1939
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1893
1940
  });
1894
1941
  (0, _globals.test)('`usecase` should be called only once if deps has not changed', function () {
1895
1942
  var mockUseCase = _globals.jest.fn(mathUseCase);
1896
- var _renderHook28 = (0, _react.renderHook)(function () {
1943
+ var _renderHook29 = (0, _react.renderHook)(function () {
1897
1944
  return (0, _.useUseCase)(mockUseCase, {}, [1, 'x']);
1898
1945
  }),
1899
- rerender = _renderHook28.rerender;
1946
+ rerender = _renderHook29.rerender;
1900
1947
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1901
1948
  rerender();
1902
1949
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
@@ -1904,10 +1951,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1904
1951
  (0, _globals.test)('`usecase` should be called if deps has changed', function () {
1905
1952
  var i = 0;
1906
1953
  var mockUseCase = _globals.jest.fn(mathUseCase);
1907
- var _renderHook29 = (0, _react.renderHook)(function () {
1954
+ var _renderHook30 = (0, _react.renderHook)(function () {
1908
1955
  return (0, _.useUseCase)(mockUseCase, {}, [i++, 'x']);
1909
1956
  }),
1910
- rerender = _renderHook29.rerender;
1957
+ rerender = _renderHook30.rerender;
1911
1958
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1912
1959
  rerender();
1913
1960
  (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(2);
@@ -1915,8 +1962,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1915
1962
  (0, _globals.test)('reducer call should not be cached if component is at rendering phase', function () {
1916
1963
  var buttonText = 'button';
1917
1964
  var CacheTestComponent = function CacheTestComponent() {
1918
- var _useUseCase46 = (0, _.useUseCase)(mathUseCase),
1919
- subtraction = _useUseCase46.subtraction;
1965
+ var _useUseCase48 = (0, _.useUseCase)(mathUseCase),
1966
+ subtraction = _useUseCase48.subtraction;
1920
1967
  var update = (0, _ahooks.useUpdate)();
1921
1968
  var onClick = function onClick() {
1922
1969
  update();
@@ -1939,8 +1986,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1939
1986
  (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
1940
1987
  var buttonText = 'button';
1941
1988
  var CacheTestComponent = function CacheTestComponent() {
1942
- var _useUseCase47 = (0, _.useUseCase)(mathUseCase),
1943
- subtraction = _useUseCase47.subtraction;
1989
+ var _useUseCase49 = (0, _.useUseCase)(mathUseCase),
1990
+ subtraction = _useUseCase49.subtraction;
1944
1991
  var onClick = function onClick() {
1945
1992
  subtraction(5, 3);
1946
1993
  };
@@ -1968,8 +2015,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1968
2015
  var count = 0;
1969
2016
  var buttonText = 'button';
1970
2017
  var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
1971
- var _useUseCase48 = (0, _.useUseCase)(mathUseCase),
1972
- subtraction = _useUseCase48.subtraction;
2018
+ var _useUseCase50 = (0, _.useUseCase)(mathUseCase),
2019
+ subtraction = _useUseCase50.subtraction;
1973
2020
  var update = (0, _ahooks.useUpdate)();
1974
2021
  subtraction(5, count++);
1975
2022
  var onUpdate = function onUpdate() {
@@ -1991,12 +2038,12 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1991
2038
  (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(4);
1992
2039
  });
1993
2040
  (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
1994
- var _renderHook30 = (0, _react.renderHook)(function () {
2041
+ var _renderHook31 = (0, _react.renderHook)(function () {
1995
2042
  return (0, _.useUseCase)(mathUseCase, {
1996
2043
  extraValue: 5
1997
2044
  });
1998
2045
  }),
1999
- result = _renderHook30.result;
2046
+ result = _renderHook31.result;
2000
2047
  var reducers = result.current;
2001
2048
  var add = reducers.add;
2002
2049
  (0, _globals.expect)(add(1, 2)).toBe(8);
@@ -2004,7 +2051,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2004
2051
  (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
2005
2052
  var onUpdate = _globals.jest.fn();
2006
2053
  var onDeepUpdate = _globals.jest.fn();
2007
- var _renderHook31 = (0, _react.renderHook)(function () {
2054
+ var _renderHook32 = (0, _react.renderHook)(function () {
2008
2055
  var _useState7 = (0, _react2.useState)(0),
2009
2056
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
2010
2057
  extraValue = _useState8[0],
@@ -2020,7 +2067,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2020
2067
  }, [reducers]);
2021
2068
  return setExtraValue;
2022
2069
  }),
2023
- result = _renderHook31.result;
2070
+ result = _renderHook32.result;
2024
2071
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2025
2072
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2026
2073
  (0, _react.act)(function () {
@@ -2032,7 +2079,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2032
2079
  (0, _globals.test)('when `deps` change, it should update reducers', function () {
2033
2080
  var onUpdate = _globals.jest.fn();
2034
2081
  var onDeepUpdate = _globals.jest.fn();
2035
- var _renderHook32 = (0, _react.renderHook)(function () {
2082
+ var _renderHook33 = (0, _react.renderHook)(function () {
2036
2083
  var _useState9 = (0, _react2.useState)(0),
2037
2084
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
2038
2085
  extraValue = _useState10[0],
@@ -2048,7 +2095,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2048
2095
  }, [reducers]);
2049
2096
  return setExtraValue;
2050
2097
  }),
2051
- result = _renderHook32.result;
2098
+ result = _renderHook33.result;
2052
2099
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2053
2100
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2054
2101
  (0, _react.act)(function () {
@@ -2060,7 +2107,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2060
2107
  (0, _globals.test)('empty `deps` should not update reducers', function () {
2061
2108
  var onUpdate = _globals.jest.fn();
2062
2109
  var onDeepUpdate = _globals.jest.fn();
2063
- var _renderHook33 = (0, _react.renderHook)(function () {
2110
+ var _renderHook34 = (0, _react.renderHook)(function () {
2064
2111
  var _useState11 = (0, _react2.useState)(0),
2065
2112
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
2066
2113
  extraValue = _useState12[0],
@@ -2076,7 +2123,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2076
2123
  }, [reducers]);
2077
2124
  return setExtraValue;
2078
2125
  }),
2079
- result = _renderHook33.result;
2126
+ result = _renderHook34.result;
2080
2127
  (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2081
2128
  (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2082
2129
  (0, _react.act)(function () {
@@ -8,7 +8,12 @@ var _useConstant = require("../useConstant");
8
8
  var _useCaseContextReferenceMap = require("../../configs/useCaseContextReferenceMap");
9
9
  var _react = require("react");
10
10
  var _ahooks = require("ahooks");
11
- var useUseCaseContext = function useUseCaseContext(usecase, defaultContext) {
11
+ var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
12
+ var _UseCaseModes = require("../../enums/UseCaseModes");
13
+ var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
14
+ var useUseCaseContext = function useUseCaseContext(usecase) {
15
+ var argumentTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _UseCaseArgumentTypes.UseCaseArgumentTypes.None;
16
+ var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _UseCaseModes.UseCaseModes.Normal;
12
17
  var map = _useCaseContextReferenceMap.usecaseContextReferenceMap;
13
18
  var context = (0, _useConstant.useConstant)(function () {
14
19
  if (map.has(usecase)) {
@@ -21,8 +26,12 @@ var useUseCaseContext = function useUseCaseContext(usecase, defaultContext) {
21
26
  });
22
27
  return value;
23
28
  }
24
- if (defaultContext) {
25
- return defaultContext;
29
+ switch (true) {
30
+ case (mode & _UseCaseModes.UseCaseModes.Global) === _UseCaseModes.UseCaseModes.Global:
31
+ case (argumentTypes & _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) === _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity:
32
+ break;
33
+ default:
34
+ return _defaultUseCaseContext.defaultUseCaseContext;
26
35
  }
27
36
  var ctx = (0, _react.createContext)(null);
28
37
  map.set(usecase, {
@@ -5,51 +5,77 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
5
5
  var _globals = require("@jest/globals");
6
6
  var _react = require("@testing-library/react");
7
7
  var _ = require(".");
8
- var _usecases = require("@mic-rexjs/usecases");
9
8
  var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
10
9
  var _useCaseContextReferenceMap = require("../../configs/useCaseContextReferenceMap");
10
+ var _UseCaseModes = require("../../enums/UseCaseModes");
11
+ var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
11
12
  var testUseCase = function testUseCase() {
12
- return (0, _usecases.objectUseCase)();
13
+ return {};
13
14
  };
14
15
  (0, _globals.describe)('useUseCaseContext', function () {
15
- (0, _globals.test)('should return the default context if map has not save a usecase and provide a default context', function () {
16
- var defaultContext = _defaultUseCaseContext.defaultUseCaseContext;
16
+ (0, _globals.test)('should return the default context if map has not saved a usecase with default args', function () {
17
17
  var _renderHook = (0, _react.renderHook)(function () {
18
- return (0, _.useUseCaseContext)(testUseCase, defaultContext);
18
+ return (0, _.useUseCaseContext)(testUseCase);
19
19
  }),
20
20
  result = _renderHook.result;
21
21
  var current = result.current;
22
22
  (0, _globals.expect)(current).toBe(_defaultUseCaseContext.defaultUseCaseContext);
23
23
  });
24
- (0, _globals.test)('should return a new context if map has not save a usecase and does not provide a default context', function () {
24
+ (0, _globals.test)('should return the default context if map has not saved a usecase with `UseCaseArgumentTypes.None` & `UseCaseModes.Normal`', function () {
25
25
  var _renderHook2 = (0, _react.renderHook)(function () {
26
- return (0, _.useUseCaseContext)(testUseCase, null);
26
+ return (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.None, _UseCaseModes.UseCaseModes.Normal);
27
27
  }),
28
28
  result = _renderHook2.result;
29
29
  var current = result.current;
30
- (0, _globals.expect)((0, _typeof2["default"])(current)).toBe('object');
30
+ (0, _globals.expect)(current).toBe(_defaultUseCaseContext.defaultUseCaseContext);
31
31
  });
32
- _globals.test.each([void 0, null, _defaultUseCaseContext.defaultUseCaseContext])('should return the existing context if map has save a usecase already', function (defaultContext) {
32
+ (0, _globals.test)('should return a new context if map has not saved a usecase with `UseCaseArgumentTypes.Entity` & `UseCaseModes.Normal`', function () {
33
33
  var _renderHook3 = (0, _react.renderHook)(function () {
34
- return (0, _.useUseCaseContext)(testUseCase) === (0, _.useUseCaseContext)(testUseCase, defaultContext);
34
+ return (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity, _UseCaseModes.UseCaseModes.Normal);
35
35
  }),
36
36
  result = _renderHook3.result;
37
+ var current = result.current;
38
+ (0, _globals.expect)((0, _typeof2["default"])(current)).toBe('object');
39
+ });
40
+ (0, _globals.test)('should return a new context if map has not saved a usecase with `UseCaseArgumentTypes.None` & `UseCaseModes.Global`', function () {
41
+ var _renderHook4 = (0, _react.renderHook)(function () {
42
+ return (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.None, _UseCaseModes.UseCaseModes.Global);
43
+ }),
44
+ result = _renderHook4.result;
45
+ var current = result.current;
46
+ (0, _globals.expect)((0, _typeof2["default"])(current)).toBe('object');
47
+ });
48
+ _globals.test.each([{
49
+ type: _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity,
50
+ mode: _UseCaseModes.UseCaseModes.Normal
51
+ }, {
52
+ type: _UseCaseArgumentTypes.UseCaseArgumentTypes.None,
53
+ mode: _UseCaseModes.UseCaseModes.Global
54
+ }, {
55
+ type: _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity,
56
+ mode: _UseCaseModes.UseCaseModes.Global
57
+ }])('should return the existing context if map has save a usecase already', function (_ref) {
58
+ var type = _ref.type,
59
+ mode = _ref.mode;
60
+ var _renderHook5 = (0, _react.renderHook)(function () {
61
+ return (0, _.useUseCaseContext)(testUseCase, type, mode) === (0, _.useUseCaseContext)(testUseCase);
62
+ }),
63
+ result = _renderHook5.result;
37
64
  var isSame = result.current;
38
65
  (0, _globals.expect)(isSame).toBe(true);
39
66
  });
40
67
  (0, _globals.test)('check context reference times when mount/unmount a usecase', function () {
41
- var _renderHook4 = (0, _react.renderHook)(function () {
42
- (0, _.useUseCaseContext)(testUseCase);
68
+ var _renderHook6 = (0, _react.renderHook)(function () {
69
+ (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity);
43
70
  }),
44
- unmount1 = _renderHook4.unmount;
71
+ unmount1 = _renderHook6.unmount;
45
72
  var _usecaseContextRefere = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
46
73
  times1 = _usecaseContextRefere.times;
47
- var _renderHook5 = (0, _react.renderHook)(function () {
74
+ var _renderHook7 = (0, _react.renderHook)(function () {
48
75
  (0, _.useUseCaseContext)(testUseCase);
49
76
  (0, _.useUseCaseContext)(testUseCase);
50
77
  }),
51
- unmount2 = _renderHook5.unmount,
52
- rerender2 = _renderHook5.rerender;
78
+ unmount2 = _renderHook7.unmount;
53
79
  var _usecaseContextRefere2 = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
54
80
  times2 = _usecaseContextRefere2.times;
55
81
  (0, _globals.expect)(times1).toBe(1);
@@ -63,10 +89,10 @@ var testUseCase = function testUseCase() {
63
89
  (0, _globals.expect)(hasSaved).toBe(false);
64
90
  });
65
91
  (0, _globals.test)('context reference times should not change when rerender hooks', function () {
66
- var _renderHook6 = (0, _react.renderHook)(function () {
67
- (0, _.useUseCaseContext)(testUseCase);
92
+ var _renderHook8 = (0, _react.renderHook)(function () {
93
+ (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity);
68
94
  }),
69
- rerender = _renderHook6.rerender;
95
+ rerender = _renderHook8.rerender;
70
96
  rerender();
71
97
  var _usecaseContextRefere4 = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
72
98
  times = _usecaseContextRefere4.times;