@mic-rexjs/usecases-react 1.8.0 → 2.0.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 (61) hide show
  1. package/README.md +1 -1
  2. package/dist/index.min.js +1 -1
  3. package/es/configs/defaultUseCaseContext/index.d.ts +2 -3
  4. package/es/configs/defaultUseCaseContext/index.js +1 -1
  5. package/es/configs/defaultUseCaseContext/types.d.ts +11 -3
  6. package/es/configs/usecaseContextMap/types.d.ts +2 -5
  7. package/es/enums/UseCaseModes/index.d.ts +6 -0
  8. package/es/enums/UseCaseModes/index.js +7 -0
  9. package/es/hooks/useChangeCallbackCollection/index.d.ts +3 -0
  10. package/es/hooks/useChangeCallbackCollection/index.js +29 -0
  11. package/es/hooks/useGlobalUseCase/index.d.ts +2 -0
  12. package/es/hooks/useGlobalUseCase/index.js +11 -0
  13. package/es/hooks/useGlobalUseCase/index.test.js +71 -0
  14. package/es/hooks/useGlobalUseCase/types.d.ts +12 -0
  15. package/es/hooks/useGlobalUseCase/types.js +1 -0
  16. package/es/hooks/useProvider/index.d.ts +3 -5
  17. package/es/hooks/useProvider/index.js +25 -17
  18. package/es/hooks/useStatelessUseCase/index.d.ts +2 -0
  19. package/es/hooks/useStatelessUseCase/index.js +8 -0
  20. package/es/hooks/useStatelessUseCase/index.test.d.ts +1 -0
  21. package/es/hooks/useStatelessUseCase/index.test.js +75 -0
  22. package/es/hooks/useStatelessUseCase/types.d.ts +5 -0
  23. package/es/hooks/useStatelessUseCase/types.js +1 -0
  24. package/es/hooks/useUseCase/index.js +27 -29
  25. package/es/hooks/useUseCase/index.test.js +243 -207
  26. package/es/hooks/useUseCase/types.d.ts +55 -8
  27. package/es/hooks/useUseCaseContext/index.d.ts +2 -2
  28. package/es/hooks/useUseCaseContext/index.js +1 -1
  29. package/es/index.d.ts +2 -0
  30. package/es/index.js +2 -0
  31. package/es/methods/getRootEntity/index.d.ts +2 -1
  32. package/es/methods/getRootEntity/index.js +6 -5
  33. package/es/methods/initEntityReducers/index.js +1 -1
  34. package/es/methods/toMaxArguments/index.d.ts +3 -0
  35. package/es/methods/toMaxArguments/index.js +28 -0
  36. package/es/methods/triggerCallbacks/index.d.ts +2 -3
  37. package/es/methods/triggerCallbacks/index.js +3 -12
  38. package/lib/configs/defaultUseCaseContext/index.js +1 -1
  39. package/lib/enums/UseCaseModes/index.js +14 -0
  40. package/lib/hooks/useChangeCallbackCollection/index.js +37 -0
  41. package/lib/hooks/useGlobalUseCase/index.js +25 -0
  42. package/lib/hooks/useGlobalUseCase/index.test.js +78 -0
  43. package/lib/hooks/useProvider/index.js +30 -24
  44. package/lib/hooks/useStatelessUseCase/index.js +22 -0
  45. package/lib/hooks/useStatelessUseCase/index.test.js +78 -0
  46. package/lib/hooks/useStatelessUseCase/types.js +5 -0
  47. package/lib/hooks/useUseCase/index.js +40 -31
  48. package/lib/hooks/useUseCase/index.test.js +337 -288
  49. package/lib/hooks/useUseCaseContext/index.js +1 -1
  50. package/lib/index.js +15 -1
  51. package/lib/methods/getRootEntity/index.js +6 -5
  52. package/lib/methods/initEntityReducers/index.js +2 -3
  53. package/lib/methods/toMaxArguments/index.js +25 -0
  54. package/lib/methods/triggerCallbacks/index.js +3 -13
  55. package/package.json +1 -1
  56. package/es/hooks/useOptionsRefCollection/index.d.ts +0 -3
  57. package/es/hooks/useOptionsRefCollection/index.js +0 -22
  58. package/es/hooks/useOptionsRefCollection/types.d.ts +0 -2
  59. package/lib/hooks/useOptionsRefCollection/index.js +0 -29
  60. /package/es/hooks/{useOptionsRefCollection/types.js → useGlobalUseCase/index.test.d.ts} +0 -0
  61. /package/lib/hooks/{useOptionsRefCollection → useGlobalUseCase}/types.js +0 -0
@@ -1,9 +1,10 @@
1
- export const getRootEntity = (entityState, entityArg, stateless) => {
2
- if (!stateless) {
1
+ import { UseCaseModes } from '../../enums/UseCaseModes';
2
+ export const getRootEntity = (entityState, unsafeEntity, mode) => {
3
+ if ((mode & UseCaseModes.Stateless) !== UseCaseModes.Stateless) {
3
4
  return entityState;
4
5
  }
5
- if (typeof entityArg === 'function') {
6
- return entityArg();
6
+ if (typeof unsafeEntity === 'function') {
7
+ return unsafeEntity();
7
8
  }
8
- return entityArg;
9
+ return unsafeEntity;
9
10
  };
@@ -1,7 +1,7 @@
1
1
  import { entityReducerUseCase } from '@mic-rexjs/usecases';
2
2
  export const initEntityReducers = (entity, usecase, options, onEntityChange) => {
3
3
  const { createEntityReducers } = entityReducerUseCase();
4
- const { stateless, watch, onChange, options: usecaseOptions, ...restUseCaseOptions } = options;
4
+ const { watch, onChange, options: usecaseOptions, ...restUseCaseOptions } = options;
5
5
  return createEntityReducers(entity, usecase, {
6
6
  ...restUseCaseOptions,
7
7
  ...usecaseOptions,
@@ -0,0 +1,3 @@
1
+ import { UseCaseHookMaxParameters, UseCaseHookParameters } from '../../hooks/useUseCase/types';
2
+ import { EntityReducers, Reducers } from '@mic-rexjs/usecases';
3
+ export declare const toMaxArguments: <T, TReducers extends Reducers, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object>([arg1, arg2, arg3, arg4, arg5]: UseCaseHookParameters<T, TReducers, TEntityReducers, TUseCaseOptions>) => UseCaseHookMaxParameters<T, TReducers, TEntityReducers, TUseCaseOptions>;
@@ -0,0 +1,28 @@
1
+ import { UseCaseModes } from '../../enums/UseCaseModes';
2
+ export const toMaxArguments = ([arg1, arg2, arg3, arg4, arg5]) => {
3
+ if (typeof arg2 !== 'function') {
4
+ return [
5
+ null,
6
+ arg1,
7
+ UseCaseModes.Normal,
8
+ arg2 || {},
9
+ (arg3 || []),
10
+ ];
11
+ }
12
+ if (typeof arg3 === 'number') {
13
+ return [
14
+ arg1,
15
+ arg2,
16
+ arg3,
17
+ (arg4 || {}),
18
+ arg5 || [],
19
+ ];
20
+ }
21
+ return [
22
+ arg1,
23
+ arg2,
24
+ UseCaseModes.Normal,
25
+ (arg3 || {}),
26
+ (arg4 || []),
27
+ ];
28
+ };
@@ -1,3 +1,2 @@
1
- import { OptionsRefCollection } from '../../hooks/useOptionsRefCollection/types';
2
- import { UseCaseHookOptions } from '../../hooks/useUseCase/types';
3
- export declare const triggerCallbacks: <T, TUseCaseOptions extends object, TOptions extends UseCaseHookOptions<T, TUseCaseOptions> = UseCaseHookOptions<T, TUseCaseOptions>>(optionsRefCollection: OptionsRefCollection<TOptions>, newEntity: T, oldEntity: T) => void;
1
+ import { ChangeCallback } from '../../configs/defaultUseCaseContext/types';
2
+ export declare const triggerCallbacks: <T>(changeCallbackCollection: ChangeCallback<T>[], newEntity: T, oldEntity: T) => void;
@@ -1,14 +1,5 @@
1
- import { triggerWatchers } from '../triggerWatchers';
2
- export const triggerCallbacks = (optionsRefCollection, newEntity, oldEntity) => {
3
- for (let { length: i } = optionsRefCollection; i > 0; i--) {
4
- const { current: options } = optionsRefCollection[i - 1];
5
- if (!options) {
6
- continue;
7
- }
8
- const { onChange, watch } = options;
9
- if (watch) {
10
- triggerWatchers(watch, newEntity, oldEntity);
11
- }
12
- onChange?.(newEntity, oldEntity);
1
+ export const triggerCallbacks = (changeCallbackCollection, newEntity, oldEntity) => {
2
+ for (let { length: i } = changeCallbackCollection; i > 0; i--) {
3
+ changeCallbackCollection[i - 1](newEntity, oldEntity);
13
4
  }
14
5
  };
@@ -5,5 +5,5 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.defaultUseCaseContext = void 0;
7
7
  var _react = require("react");
8
- var defaultUseCaseContext = (0, _react.createContext)({});
8
+ var defaultUseCaseContext = (0, _react.createContext)(null);
9
9
  exports.defaultUseCaseContext = defaultUseCaseContext;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UseCaseModes = void 0;
7
+ var UseCaseModes;
8
+ exports.UseCaseModes = UseCaseModes;
9
+ (function (UseCaseModes) {
10
+ UseCaseModes[UseCaseModes["Normal"] = 2] = "Normal";
11
+ UseCaseModes[UseCaseModes["Stateless"] = 4] = "Stateless";
12
+ UseCaseModes[UseCaseModes["Global"] = 8] = "Global";
13
+ UseCaseModes[UseCaseModes["StatelessGlobal"] = 12] = "StatelessGlobal";
14
+ })(UseCaseModes || (exports.UseCaseModes = UseCaseModes = {}));
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useChangeCallbackCollection = void 0;
7
+ var _ahooks = require("ahooks");
8
+ var _removeItem = require("../../methods/removeItem");
9
+ var _triggerWatchers = require("../../methods/triggerWatchers");
10
+ var useChangeCallbackCollection = function useChangeCallbackCollection(isRoot, contextCollection, options) {
11
+ var changeCallbackCollection = (0, _ahooks.useCreation)(function () {
12
+ if (isRoot) {
13
+ return [];
14
+ }
15
+ return contextCollection;
16
+ }, [contextCollection, isRoot]);
17
+ var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
18
+ var onChange = options.onChange,
19
+ watch = options.watch;
20
+ if (watch) {
21
+ (0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
22
+ }
23
+ onChange === null || onChange === void 0 ? void 0 : onChange(newEntity, oldEntity);
24
+ });
25
+ var prevChangeCallbackCollection = (0, _ahooks.usePrevious)(changeCallbackCollection);
26
+ (0, _ahooks.useCreation)(function () {
27
+ if (prevChangeCallbackCollection) {
28
+ (0, _removeItem.removeItem)(prevChangeCallbackCollection, onEntityChange);
29
+ }
30
+ changeCallbackCollection.push(onEntityChange);
31
+ }, [onEntityChange, changeCallbackCollection, prevChangeCallbackCollection]);
32
+ (0, _ahooks.useUnmount)(function () {
33
+ (0, _removeItem.removeItem)(changeCallbackCollection, onEntityChange);
34
+ });
35
+ return changeCallbackCollection;
36
+ };
37
+ exports.useChangeCallbackCollection = useChangeCallbackCollection;
@@ -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.useGlobalUseCase = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _useUseCase = require("../useUseCase");
10
+ var _UseCaseModes = require("../../enums/UseCaseModes");
11
+ var useGlobalUseCase = function useGlobalUseCase() {
12
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
13
+ args[_key] = arguments[_key];
14
+ }
15
+ var arg1 = args[0],
16
+ arg2 = args[1],
17
+ rest = args.slice(2);
18
+ var isContextRoot = typeof arg2 === 'function';
19
+ var coreCollection = _useUseCase.useUseCase.apply(void 0, (0, _toConsumableArray2["default"])(isContextRoot ? [arg1, arg2, _UseCaseModes.UseCaseModes.Global].concat((0, _toConsumableArray2["default"])(rest)) : args));
20
+ if (isContextRoot) {
21
+ return coreCollection;
22
+ }
23
+ return coreCollection[1];
24
+ };
25
+ exports.useGlobalUseCase = useGlobalUseCase;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
6
+ var _jsxRuntime = require("react/jsx-runtime");
7
+ var _ = require(".");
8
+ var _usecases = require("@mic-rexjs/usecases");
9
+ var _globals = require("@jest/globals");
10
+ var _UseCaseModes = require("../../enums/UseCaseModes");
11
+ var _react = require("@testing-library/react");
12
+ var _ahooks = require("ahooks");
13
+ var useUseCaseModule = _interopRequireWildcard(require("../useUseCase"));
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ var numberUseCase = function numberUseCase() {
17
+ return (0, _usecases.entityUseCase)();
18
+ };
19
+ (0, _globals.describe)('useGlobalUseCase', function () {
20
+ (0, _globals.describe)('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', function () {
21
+ (0, _globals.test)('check `useUseCase` has received correct arguments', function () {
22
+ var useMockedUseCase = _globals.jest.fn();
23
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
24
+ (0, _react.renderHook)(function () {
25
+ (0, _.useGlobalUseCase)(1, numberUseCase);
26
+ });
27
+ (0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, _UseCaseModes.UseCaseModes.Global);
28
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
29
+ });
30
+ (0, _globals.test)('should should return `CoreCollection` with Provider', function () {
31
+ var _renderHook = (0, _react.renderHook)(function () {
32
+ return (0, _.useGlobalUseCase)(1, numberUseCase);
33
+ }),
34
+ result = _renderHook.result;
35
+ var current = result.current;
36
+ (0, _globals.expect)(current).toEqual([1, {
37
+ setEntity: _globals.expect.any(Function)
38
+ }, _globals.expect.any(Function)]);
39
+ });
40
+ });
41
+ (0, _globals.describe)('`useGlobalUseCase` should work the same as `GlobalReducersHook`', function () {
42
+ (0, _globals.test)('check `useUseCase` has received correct arguments', function () {
43
+ var useMockedUseCase = _globals.jest.fn();
44
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
45
+ (0, _react.renderHook)(function () {
46
+ try {
47
+ (0, _.useGlobalUseCase)(numberUseCase);
48
+ } catch (e) {
49
+ //
50
+ }
51
+ });
52
+ (0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(numberUseCase);
53
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
54
+ });
55
+ (0, _globals.test)('should should only return reducers', function () {
56
+ var onChildMount = _globals.jest.fn();
57
+ var Child = function Child() {
58
+ var reducers = (0, _.useGlobalUseCase)(numberUseCase);
59
+ (0, _ahooks.useMount)(function () {
60
+ onChildMount(reducers);
61
+ });
62
+ return null;
63
+ };
64
+ var Parent = function Parent() {
65
+ var _useGlobalUseCase = (0, _.useGlobalUseCase)(1, numberUseCase),
66
+ _useGlobalUseCase2 = (0, _slicedToArray2["default"])(_useGlobalUseCase, 3),
67
+ Provider = _useGlobalUseCase2[2];
68
+ return (0, _jsxRuntime.jsx)(Provider, {
69
+ children: (0, _jsxRuntime.jsx)(Child, {})
70
+ });
71
+ };
72
+ (0, _react.render)((0, _jsxRuntime.jsx)(Parent, {}));
73
+ (0, _globals.expect)(onChildMount).toHaveBeenCalledWith({
74
+ setEntity: _globals.expect.any(Function)
75
+ });
76
+ });
77
+ });
78
+ });
@@ -1,34 +1,40 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useProvider = void 0;
8
- var _react = _interopRequireDefault(require("react"));
9
- var _useConstant = require("../useConstant");
8
+ var _react = _interopRequireWildcard(require("react"));
10
9
  var _ahooks = require("ahooks");
11
- var useProvider = function useProvider(context, entity, reducers, optionsRefCollection) {
12
- var contextValue = (0, _ahooks.useCreation)(function () {
13
- return {
14
- entity: entity,
15
- reducers: reducers,
16
- optionsRefCollection: optionsRefCollection
17
- };
18
- }, [entity, reducers, optionsRefCollection]);
19
- var contextValueRef = (0, _ahooks.useLatest)(contextValue);
20
- return (0, _useConstant.useConstant)(function () {
21
- return function (_ref) {
22
- var children = _ref.children,
23
- _ref$with = _ref["with"],
24
- withProviders = _ref$with === void 0 ? [] : _ref$with;
25
- var ContextProvider = context.Provider;
26
- return _react["default"].createElement(ContextProvider, {
27
- value: contextValueRef.current
28
- }, withProviders.reduceRight(function (currentChildren, withProvider) {
29
- return _react["default"].createElement(withProvider, {}, currentChildren);
30
- }, children));
31
- };
10
+ var _UseCaseModes = require("../../enums/UseCaseModes");
11
+ var _useCompareDeps = require("../useCompareDeps");
12
+ var _useConstantFn = require("../useConstantFn");
13
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+ var useProvider = function useProvider(context, mode, entity, reducers, changeCallbackCollection) {
16
+ var isGlobal = (mode & _UseCaseModes.UseCaseModes.Global) === _UseCaseModes.UseCaseModes.Global;
17
+ var contextValueRef = (0, _ahooks.useLatest)({
18
+ entity: entity,
19
+ reducers: reducers,
20
+ changeCallbackCollection: changeCallbackCollection
21
+ });
22
+ var key = (0, _useCompareDeps.useCompareDeps)(isGlobal ? [] : [entity, reducers, changeCallbackCollection]);
23
+ var getContextValue = (0, _react.useCallback)(function () {
24
+ void key;
25
+ return contextValueRef.current;
26
+ }, [key, contextValueRef]);
27
+ var getContextValueRef = (0, _ahooks.useLatest)(getContextValue);
28
+ return (0, _useConstantFn.useConstantFn)(function (_ref) {
29
+ var children = _ref.children,
30
+ _ref$with = _ref["with"],
31
+ withProviders = _ref$with === void 0 ? [] : _ref$with;
32
+ var ContextProvider = context.Provider;
33
+ return _react["default"].createElement(ContextProvider, {
34
+ value: getContextValueRef.current
35
+ }, withProviders.reduceRight(function (currentChildren, withProvider) {
36
+ return _react["default"].createElement(withProvider, {}, currentChildren);
37
+ }, children));
32
38
  });
33
39
  };
34
40
  exports.useProvider = useProvider;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useStatelessUseCase = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _useUseCase = require("../useUseCase");
10
+ var _UseCaseModes = require("../../enums/UseCaseModes");
11
+ var useStatelessUseCase = function useStatelessUseCase() {
12
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
13
+ args[_key] = arguments[_key];
14
+ }
15
+ var arg1 = args[0],
16
+ arg2 = args[1],
17
+ rest = args.slice(2);
18
+ var isContextRoot = typeof arg2 === 'function';
19
+ var coreCollection = _useUseCase.useUseCase.apply(void 0, (0, _toConsumableArray2["default"])(isContextRoot ? [arg1, arg2, _UseCaseModes.UseCaseModes.Stateless].concat((0, _toConsumableArray2["default"])(rest)) : args));
20
+ return coreCollection;
21
+ };
22
+ exports.useStatelessUseCase = useStatelessUseCase;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
6
+ var _jsxRuntime = require("react/jsx-runtime");
7
+ var _usecases = require("@mic-rexjs/usecases");
8
+ var _globals = require("@jest/globals");
9
+ var _UseCaseModes = require("../../enums/UseCaseModes");
10
+ var _react = require("@testing-library/react");
11
+ var _ahooks = require("ahooks");
12
+ var useUseCaseModule = _interopRequireWildcard(require("../useUseCase"));
13
+ var _ = require(".");
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ var numberUseCase = function numberUseCase() {
17
+ return (0, _usecases.entityUseCase)();
18
+ };
19
+ (0, _globals.describe)('useStatelessUseCase', function () {
20
+ (0, _globals.describe)('`useStatelessUseCase` should work the same as `RootCoreCollectionHook`', function () {
21
+ (0, _globals.test)('should pass `UseCaseModes.Stateless` to `useUseCase`', function () {
22
+ var useMockedUseCase = _globals.jest.fn();
23
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
24
+ (0, _react.renderHook)(function () {
25
+ (0, _.useStatelessUseCase)(1, numberUseCase);
26
+ });
27
+ (0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, _UseCaseModes.UseCaseModes.Stateless);
28
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
29
+ });
30
+ (0, _globals.test)('should should return `CoreCollection` with Provider', function () {
31
+ var _renderHook = (0, _react.renderHook)(function () {
32
+ return (0, _.useStatelessUseCase)(1, numberUseCase);
33
+ }),
34
+ result = _renderHook.result;
35
+ var current = result.current;
36
+ (0, _globals.expect)(current).toEqual([1, {
37
+ setEntity: _globals.expect.any(Function)
38
+ }, _globals.expect.any(Function)]);
39
+ });
40
+ });
41
+ (0, _globals.describe)('`useStatelessUseCase` should work the same as `ContextualCoreCollectionHook`', function () {
42
+ (0, _globals.test)('check `useUseCase` has received correct arguments', function () {
43
+ var useMockedUseCase = _globals.jest.fn();
44
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
45
+ (0, _react.renderHook)(function () {
46
+ try {
47
+ (0, _.useStatelessUseCase)(numberUseCase);
48
+ } catch (e) {
49
+ //
50
+ }
51
+ });
52
+ (0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(numberUseCase);
53
+ _globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
54
+ });
55
+ (0, _globals.test)('should should only return reducers', function () {
56
+ var onChildMount = _globals.jest.fn();
57
+ var Child = function Child() {
58
+ var coreCollection = (0, _.useStatelessUseCase)(numberUseCase);
59
+ (0, _ahooks.useMount)(function () {
60
+ onChildMount(coreCollection);
61
+ });
62
+ return null;
63
+ };
64
+ var Parent = function Parent() {
65
+ var _useStatelessUseCase = (0, _.useStatelessUseCase)(1, numberUseCase),
66
+ _useStatelessUseCase2 = (0, _slicedToArray2["default"])(_useStatelessUseCase, 3),
67
+ Provider = _useStatelessUseCase2[2];
68
+ return (0, _jsxRuntime.jsx)(Provider, {
69
+ children: (0, _jsxRuntime.jsx)(Child, {})
70
+ });
71
+ };
72
+ (0, _react.render)((0, _jsxRuntime.jsx)(Parent, {}));
73
+ (0, _globals.expect)(onChildMount).toHaveBeenCalledWith([1, {
74
+ setEntity: _globals.expect.any(Function)
75
+ }, null]);
76
+ });
77
+ });
78
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useUseCase = void 0;
8
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
9
  var _ahooks = require("ahooks");
11
10
  var _react = require("react");
@@ -14,52 +13,62 @@ var _useConstantFn = require("../useConstantFn");
14
13
  var _useProvider = require("../useProvider");
15
14
  var _useCompareDeps = require("../useCompareDeps");
16
15
  var _initEntityReducers = require("../../methods/initEntityReducers");
17
- var _useOptionsRefCollection = require("../useOptionsRefCollection");
18
16
  var _triggerCallbacks = require("../../methods/triggerCallbacks");
19
17
  var _getRootEntity = require("../../methods/getRootEntity");
20
18
  var _useUseCaseContext = require("../useUseCaseContext");
21
19
  var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
22
20
  var _useIsRenderingRef = require("../useIsRenderingRef");
23
21
  var _cacheReducerCalls = require("../../methods/cacheReducerCalls");
24
- var useUseCase = function useUseCase(arg1, arg2, arg3, arg4) {
25
- var hasInitialEntity = (0, _useConstant.useConstant)(typeof arg2 === 'function');
26
- var options = (hasInitialEntity ? arg3 : arg2) || {};
27
- var stateless = options.stateless;
28
- var _useState = (0, _react.useState)(hasInitialEntity && !stateless ? arg1 : null),
22
+ var _UseCaseModes = require("../../enums/UseCaseModes");
23
+ var _toMaxArguments3 = require("../../methods/toMaxArguments");
24
+ var _useChangeCallbackCollection = require("../useChangeCallbackCollection");
25
+ var useUseCase = function useUseCase() {
26
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
27
+ args[_key] = arguments[_key];
28
+ }
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),
29
37
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
30
38
  entityState = _useState2[0],
31
39
  setEntityState = _useState2[1];
32
- var deps = (hasInitialEntity ? arg4 : arg3) || [];
40
+ var usecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
41
+ var entityUseCase = usecase;
42
+ var mode = (0, _useConstant.useConstant)(unsafeMode);
33
43
  var depsKey = (0, _useCompareDeps.useCompareDeps)(deps);
34
44
  var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
35
- var usecase = (0, _useConstantFn.useConstantFn)(hasInitialEntity ? arg2 : arg1);
36
- var entityUseCase = usecase;
45
+ var isContextRoot = (0, _useConstant.useConstant)(typeof args[1] === 'function');
37
46
  var defaultContext = _defaultUseCaseContext.defaultUseCaseContext;
38
- var context = (0, _useUseCaseContext.useUseCaseContext)(entityUseCase, hasInitialEntity ? null : defaultContext);
39
- var _useContext = (0, _react.useContext)(context),
40
- contextEntity = _useContext.entity,
41
- _useContext$reducers = _useContext.reducers,
42
- contextEntityReducers = _useContext$reducers === void 0 ? null : _useContext$reducers,
43
- contextOptionsRefCollection = _useContext.optionsRefCollection;
44
- // 只有 `contextOptionsRefCollection` 是可控的,是当前 `hook` 生成的,所以用其来判断最保险
45
- var hasContextOptionsRefCollection = (0, _typeof2["default"])(contextOptionsRefCollection) === 'object';
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,
52
+ _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;
46
56
  // 是否需要初始化根 `redurcers`
47
- var isRoot = hasInitialEntity || !hasContextOptionsRefCollection;
57
+ var isRoot = isContextRoot || !hasContextValueGetter;
48
58
  // 是否为上下文模式
49
- var isContextMode = hasInitialEntity || hasContextOptionsRefCollection;
50
- // 获取 `optionsRefCollection`
51
- var optionsRefCollection = (0, _useOptionsRefCollection.useOptionsRefCollection)(isRoot, contextOptionsRefCollection || null, options);
59
+ var isContextMode = isContextRoot || hasContextValueGetter;
60
+ var changeCallbackCollection = (0, _useChangeCallbackCollection.useChangeCallbackCollection)(isRoot, contextChangeCallbackCollection, options);
52
61
  var entity = (0, _ahooks.useCreation)(function () {
53
- if (!hasInitialEntity) {
62
+ if (!isContextRoot) {
54
63
  return contextEntity;
55
64
  }
56
- return (0, _getRootEntity.getRootEntity)(entityState, arg1, stateless);
57
- }, [hasInitialEntity, contextEntity, stateless, entityState, arg1]);
65
+ return (0, _getRootEntity.getRootEntity)(entityState, unsafeEntity, mode);
66
+ }, [isContextRoot, contextEntity, mode, entityState, unsafeEntity]);
58
67
  var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
59
- if (!stateless) {
68
+ if ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
60
69
  setEntityState(newEntity);
61
70
  }
62
- (0, _triggerCallbacks.triggerCallbacks)(optionsRefCollection, newEntity, oldEntity);
71
+ (0, _triggerCallbacks.triggerCallbacks)(changeCallbackCollection, newEntity, oldEntity);
63
72
  });
64
73
  var createRootEntityReducers = (0, _ahooks.useMemoizedFn)(function () {
65
74
  var initOptions = options;
@@ -70,11 +79,11 @@ var useUseCase = function useUseCase(arg1, arg2, arg3, arg4) {
70
79
  });
71
80
  var rootEntityReducers = (0, _ahooks.useCreation)(function () {
72
81
  void depsKey;
73
- if (!hasInitialEntity) {
82
+ if (!isContextRoot) {
74
83
  return null;
75
84
  }
76
85
  return createRootEntityReducers();
77
- }, [hasInitialEntity, depsKey, createRootEntityReducers]);
86
+ }, [isContextRoot, depsKey, createRootEntityReducers]);
78
87
  var entityReducers = (0, _ahooks.useCreation)(function () {
79
88
  return rootEntityReducers || contextEntityReducers || {};
80
89
  }, [rootEntityReducers, contextEntityReducers]);
@@ -85,11 +94,11 @@ var useUseCase = function useUseCase(arg1, arg2, arg3, arg4) {
85
94
  }
86
95
  return createReducers();
87
96
  }, [isContextMode, depsKey, createReducers]);
88
- var Provider = (0, _useProvider.useProvider)(context, entity, entityReducers, optionsRefCollection);
97
+ var Provider = (0, _useProvider.useProvider)(context, mode, entity, entityReducers, changeCallbackCollection);
89
98
  var createCoreCollection = (0, _ahooks.useMemoizedFn)(function (coreEntity, coreReducers) {
90
99
  return [coreEntity, (0, _cacheReducerCalls.cacheReducerCalls)(coreReducers, function () {
91
100
  return isRenderingRef.current;
92
- }), hasInitialEntity ? Provider : null];
101
+ }), isContextRoot ? Provider : null];
93
102
  });
94
103
  return (0, _ahooks.useCreation)(function () {
95
104
  if (isContextMode) {