@mic-rexjs/usecases-react 1.8.0 → 2.0.2

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 (73) 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/useCaseContextReferenceMap/index.d.ts +1 -0
  7. package/es/configs/useCaseContextReferenceMap/index.js +1 -0
  8. package/es/configs/useCaseContextReferenceMap/types.d.ts +8 -0
  9. package/es/enums/UseCaseModes/index.d.ts +6 -0
  10. package/es/enums/UseCaseModes/index.js +7 -0
  11. package/es/hooks/useChangeCallbackCollection/index.d.ts +3 -0
  12. package/es/hooks/useChangeCallbackCollection/index.js +29 -0
  13. package/es/hooks/useGlobalUseCase/index.d.ts +2 -0
  14. package/es/hooks/useGlobalUseCase/index.js +11 -0
  15. package/es/hooks/useGlobalUseCase/index.test.js +71 -0
  16. package/es/hooks/useGlobalUseCase/types.d.ts +12 -0
  17. package/es/hooks/useGlobalUseCase/types.js +1 -0
  18. package/es/hooks/useProvider/index.d.ts +3 -5
  19. package/es/hooks/useProvider/index.js +25 -17
  20. package/es/hooks/useStatelessUseCase/index.d.ts +2 -0
  21. package/es/hooks/useStatelessUseCase/index.js +8 -0
  22. package/es/hooks/useStatelessUseCase/index.test.d.ts +1 -0
  23. package/es/hooks/useStatelessUseCase/index.test.js +75 -0
  24. package/es/hooks/useStatelessUseCase/types.d.ts +5 -0
  25. package/es/hooks/useStatelessUseCase/types.js +1 -0
  26. package/es/hooks/useUseCase/index.js +27 -29
  27. package/es/hooks/useUseCase/index.test.js +243 -207
  28. package/es/hooks/useUseCase/types.d.ts +55 -8
  29. package/es/hooks/useUseCaseContext/index.d.ts +3 -3
  30. package/es/hooks/useUseCaseContext/index.js +35 -6
  31. package/es/hooks/useUseCaseContext/index.test.d.ts +1 -0
  32. package/es/hooks/useUseCaseContext/index.test.js +60 -0
  33. package/es/index.d.ts +2 -0
  34. package/es/index.js +2 -0
  35. package/es/methods/getRootEntity/index.d.ts +2 -1
  36. package/es/methods/getRootEntity/index.js +6 -5
  37. package/es/methods/initEntityReducers/index.js +2 -3
  38. package/es/methods/toMaxArguments/index.d.ts +3 -0
  39. package/es/methods/toMaxArguments/index.js +28 -0
  40. package/es/methods/triggerCallbacks/index.d.ts +2 -3
  41. package/es/methods/triggerCallbacks/index.js +3 -12
  42. package/lib/configs/defaultUseCaseContext/index.js +1 -1
  43. package/lib/configs/useCaseContextReferenceMap/index.js +8 -0
  44. package/lib/enums/UseCaseModes/index.js +14 -0
  45. package/lib/hooks/useChangeCallbackCollection/index.js +37 -0
  46. package/lib/hooks/useGlobalUseCase/index.js +25 -0
  47. package/lib/hooks/useGlobalUseCase/index.test.js +78 -0
  48. package/lib/hooks/useProvider/index.js +30 -24
  49. package/lib/hooks/useStatelessUseCase/index.js +22 -0
  50. package/lib/hooks/useStatelessUseCase/index.test.js +78 -0
  51. package/lib/hooks/useStatelessUseCase/types.js +5 -0
  52. package/lib/hooks/useUseCase/index.js +40 -31
  53. package/lib/hooks/useUseCase/index.test.js +337 -288
  54. package/lib/hooks/useUseCaseContext/index.js +37 -6
  55. package/lib/hooks/useUseCaseContext/index.test.js +75 -0
  56. package/lib/index.js +15 -1
  57. package/lib/methods/getRootEntity/index.js +6 -5
  58. package/lib/methods/initEntityReducers/index.js +3 -6
  59. package/lib/methods/toMaxArguments/index.js +25 -0
  60. package/lib/methods/triggerCallbacks/index.js +3 -13
  61. package/package.json +3 -3
  62. package/es/configs/usecaseContextMap/index.d.ts +0 -1
  63. package/es/configs/usecaseContextMap/index.js +0 -1
  64. package/es/configs/usecaseContextMap/types.d.ts +0 -7
  65. package/es/hooks/useOptionsRefCollection/index.d.ts +0 -3
  66. package/es/hooks/useOptionsRefCollection/index.js +0 -22
  67. package/es/hooks/useOptionsRefCollection/types.d.ts +0 -2
  68. package/lib/configs/usecaseContextMap/index.js +0 -8
  69. package/lib/hooks/useOptionsRefCollection/index.js +0 -29
  70. /package/es/configs/{usecaseContextMap → useCaseContextReferenceMap}/types.js +0 -0
  71. /package/es/hooks/{useOptionsRefCollection/types.js → useGlobalUseCase/index.test.d.ts} +0 -0
  72. /package/lib/configs/{usecaseContextMap → useCaseContextReferenceMap}/types.js +0 -0
  73. /package/lib/hooks/{useOptionsRefCollection → useGlobalUseCase}/types.js +0 -0
@@ -1,17 +1,46 @@
1
1
  import { useConstant } from '../useConstant';
2
- import { usecaseContextMap } from '../../configs/usecaseContextMap';
2
+ import { usecaseContextReferenceMap } from '../../configs/useCaseContextReferenceMap';
3
3
  import { createContext } from 'react';
4
+ import { useUnmount } from 'ahooks';
4
5
  export const useUseCaseContext = (usecase, defaultContext) => {
5
- return useConstant(() => {
6
- const map = usecaseContextMap;
6
+ const map = usecaseContextReferenceMap;
7
+ const context = useConstant(() => {
7
8
  if (map.has(usecase)) {
8
- return map.get(usecase);
9
+ const reference = map.get(usecase);
10
+ const { value, times } = reference;
11
+ map.set(usecase, {
12
+ value,
13
+ times: times + 1,
14
+ });
15
+ return value;
9
16
  }
10
17
  if (defaultContext) {
11
18
  return defaultContext;
12
19
  }
13
- const ctx = createContext({});
14
- map.set(usecase, ctx);
20
+ const ctx = createContext(null);
21
+ map.set(usecase, {
22
+ value: ctx,
23
+ times: 1,
24
+ });
15
25
  return ctx;
16
26
  });
27
+ useUnmount(() => {
28
+ if (!map.has(usecase)) {
29
+ return;
30
+ }
31
+ const reference = map.get(usecase);
32
+ const { value, times } = reference;
33
+ if (context !== value) {
34
+ return;
35
+ }
36
+ if (times === 1) {
37
+ map.delete(usecase);
38
+ return;
39
+ }
40
+ map.set(usecase, {
41
+ value,
42
+ times: times - 1,
43
+ });
44
+ });
45
+ return context;
17
46
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,60 @@
1
+ import { describe, expect, test } from '@jest/globals';
2
+ import { renderHook } from '@testing-library/react';
3
+ import { useUseCaseContext } from '.';
4
+ import { objectUseCase } from '@mic-rexjs/usecases';
5
+ import { defaultUseCaseContext } from '../../configs/defaultUseCaseContext';
6
+ import { usecaseContextReferenceMap } from '../../configs/useCaseContextReferenceMap';
7
+ const testUseCase = () => {
8
+ return objectUseCase();
9
+ };
10
+ describe('useUseCaseContext', () => {
11
+ test('should return the default context if map has not save a usecase and provide a default context', () => {
12
+ const defaultContext = defaultUseCaseContext;
13
+ const { result } = renderHook(() => {
14
+ return useUseCaseContext(testUseCase, defaultContext);
15
+ });
16
+ const { current } = result;
17
+ expect(current).toBe(defaultUseCaseContext);
18
+ });
19
+ test('should return a new context if map has not save a usecase and does not provide a default context', () => {
20
+ const { result } = renderHook(() => {
21
+ return useUseCaseContext(testUseCase, null);
22
+ });
23
+ const { current } = result;
24
+ expect(typeof current).toBe('object');
25
+ });
26
+ test.each([void 0, null, defaultUseCaseContext])('should return the existing context if map has save a usecase already', (defaultContext) => {
27
+ const { result } = renderHook(() => {
28
+ return useUseCaseContext(testUseCase) === useUseCaseContext(testUseCase, defaultContext);
29
+ });
30
+ const { current: isSame } = result;
31
+ expect(isSame).toBe(true);
32
+ });
33
+ test('check context reference times when mount/unmount a usecase', () => {
34
+ const { unmount: unmount1 } = renderHook(() => {
35
+ useUseCaseContext(testUseCase);
36
+ });
37
+ const { times: times1 } = usecaseContextReferenceMap.get(testUseCase);
38
+ const { unmount: unmount2, rerender: rerender2 } = renderHook(() => {
39
+ useUseCaseContext(testUseCase);
40
+ useUseCaseContext(testUseCase);
41
+ });
42
+ const { times: times2 } = usecaseContextReferenceMap.get(testUseCase);
43
+ expect(times1).toBe(1);
44
+ expect(times2).toBe(3);
45
+ unmount1();
46
+ const { times: times3 } = usecaseContextReferenceMap.get(testUseCase);
47
+ expect(times3).toBe(2);
48
+ unmount2();
49
+ const hasSaved = usecaseContextReferenceMap.has(testUseCase);
50
+ expect(hasSaved).toBe(false);
51
+ });
52
+ test('context reference times should not change when rerender hooks', () => {
53
+ const { rerender } = renderHook(() => {
54
+ useUseCaseContext(testUseCase);
55
+ });
56
+ rerender();
57
+ const { times } = usecaseContextReferenceMap.get(testUseCase);
58
+ expect(times).toBe(1);
59
+ });
60
+ });
package/es/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { UseCaseFragment } from './components/UseCaseFragment';
2
2
  export { useUseCase } from './hooks/useUseCase';
3
+ export { useGlobalUseCase } from './hooks/useGlobalUseCase';
4
+ export { useStatelessUseCase } from './hooks/useStatelessUseCase';
3
5
  export type { CoreCollection } from './hooks/useUseCase/types';
4
6
  export type { UseCaseHookOptions } from './hooks/useUseCase/types';
5
7
  export type { UseCaseProvider } from './hooks/useProvider/types';
package/es/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export { UseCaseFragment } from './components/UseCaseFragment';
2
2
  export { useUseCase } from './hooks/useUseCase';
3
+ export { useGlobalUseCase } from './hooks/useGlobalUseCase';
4
+ export { useStatelessUseCase } from './hooks/useStatelessUseCase';
@@ -1,2 +1,3 @@
1
+ import { UseCaseModes } from '../../enums/UseCaseModes';
1
2
  import { EntityGetter } from '../../hooks/useUseCase/types';
2
- export declare const getRootEntity: <T>(entityState: T, entityArg: T | EntityGetter<T>, stateless?: boolean) => T;
3
+ export declare const getRootEntity: <T>(entityState: T, unsafeEntity: T | EntityGetter<T>, mode: UseCaseModes) => T;
@@ -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,6 @@
1
- import { entityReducerUseCase } from '@mic-rexjs/usecases';
1
+ import { createEntityReducers } from '@mic-rexjs/usecases';
2
2
  export const initEntityReducers = (entity, usecase, options, onEntityChange) => {
3
- const { createEntityReducers } = entityReducerUseCase();
4
- const { stateless, watch, onChange, options: usecaseOptions, ...restUseCaseOptions } = options;
3
+ const { watch, onChange, options: usecaseOptions, ...restUseCaseOptions } = options;
5
4
  return createEntityReducers(entity, usecase, {
6
5
  ...restUseCaseOptions,
7
6
  ...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,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usecaseContextReferenceMap = void 0;
7
+ var usecaseContextReferenceMap = new Map();
8
+ exports.usecaseContextReferenceMap = usecaseContextReferenceMap;
@@ -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
+ });