@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.
- package/README.md +1 -1
- package/dist/index.min.js +1 -1
- package/es/configs/defaultUseCaseContext/index.d.ts +2 -3
- package/es/configs/defaultUseCaseContext/index.js +1 -1
- package/es/configs/defaultUseCaseContext/types.d.ts +11 -3
- package/es/configs/usecaseContextMap/types.d.ts +2 -5
- package/es/enums/UseCaseModes/index.d.ts +6 -0
- package/es/enums/UseCaseModes/index.js +7 -0
- package/es/hooks/useChangeCallbackCollection/index.d.ts +3 -0
- package/es/hooks/useChangeCallbackCollection/index.js +29 -0
- package/es/hooks/useGlobalUseCase/index.d.ts +2 -0
- package/es/hooks/useGlobalUseCase/index.js +11 -0
- package/es/hooks/useGlobalUseCase/index.test.js +71 -0
- package/es/hooks/useGlobalUseCase/types.d.ts +12 -0
- package/es/hooks/useGlobalUseCase/types.js +1 -0
- package/es/hooks/useProvider/index.d.ts +3 -5
- package/es/hooks/useProvider/index.js +25 -17
- package/es/hooks/useStatelessUseCase/index.d.ts +2 -0
- package/es/hooks/useStatelessUseCase/index.js +8 -0
- package/es/hooks/useStatelessUseCase/index.test.d.ts +1 -0
- package/es/hooks/useStatelessUseCase/index.test.js +75 -0
- package/es/hooks/useStatelessUseCase/types.d.ts +5 -0
- package/es/hooks/useStatelessUseCase/types.js +1 -0
- package/es/hooks/useUseCase/index.js +27 -29
- package/es/hooks/useUseCase/index.test.js +243 -207
- package/es/hooks/useUseCase/types.d.ts +55 -8
- package/es/hooks/useUseCaseContext/index.d.ts +2 -2
- package/es/hooks/useUseCaseContext/index.js +1 -1
- package/es/index.d.ts +2 -0
- package/es/index.js +2 -0
- package/es/methods/getRootEntity/index.d.ts +2 -1
- package/es/methods/getRootEntity/index.js +6 -5
- package/es/methods/initEntityReducers/index.js +1 -1
- package/es/methods/toMaxArguments/index.d.ts +3 -0
- package/es/methods/toMaxArguments/index.js +28 -0
- package/es/methods/triggerCallbacks/index.d.ts +2 -3
- package/es/methods/triggerCallbacks/index.js +3 -12
- package/lib/configs/defaultUseCaseContext/index.js +1 -1
- package/lib/enums/UseCaseModes/index.js +14 -0
- package/lib/hooks/useChangeCallbackCollection/index.js +37 -0
- package/lib/hooks/useGlobalUseCase/index.js +25 -0
- package/lib/hooks/useGlobalUseCase/index.test.js +78 -0
- package/lib/hooks/useProvider/index.js +30 -24
- package/lib/hooks/useStatelessUseCase/index.js +22 -0
- package/lib/hooks/useStatelessUseCase/index.test.js +78 -0
- package/lib/hooks/useStatelessUseCase/types.js +5 -0
- package/lib/hooks/useUseCase/index.js +40 -31
- package/lib/hooks/useUseCase/index.test.js +337 -288
- package/lib/hooks/useUseCaseContext/index.js +1 -1
- package/lib/index.js +15 -1
- package/lib/methods/getRootEntity/index.js +6 -5
- package/lib/methods/initEntityReducers/index.js +2 -3
- package/lib/methods/toMaxArguments/index.js +25 -0
- package/lib/methods/triggerCallbacks/index.js +3 -13
- package/package.json +1 -1
- package/es/hooks/useOptionsRefCollection/index.d.ts +0 -3
- package/es/hooks/useOptionsRefCollection/index.js +0 -22
- package/es/hooks/useOptionsRefCollection/types.d.ts +0 -2
- package/lib/hooks/useOptionsRefCollection/index.js +0 -29
- /package/es/hooks/{useOptionsRefCollection/types.js → useGlobalUseCase/index.test.d.ts} +0 -0
- /package/lib/hooks/{useOptionsRefCollection → useGlobalUseCase}/types.js +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
|
6
|
-
return
|
|
6
|
+
if (typeof unsafeEntity === 'function') {
|
|
7
|
+
return unsafeEntity();
|
|
7
8
|
}
|
|
8
|
-
return
|
|
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 {
|
|
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 {
|
|
2
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
|
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 =
|
|
9
|
-
var _useConstant = require("../useConstant");
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
9
|
var _ahooks = require("ahooks");
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
+
});
|
|
@@ -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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var
|
|
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
|
|
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
|
|
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,
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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 =
|
|
57
|
+
var isRoot = isContextRoot || !hasContextValueGetter;
|
|
48
58
|
// 是否为上下文模式
|
|
49
|
-
var isContextMode =
|
|
50
|
-
|
|
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 (!
|
|
62
|
+
if (!isContextRoot) {
|
|
54
63
|
return contextEntity;
|
|
55
64
|
}
|
|
56
|
-
return (0, _getRootEntity.getRootEntity)(entityState,
|
|
57
|
-
}, [
|
|
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 (
|
|
68
|
+
if ((mode & _UseCaseModes.UseCaseModes.Stateless) !== _UseCaseModes.UseCaseModes.Stateless) {
|
|
60
69
|
setEntityState(newEntity);
|
|
61
70
|
}
|
|
62
|
-
(0, _triggerCallbacks.triggerCallbacks)(
|
|
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 (!
|
|
82
|
+
if (!isContextRoot) {
|
|
74
83
|
return null;
|
|
75
84
|
}
|
|
76
85
|
return createRootEntityReducers();
|
|
77
|
-
}, [
|
|
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,
|
|
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
|
-
}),
|
|
101
|
+
}), isContextRoot ? Provider : null];
|
|
93
102
|
});
|
|
94
103
|
return (0, _ahooks.useCreation)(function () {
|
|
95
104
|
if (isContextMode) {
|