@mic-rexjs/usecases-react 2.6.2 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) 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/enums/ArgumentTypes/index.d.ts +6 -0
  5. package/es/enums/ArgumentTypes/index.js +7 -0
  6. package/es/enums/Statuses/index.d.ts +27 -0
  7. package/es/enums/Statuses/index.js +28 -0
  8. package/es/hooks/useArgumentTypes/index.d.ts +2 -2
  9. package/es/hooks/useArgumentTypes/index.js +9 -4
  10. package/es/hooks/useContext/index.d.ts +5 -0
  11. package/es/hooks/useContext/index.js +14 -0
  12. package/es/hooks/useContext/index.test.js +52 -0
  13. package/es/hooks/useContextUseCase/index.d.ts +2 -0
  14. package/es/hooks/useContextUseCase/index.js +7 -0
  15. package/es/hooks/useContextValue/index.d.ts +4 -0
  16. package/es/hooks/useContextValue/index.js +13 -0
  17. package/es/hooks/useContextualItem/index.d.ts +2 -2
  18. package/es/hooks/useContextualItem/index.js +2 -2
  19. package/es/hooks/useEntity/index.d.ts +2 -2
  20. package/es/hooks/useEntity/index.js +20 -20
  21. package/es/hooks/useFullArguments/index.d.ts +5 -0
  22. package/es/hooks/useFullArguments/index.js +22 -0
  23. package/es/{methods/fillArguments → hooks/useFullArguments}/types.d.ts +3 -2
  24. package/es/hooks/useProvider/index.d.ts +5 -4
  25. package/es/hooks/useProvider/index.js +7 -14
  26. package/es/hooks/useRuntimeEntity/index.d.ts +2 -2
  27. package/es/hooks/useRuntimeEntity/index.js +9 -9
  28. package/es/hooks/useStatuses/index.d.ts +5 -0
  29. package/es/hooks/useStatuses/index.js +27 -0
  30. package/es/hooks/useUseCase/index.js +13 -13
  31. package/es/hooks/useUseCase/index.test.js +106 -1
  32. package/es/hooks/useUseCase/types.d.ts +10 -10
  33. package/es/index.d.ts +1 -0
  34. package/es/index.js +1 -0
  35. package/es/methods/initEntityReducers/index.d.ts +4 -3
  36. package/es/methods/registerGlobalUseCase/index.d.ts +1 -0
  37. package/es/methods/registerGlobalUseCase/index.js +2 -0
  38. package/es/usecases/contextUseCase/index.d.ts +2 -2
  39. package/es/usecases/contextUseCase/index.js +99 -18
  40. package/es/usecases/contextUseCase/types.d.ts +33 -2
  41. package/lib/enums/ArgumentTypes/index.js +13 -0
  42. package/lib/enums/Statuses/index.js +34 -0
  43. package/lib/hooks/useArgumentTypes/index.js +9 -3
  44. package/lib/hooks/useContext/index.js +23 -0
  45. package/lib/hooks/useContext/index.test.js +62 -0
  46. package/lib/hooks/useContextUseCase/index.js +13 -0
  47. package/lib/hooks/useContextValue/index.js +20 -0
  48. package/lib/hooks/useContextualItem/index.js +2 -2
  49. package/lib/hooks/useEntity/index.js +21 -21
  50. package/lib/hooks/useFullArguments/index.js +25 -0
  51. package/lib/hooks/useProvider/index.js +8 -15
  52. package/lib/hooks/useRuntimeEntity/index.js +9 -9
  53. package/lib/hooks/useStatuses/index.js +33 -0
  54. package/lib/hooks/useUseCase/index.js +13 -13
  55. package/lib/hooks/useUseCase/index.test.js +152 -7
  56. package/lib/index.js +8 -1
  57. package/lib/methods/registerGlobalUseCase/index.js +9 -0
  58. package/lib/usecases/contextUseCase/index.js +103 -20
  59. package/package.json +3 -3
  60. package/es/configs/defaultUseCaseContext/index.d.ts +0 -4
  61. package/es/configs/defaultUseCaseContext/index.js +0 -2
  62. package/es/configs/defaultUseCaseContext/types.d.ts +0 -19
  63. package/es/configs/useCaseContextReferenceMap/index.d.ts +0 -1
  64. package/es/configs/useCaseContextReferenceMap/index.js +0 -1
  65. package/es/configs/useCaseContextReferenceMap/types.d.ts +0 -8
  66. package/es/configs/useCaseContextReferenceMap/types.js +0 -1
  67. package/es/enums/UseCaseArgumentTypes/index.d.ts +0 -4
  68. package/es/enums/UseCaseArgumentTypes/index.js +0 -5
  69. package/es/enums/UseCaseStatuses/index.d.ts +0 -8
  70. package/es/enums/UseCaseStatuses/index.js +0 -14
  71. package/es/hooks/useUseCaseContext/index.d.ts +0 -4
  72. package/es/hooks/useUseCaseContext/index.js +0 -48
  73. package/es/hooks/useUseCaseContext/index.test.js +0 -59
  74. package/es/hooks/useUseCaseStatuses/index.d.ts +0 -5
  75. package/es/hooks/useUseCaseStatuses/index.js +0 -22
  76. package/es/methods/fillArguments/index.d.ts +0 -5
  77. package/es/methods/fillArguments/index.js +0 -14
  78. package/es/methods/fillArguments/types.js +0 -1
  79. package/lib/configs/defaultUseCaseContext/index.js +0 -8
  80. package/lib/configs/useCaseContextReferenceMap/index.js +0 -7
  81. package/lib/configs/useCaseContextReferenceMap/types.js +0 -5
  82. package/lib/enums/UseCaseArgumentTypes/index.js +0 -11
  83. package/lib/enums/UseCaseStatuses/index.js +0 -20
  84. package/lib/hooks/useUseCaseContext/index.js +0 -57
  85. package/lib/hooks/useUseCaseContext/index.test.js +0 -73
  86. package/lib/hooks/useUseCaseStatuses/index.js +0 -28
  87. package/lib/methods/fillArguments/index.js +0 -21
  88. package/lib/methods/fillArguments/types.js +0 -5
  89. /package/es/hooks/{useUseCaseContext → useContext}/index.test.d.ts +0 -0
  90. /package/es/{configs/defaultUseCaseContext → hooks/useFullArguments}/types.js +0 -0
  91. /package/lib/{configs/defaultUseCaseContext → hooks/useFullArguments}/types.js +0 -0
@@ -6,29 +6,38 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.useEntity = void 0;
7
7
  var _react = require("react");
8
8
  var _usecases = require("@mic-rexjs/usecases");
9
- var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
9
+ var _Statuses = require("../../enums/Statuses");
10
10
  var _useContextualItem = require("../useContextualItem");
11
11
  var _ahooks = require("ahooks");
12
12
  var _triggerWatchers = require("../../methods/triggerWatchers");
13
13
  var _useRuntimeEntity = require("../useRuntimeEntity");
14
- var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, contextStore, options, depsKey) {
14
+ var useEntity = exports.useEntity = function useEntity(statuses, entityArg, contextStore, options) {
15
15
  var update = (0, _ahooks.useUpdate)();
16
16
  var optionsRef = (0, _ahooks.useLatest)(options);
17
17
  var contextEntity = contextStore ? contextStore.value : null;
18
- var entityEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityEnabled;
19
- var entityRootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
18
+ var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
19
+ var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
20
20
  var store = (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
21
21
  if (!entityRootEnabled) {
22
22
  return new _usecases.EntityStore(null);
23
23
  }
24
- var isFunction = typeof rootEntity === 'function';
25
- return new _usecases.EntityStore(isFunction ? rootEntity() : rootEntity, {
26
- onChange: function onChange() {
27
- update();
28
- }
29
- });
24
+ var isFunction = typeof entityArg === 'function';
25
+ return new _usecases.EntityStore(isFunction ? entityArg() : entityArg);
26
+ });
27
+ var runtimeEntity = (0, _useRuntimeEntity.useRuntimeEntity)(store, entityArg, contextEntity, statuses);
28
+ var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
29
+ var _optionsRef$current = optionsRef.current,
30
+ onChange = _optionsRef$current.onChange,
31
+ watch = _optionsRef$current.watch;
32
+ var globalEnabled = (statuses & _Statuses.Statuses.GlobalEnabled) === _Statuses.Statuses.GlobalEnabled;
33
+ if (watch) {
34
+ (0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
35
+ }
36
+ onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
37
+ if (entityRootEnabled || globalEnabled) {
38
+ update();
39
+ }
30
40
  });
31
- var runtimeEntity = (0, _useRuntimeEntity.useRuntimeEntity)(store, rootEntity, contextEntity, statuses);
32
41
  if (entityRootEnabled) {
33
42
  // 执行同步操作
34
43
  store.value = runtimeEntity;
@@ -37,20 +46,11 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
37
46
  if (!entityEnabled) {
38
47
  return;
39
48
  }
40
- var onEntityChange = function onEntityChange(newEntity, oldEntity) {
41
- var _optionsRef$current = optionsRef.current,
42
- onChange = _optionsRef$current.onChange,
43
- watch = _optionsRef$current.watch;
44
- if (watch) {
45
- (0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
46
- }
47
- onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
48
- };
49
49
  store.watch(onEntityChange);
50
50
  return function () {
51
51
  store.unwatch(onEntityChange);
52
52
  };
53
- }, [entityEnabled, store, depsKey, optionsRef]);
53
+ }, [entityEnabled, store, onEntityChange]);
54
54
  return (0, _ahooks.useCreation)(function () {
55
55
  return [runtimeEntity, store];
56
56
  }, [runtimeEntity, store]);
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useFullArguments = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _ArgumentTypes = require("../../enums/ArgumentTypes");
10
+ var _useContextUseCase2 = require("../useContextUseCase");
11
+ var useFullArguments = exports.useFullArguments = function useFullArguments(args, argumentTypes) {
12
+ var _args = (0, _slicedToArray2["default"])(args, 4),
13
+ arg1 = _args[0],
14
+ arg2 = _args[1],
15
+ arg3 = _args[2],
16
+ arg4 = _args[3];
17
+ var withoutEntity = (argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) !== _ArgumentTypes.ArgumentTypes.Entity;
18
+ var _useContextUseCase = (0, _useContextUseCase2.useContextUseCase)(),
19
+ isGlobal = _useContextUseCase.isGlobal;
20
+ var global = isGlobal(arg1);
21
+ if (withoutEntity || global) {
22
+ return [null, arg1, arg2 || {}, arg3 || []];
23
+ }
24
+ return [arg1, arg2, arg3 || {}, arg4 || []];
25
+ };
@@ -5,36 +5,29 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useProvider = void 0;
8
- var _ahooks = require("ahooks");
9
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _ahooks = require("ahooks");
10
10
  var _useConstantFn = require("../useConstantFn");
11
- var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
11
+ var _useContextUseCase2 = require("../useContextUseCase");
12
12
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
13
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
14
14
  var useProvider = exports.useProvider = function useProvider(statuses, context, store, reducers) {
15
15
  var entity = store.value;
16
+ var _useContextUseCase = (0, _useContextUseCase2.useContextUseCase)(),
17
+ createContextValue = _useContextUseCase.createContextValue;
16
18
  var contextValue = (0, _react.useMemo)(function () {
17
19
  void entity;
18
- if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
19
- return {
20
- store: store,
21
- reducers: reducers,
22
- statuses: statuses
23
- };
24
- }
25
- return {
26
- reducers: reducers,
27
- statuses: statuses
28
- };
29
- }, [statuses, entity, store, reducers]);
20
+ return createContextValue(store, reducers, statuses);
21
+ }, [statuses, entity, store, reducers, createContextValue]);
30
22
  var contextValueRef = (0, _ahooks.useLatest)(contextValue);
31
23
  return (0, _useConstantFn.useConstantFn)(function (_ref) {
32
24
  var children = _ref.children,
33
25
  _ref$with = _ref["with"],
34
26
  withProviders = _ref$with === void 0 ? [] : _ref$with;
35
27
  var ContextProvider = context.Provider;
28
+ var value = contextValueRef.current;
36
29
  return _react["default"].createElement(ContextProvider, {
37
- value: contextValueRef.current
30
+ value: value
38
31
  }, withProviders.reduceRight(function (currentChildren, withProvider) {
39
32
  return _react["default"].createElement(withProvider, {}, currentChildren);
40
33
  }, children));
@@ -4,21 +4,21 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useRuntimeEntity = void 0;
7
- var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
7
+ var _Statuses = require("../../enums/Statuses");
8
8
  var _react = require("react");
9
- var useRuntimeEntity = exports.useRuntimeEntity = function useRuntimeEntity(store, rootEntity, contextEntity, statuses) {
10
- var prevRootEntityRef = (0, _react.useRef)(rootEntity);
11
- var entityRootDisabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
9
+ var useRuntimeEntity = exports.useRuntimeEntity = function useRuntimeEntity(store, entityArg, contextEntity, statuses) {
10
+ var prevEntityArgRef = (0, _react.useRef)(entityArg);
11
+ var entityRootDisabled = (statuses & _Statuses.Statuses.EntityRootEnabled) !== _Statuses.Statuses.EntityRootEnabled;
12
12
  if (entityRootDisabled) {
13
13
  return contextEntity;
14
14
  }
15
- var isFunction = typeof rootEntity === 'function';
16
- var prevRootEntity = prevRootEntityRef.current;
15
+ var isFunction = typeof entityArg === 'function';
16
+ var prevEntityArg = prevEntityArgRef.current;
17
17
  switch (true) {
18
18
  case isFunction:
19
- case prevRootEntity === rootEntity:
19
+ case prevEntityArg === entityArg:
20
20
  return store.value;
21
21
  }
22
- prevRootEntityRef.current = rootEntity;
23
- return rootEntity;
22
+ prevEntityArgRef.current = entityArg;
23
+ return entityArg;
24
24
  };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useStatuses = void 0;
7
+ var _ArgumentTypes = require("../../enums/ArgumentTypes");
8
+ var _Statuses = require("../../enums/Statuses");
9
+ var _ahooks = require("ahooks");
10
+ var useStatuses = exports.useStatuses = function useStatuses(argumentTypes, contextValue) {
11
+ return (0, _ahooks.useCreation)(function () {
12
+ var statuses = _Statuses.Statuses.None;
13
+ var _ref = contextValue || {},
14
+ store = _ref.store;
15
+ var hasEntity = (argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) === _ArgumentTypes.ArgumentTypes.Entity;
16
+ var isGlobal = (argumentTypes & _ArgumentTypes.ArgumentTypes.Global) === _ArgumentTypes.ArgumentTypes.Global;
17
+ if (hasEntity && !isGlobal) {
18
+ statuses |= _Statuses.Statuses.EntityRootEnabled;
19
+ }
20
+ if (contextValue || isGlobal) {
21
+ statuses |= _Statuses.Statuses.ContextEnabled;
22
+ } else {
23
+ statuses |= _Statuses.Statuses.RootEnabled;
24
+ }
25
+ if (store || isGlobal) {
26
+ statuses |= _Statuses.Statuses.EntityEnabled;
27
+ }
28
+ if (isGlobal) {
29
+ statuses |= _Statuses.Statuses.GlobalEnabled;
30
+ }
31
+ return statuses;
32
+ }, [argumentTypes, contextValue]);
33
+ };
@@ -8,28 +8,28 @@ exports.useUseCase = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _ahooks = require("ahooks");
11
- var _react = require("react");
12
11
  var _useConstantFn = require("../useConstantFn");
13
12
  var _useProvider = require("../useProvider");
14
13
  var _initEntityReducers = require("../../methods/initEntityReducers");
15
- var _useUseCaseContext = require("../useUseCaseContext");
14
+ var _useContext = require("../useContext");
16
15
  var _useIsRenderingRef = require("../useIsRenderingRef");
17
- var _fillArguments = require("../../methods/fillArguments");
18
16
  var _useArgumentTypes = require("../useArgumentTypes");
19
- var _useUseCaseStatuses = require("../useUseCaseStatuses");
20
- var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
17
+ var _useStatuses = require("../useStatuses");
18
+ var _Statuses = require("../../enums/Statuses");
21
19
  var _useEntity3 = require("../useEntity");
22
20
  var _useContextualItem = require("../useContextualItem");
23
21
  var _cacheCalls = require("../../methods/cacheCalls");
24
22
  var _useCompareDeps = require("../useCompareDeps");
25
23
  var _captureCalls = require("../../methods/captureCalls");
24
+ var _useFullArguments = require("../useFullArguments");
25
+ var _useContextValue = require("../useContextValue");
26
26
  var useUseCase = exports.useUseCase = function useUseCase() {
27
27
  var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
28
28
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
29
29
  args[_key] = arguments[_key];
30
30
  }
31
31
  var argumentTypes = (0, _useArgumentTypes.useArgumentTypes)(args);
32
- var fullArguments = (0, _fillArguments.fillArguments)(args, argumentTypes);
32
+ var fullArguments = (0, _useFullArguments.useFullArguments)(args, argumentTypes);
33
33
  var _fullArguments = (0, _slicedToArray2["default"])(fullArguments, 4),
34
34
  unsafeEntity = _fullArguments[0],
35
35
  unsafeUsecase = _fullArguments[1],
@@ -38,10 +38,10 @@ var useUseCase = exports.useUseCase = function useUseCase() {
38
38
  var unkownUsecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
39
39
  var usecase = unkownUsecase;
40
40
  var entityUseCase = unkownUsecase;
41
- var context = (0, _useUseCaseContext.useUseCaseContext)(unkownUsecase, argumentTypes);
42
- var contextValue = (0, _react.useContext)(context);
41
+ var context = (0, _useContext.useContext)(unkownUsecase, argumentTypes);
42
+ var contextValue = (0, _useContextValue.useContextValue)(context, argumentTypes);
43
43
  var entityContextValue = contextValue;
44
- var statuses = (0, _useUseCaseStatuses.useUseCaseStatuses)(argumentTypes, contextValue);
44
+ var statuses = (0, _useStatuses.useStatuses)(argumentTypes, contextValue);
45
45
  var optionsRef = (0, _ahooks.useLatest)(options);
46
46
  var depsKey = (0, _useCompareDeps.useCompareDeps)(deps);
47
47
  var _ref = contextValue || {},
@@ -50,7 +50,7 @@ var useUseCase = exports.useUseCase = function useUseCase() {
50
50
  var _ref2 = entityContextValue || {},
51
51
  _ref2$store = _ref2.store,
52
52
  contextStore = _ref2$store === void 0 ? null : _ref2$store;
53
- var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options, depsKey),
53
+ var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options),
54
54
  _useEntity2 = (0, _slicedToArray2["default"])(_useEntity, 2),
55
55
  entity = _useEntity2[0],
56
56
  store = _useEntity2[1];
@@ -59,7 +59,7 @@ var useUseCase = exports.useUseCase = function useUseCase() {
59
59
  var _optionsRef$current$k, _optionsRef$current;
60
60
  return (_optionsRef$current$k = (_optionsRef$current = optionsRef.current)[key]) === null || _optionsRef$current$k === void 0 ? void 0 : _optionsRef$current$k.call.apply(_optionsRef$current$k, [_optionsRef$current].concat((0, _toConsumableArray2["default"])(callArgs)));
61
61
  });
62
- if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
62
+ if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
63
63
  return usecase(opts);
64
64
  }
65
65
  var hookOptions = opts;
@@ -67,10 +67,10 @@ var useUseCase = exports.useUseCase = function useUseCase() {
67
67
  }, depsKey);
68
68
  var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
69
69
  return (0, _ahooks.useCreation)(function () {
70
- if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
70
+ if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
71
71
  return reducers;
72
72
  }
73
- var rootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.RootEnabled) === _UseCaseStatuses.UseCaseStatuses.RootEnabled;
73
+ var rootEnabled = (statuses & _Statuses.Statuses.RootEnabled) === _Statuses.Statuses.RootEnabled;
74
74
  var cachedReducers = (0, _cacheCalls.cacheCalls)(reducers, {
75
75
  onShouldCache: function onShouldCache() {
76
76
  return isRenderingRef.current;
@@ -16,6 +16,7 @@ var _react = require("@testing-library/react");
16
16
  var _ = require(".");
17
17
  var _ahooks = require("ahooks");
18
18
  var _react2 = require("react");
19
+ var _registerGlobalUseCase = require("../../methods/registerGlobalUseCase");
19
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
21
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
22
  function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
@@ -1468,7 +1469,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1468
1469
  (0, _globals.expect)(onBooleanMount).toHaveBeenCalledWith(true);
1469
1470
  });
1470
1471
  });
1471
- (0, _globals.describe)('`useUseCase` should work the same as useContextualCoreCollection', function () {
1472
+ (0, _globals.describe)('`useUseCase` should work the same as `useContextualCoreCollection`', function () {
1472
1473
  (0, _globals.test)('Should trigger Parent & Child to update', function () {
1473
1474
  var onParentUpdate = _globals.jest.fn();
1474
1475
  var onChildUpdate = _globals.jest.fn();
@@ -1918,6 +1919,150 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1918
1919
  oldValue: EXT_1
1919
1920
  });
1920
1921
  });
1922
+ (0, _globals.test)('global usecase should share the entity to any components', function () {
1923
+ var onValue = _globals.jest.fn();
1924
+ var firstButtonText = 'first button';
1925
+ var secondButtonText = 'second button';
1926
+ var numberUseCase = function numberUseCase() {
1927
+ return (0, _usecases.entityUseCase)();
1928
+ };
1929
+ var A = function A() {
1930
+ var _useUseCase54 = (0, _.useUseCase)(numberUseCase),
1931
+ _useUseCase55 = (0, _slicedToArray2["default"])(_useUseCase54, 2),
1932
+ entity = _useUseCase55[0],
1933
+ setEntity = _useUseCase55[1].setEntity;
1934
+ var onButtonClick = function onButtonClick() {
1935
+ setEntity(2);
1936
+ };
1937
+ (0, _ahooks.useMount)(function () {
1938
+ onValue(entity);
1939
+ });
1940
+ return (0, _jsxRuntime.jsx)("div", {
1941
+ children: (0, _jsxRuntime.jsx)("button", {
1942
+ onClick: onButtonClick,
1943
+ children: firstButtonText
1944
+ })
1945
+ });
1946
+ };
1947
+ var B = function B() {
1948
+ var _useUseCase56 = (0, _.useUseCase)(numberUseCase),
1949
+ _useUseCase57 = (0, _slicedToArray2["default"])(_useUseCase56, 2),
1950
+ entity = _useUseCase57[0],
1951
+ setEntity = _useUseCase57[1].setEntity;
1952
+ var onButtonClick = function onButtonClick() {
1953
+ setEntity(3);
1954
+ };
1955
+ (0, _ahooks.useMount)(function () {
1956
+ onValue(entity);
1957
+ });
1958
+ return (0, _jsxRuntime.jsx)("div", {
1959
+ children: (0, _jsxRuntime.jsx)("button", {
1960
+ onClick: onButtonClick,
1961
+ children: secondButtonText
1962
+ })
1963
+ });
1964
+ };
1965
+ (0, _registerGlobalUseCase.registerGlobalUseCase)(1, numberUseCase);
1966
+ (0, _react.render)((0, _jsxRuntime.jsx)(A, {}));
1967
+ (0, _globals.expect)(onValue).toHaveBeenNthCalledWith(1, 1);
1968
+ _react.fireEvent.click(_react.screen.getByText(firstButtonText));
1969
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
1970
+ (0, _globals.expect)(onValue).toHaveBeenNthCalledWith(2, 2);
1971
+ _react.fireEvent.click(_react.screen.getByText(secondButtonText));
1972
+ });
1973
+ (0, _globals.test)('global usecase should trigger `onChange` in any components when entity has changed', function () {
1974
+ var onValueChange1 = _globals.jest.fn();
1975
+ var onValueChange2 = _globals.jest.fn();
1976
+ var firstButtonText = 'first button';
1977
+ var secondButtonText = 'second button';
1978
+ var numberUseCase = function numberUseCase() {
1979
+ return (0, _usecases.entityUseCase)();
1980
+ };
1981
+ var A = function A() {
1982
+ var _useUseCase58 = (0, _.useUseCase)(numberUseCase, {
1983
+ onChange: function onChange(value) {
1984
+ onValueChange1(value);
1985
+ }
1986
+ }),
1987
+ _useUseCase59 = (0, _slicedToArray2["default"])(_useUseCase58, 2),
1988
+ setEntity = _useUseCase59[1].setEntity;
1989
+ var onButtonClick = function onButtonClick() {
1990
+ setEntity(2);
1991
+ };
1992
+ return (0, _jsxRuntime.jsx)("div", {
1993
+ children: (0, _jsxRuntime.jsx)("button", {
1994
+ onClick: onButtonClick,
1995
+ children: firstButtonText
1996
+ })
1997
+ });
1998
+ };
1999
+ var B = function B() {
2000
+ var _useUseCase60 = (0, _.useUseCase)(numberUseCase, {
2001
+ onChange: function onChange(value) {
2002
+ onValueChange2(value);
2003
+ }
2004
+ }),
2005
+ _useUseCase61 = (0, _slicedToArray2["default"])(_useUseCase60, 2),
2006
+ setEntity = _useUseCase61[1].setEntity;
2007
+ var onButtonClick = function onButtonClick() {
2008
+ setEntity(3);
2009
+ };
2010
+ return (0, _jsxRuntime.jsx)("div", {
2011
+ children: (0, _jsxRuntime.jsx)("button", {
2012
+ onClick: onButtonClick,
2013
+ children: secondButtonText
2014
+ })
2015
+ });
2016
+ };
2017
+ (0, _registerGlobalUseCase.registerGlobalUseCase)(1, numberUseCase);
2018
+ (0, _react.render)((0, _jsxRuntime.jsx)(A, {}));
2019
+ _react.fireEvent.click(_react.screen.getByText(firstButtonText));
2020
+ (0, _globals.expect)(onValueChange1).toHaveBeenNthCalledWith(1, 2);
2021
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
2022
+ _react.fireEvent.click(_react.screen.getByText(secondButtonText));
2023
+ (0, _globals.expect)(onValueChange1).toHaveBeenNthCalledWith(2, 3);
2024
+ (0, _globals.expect)(onValueChange2).toHaveBeenNthCalledWith(1, 3);
2025
+ });
2026
+ (0, _globals.test)('global usecase should trigger update for components when entity has changed', function () {
2027
+ var onUpdate1 = _globals.jest.fn();
2028
+ var onUpdate2 = _globals.jest.fn();
2029
+ var buttonText = 'my button';
2030
+ var numberUseCase = function numberUseCase() {
2031
+ return (0, _usecases.entityUseCase)();
2032
+ };
2033
+ var A = function A() {
2034
+ var _useUseCase62 = (0, _.useUseCase)(numberUseCase),
2035
+ _useUseCase63 = (0, _slicedToArray2["default"])(_useUseCase62, 2),
2036
+ entity = _useUseCase63[0],
2037
+ setEntity = _useUseCase63[1].setEntity;
2038
+ var onButtonClick = function onButtonClick() {
2039
+ setEntity(6);
2040
+ };
2041
+ (0, _ahooks.useUpdateEffect)(function () {
2042
+ onUpdate1(entity);
2043
+ }, [entity]);
2044
+ return (0, _jsxRuntime.jsx)("div", {
2045
+ children: (0, _jsxRuntime.jsx)("button", {
2046
+ onClick: onButtonClick,
2047
+ children: buttonText
2048
+ })
2049
+ });
2050
+ };
2051
+ var B = function B() {
2052
+ var _useUseCase64 = (0, _.useUseCase)(numberUseCase),
2053
+ _useUseCase65 = (0, _slicedToArray2["default"])(_useUseCase64, 1),
2054
+ entity = _useUseCase65[0];
2055
+ (0, _ahooks.useUpdateEffect)(function () {
2056
+ onUpdate2(entity);
2057
+ }, [entity]);
2058
+ return (0, _jsxRuntime.jsx)(A, {});
2059
+ };
2060
+ (0, _registerGlobalUseCase.registerGlobalUseCase)(1, numberUseCase);
2061
+ (0, _react.render)((0, _jsxRuntime.jsx)(B, {}));
2062
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
2063
+ (0, _globals.expect)(onUpdate1).toHaveBeenNthCalledWith(1, 6);
2064
+ (0, _globals.expect)(onUpdate2).toHaveBeenNthCalledWith(1, 6);
2065
+ });
1921
2066
  });
1922
2067
  (0, _globals.describe)('`useUseCase` should work the same as `useReducers`', function () {
1923
2068
  (0, _globals.test)('`entity` should equal `defaultFile`', function () {
@@ -1971,8 +2116,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1971
2116
  (0, _globals.test)('reducer call should not be cached if component is at rendering phase', function () {
1972
2117
  var buttonText = 'button';
1973
2118
  var CacheTestComponent = function CacheTestComponent() {
1974
- var _useUseCase54 = (0, _.useUseCase)(mathUseCase),
1975
- subtraction = _useUseCase54.subtraction;
2119
+ var _useUseCase66 = (0, _.useUseCase)(mathUseCase),
2120
+ subtraction = _useUseCase66.subtraction;
1976
2121
  var update = (0, _ahooks.useUpdate)();
1977
2122
  var onClick = function onClick() {
1978
2123
  update();
@@ -1995,8 +2140,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1995
2140
  (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
1996
2141
  var buttonText = 'button';
1997
2142
  var CacheTestComponent = function CacheTestComponent() {
1998
- var _useUseCase55 = (0, _.useUseCase)(mathUseCase),
1999
- subtraction = _useUseCase55.subtraction;
2143
+ var _useUseCase67 = (0, _.useUseCase)(mathUseCase),
2144
+ subtraction = _useUseCase67.subtraction;
2000
2145
  var onClick = function onClick() {
2001
2146
  subtraction(5, 3);
2002
2147
  };
@@ -2024,8 +2169,8 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
2024
2169
  var count = 0;
2025
2170
  var buttonText = 'button';
2026
2171
  var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
2027
- var _useUseCase56 = (0, _.useUseCase)(mathUseCase),
2028
- subtraction = _useUseCase56.subtraction;
2172
+ var _useUseCase68 = (0, _.useUseCase)(mathUseCase),
2173
+ subtraction = _useUseCase68.subtraction;
2029
2174
  var update = (0, _ahooks.useUpdate)();
2030
2175
  subtraction(5, count++);
2031
2176
  var onUpdate = function onUpdate() {
package/lib/index.js CHANGED
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "UseCaseFragment", {
9
9
  return _UseCaseFragment.UseCaseFragment;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "registerGlobalUseCase", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _registerGlobalUseCase.registerGlobalUseCase;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "useUseCase", {
13
19
  enumerable: true,
14
20
  get: function get() {
@@ -16,4 +22,5 @@ Object.defineProperty(exports, "useUseCase", {
16
22
  }
17
23
  });
18
24
  var _UseCaseFragment = require("./components/UseCaseFragment");
19
- var _useUseCase = require("./hooks/useUseCase");
25
+ var _useUseCase = require("./hooks/useUseCase");
26
+ var _registerGlobalUseCase = require("./methods/registerGlobalUseCase");
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.registerGlobalUseCase = void 0;
7
+ var _contextUseCase2 = require("../../usecases/contextUseCase");
8
+ var _contextUseCase = (0, _contextUseCase2.contextUseCase)(),
9
+ registerGlobalUseCase = exports.registerGlobalUseCase = _contextUseCase.registerGlobalUseCase;
@@ -1,27 +1,110 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.contextUseCase = void 0;
8
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
- var contextUseCase = exports.contextUseCase = function contextUseCase() {
10
- var hasContext = function hasContext(target) {
11
- if ((0, _typeof2["default"])(target) !== 'object') {
12
- return false;
13
- }
14
- if (!Array.isArray(target)) {
15
- return false;
16
- }
17
- var length = target.length;
18
- var reducers = target[1];
19
- if (length < 2) {
20
- return false;
21
- }
22
- return (0, _typeof2["default"])(reducers) === 'object';
7
+ var _usecases = require("@mic-rexjs/usecases");
8
+ var _ArgumentTypes = require("../../enums/ArgumentTypes");
9
+ var _react = require("react");
10
+ var _Statuses = require("../../enums/Statuses");
11
+ var _initEntityReducers = require("../../methods/initEntityReducers");
12
+ var contextUseCase = exports.contextUseCase = (0, _usecases.createUseCase)(function () {
13
+ var referenceMap = new Map();
14
+ var globalContextMap = new Map();
15
+ var globalContextValueMap = new Map();
16
+ var defaultUseCaseContext = (0, _react.createContext)(null);
17
+ return function () {
18
+ var createContextValue = function createContextValue(store, reducers, statuses) {
19
+ if ((statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled) {
20
+ return {
21
+ store: store,
22
+ reducers: reducers,
23
+ statuses: statuses
24
+ };
25
+ }
26
+ return {
27
+ reducers: reducers,
28
+ statuses: statuses
29
+ };
30
+ };
31
+ var getGlobalContextValue = function getGlobalContextValue(key) {
32
+ var context = typeof key === 'function' ? globalContextMap.get(key) : key;
33
+ return globalContextValueMap.get(context) || null;
34
+ };
35
+ var isGlobal = function isGlobal(usecase) {
36
+ return globalContextMap.has(usecase);
37
+ };
38
+ var registerUseCase = function registerUseCase(usecase, argumentTypes) {
39
+ if (referenceMap.has(usecase)) {
40
+ var reference = referenceMap.get(usecase);
41
+ var value = reference.value,
42
+ times = reference.times;
43
+ referenceMap.set(usecase, {
44
+ value: value,
45
+ times: times + 1
46
+ });
47
+ return value;
48
+ }
49
+ if ((argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) !== _ArgumentTypes.ArgumentTypes.Entity) {
50
+ return defaultUseCaseContext;
51
+ }
52
+ var context = (0, _react.createContext)(null);
53
+ referenceMap.set(usecase, {
54
+ value: context,
55
+ times: 1
56
+ });
57
+ return context;
58
+ };
59
+ var unregisterUseCase = function unregisterUseCase(usecase, argumentTypes) {
60
+ if ((argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) !== _ArgumentTypes.ArgumentTypes.Entity) {
61
+ return false;
62
+ }
63
+ if (!referenceMap.has(usecase)) {
64
+ return false;
65
+ }
66
+ var reference = referenceMap.get(usecase);
67
+ var value = reference.value,
68
+ times = reference.times;
69
+ if (times === 1) {
70
+ referenceMap["delete"](usecase);
71
+ } else {
72
+ referenceMap.set(usecase, {
73
+ value: value,
74
+ times: times - 1
75
+ });
76
+ }
77
+ return true;
78
+ };
79
+ var registerGlobalUseCase = function registerGlobalUseCase(entity, usecase) {
80
+ if (globalContextMap.has(usecase)) {
81
+ return;
82
+ }
83
+ var store = new _usecases.EntityStore(entity);
84
+ var reducers = (0, _initEntityReducers.initEntityReducers)(usecase, store, {});
85
+ var contextValue = createContextValue(store, reducers, _Statuses.Statuses.GlobalEnabled);
86
+ var context = registerUseCase(usecase, _ArgumentTypes.ArgumentTypes.GlobalEntity);
87
+ globalContextMap.set(usecase, context);
88
+ globalContextValueMap.set(context, contextValue);
89
+ };
90
+ var unregisterGlobalUseCase = function unregisterGlobalUseCase(usecase) {
91
+ if (!globalContextMap.has(usecase)) {
92
+ return false;
93
+ }
94
+ var context = globalContextMap.get(usecase);
95
+ globalContextMap["delete"](usecase);
96
+ globalContextValueMap["delete"](context);
97
+ referenceMap["delete"](usecase);
98
+ return true;
99
+ };
100
+ return {
101
+ createContextValue: createContextValue,
102
+ getGlobalContextValue: getGlobalContextValue,
103
+ isGlobal: isGlobal,
104
+ registerUseCase: registerUseCase,
105
+ registerGlobalUseCase: registerGlobalUseCase,
106
+ unregisterUseCase: unregisterUseCase,
107
+ unregisterGlobalUseCase: unregisterGlobalUseCase
108
+ };
23
109
  };
24
- return {
25
- hasContext: hasContext
26
- };
27
- };
110
+ });