@mic-rexjs/usecases-react 2.3.1 → 2.3.4
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/dist/index.min.js +1 -1
- package/es/components/UseCaseFragment/index.d.ts +1 -1
- package/es/components/UseCaseFragment/index.js +2 -2
- package/es/components/UseCaseFragment/types.d.ts +0 -2
- package/es/hooks/useCompareDeps/index.d.ts +1 -1
- package/es/hooks/useContextualItem/index.d.ts +1 -1
- package/es/hooks/useContextualItem/index.js +12 -4
- package/es/hooks/useEntity/index.d.ts +1 -1
- package/es/hooks/useEntity/index.js +6 -9
- package/es/hooks/useUseCase/index.js +12 -5
- package/es/hooks/useUseCase/index.test.js +89 -607
- package/es/hooks/useUseCase/types.d.ts +1 -15
- package/es/methods/captureCalls/index.d.ts +2 -0
- package/es/methods/captureCalls/index.js +14 -0
- package/es/methods/captureCalls/types.d.ts +4 -0
- package/es/methods/captureCalls/types.js +1 -0
- package/es/methods/initEntityReducers/index.js +1 -1
- package/lib/components/UseCaseFragment/index.js +0 -2
- package/lib/hooks/useContextualItem/index.js +11 -3
- package/lib/hooks/useEntity/index.js +6 -11
- package/lib/hooks/useUseCase/index.js +13 -4
- package/lib/hooks/useUseCase/index.test.js +234 -868
- package/lib/methods/captureCalls/index.js +23 -0
- package/lib/methods/captureCalls/types.js +5 -0
- package/lib/methods/initEntityReducers/index.js +2 -3
- package/package.json +3 -3
- package/es/hooks/useMemoizedCall/index.d.ts +0 -2
- package/es/hooks/useMemoizedCall/index.js +0 -15
- package/es/methods/triggerCallbacks/index.d.ts +0 -2
- package/es/methods/triggerCallbacks/index.js +0 -5
- package/es/methods/triggerWatchers/index.d.ts +0 -2
- package/es/methods/triggerWatchers/index.js +0 -14
- package/lib/hooks/useMemoizedCall/index.js +0 -21
- package/lib/methods/triggerCallbacks/index.js +0 -11
- package/lib/methods/triggerWatchers/index.js +0 -28
|
@@ -19,26 +19,12 @@ export type CoreCollection<T, TEntityReducers extends EntityReducers<T>> = RootC
|
|
|
19
19
|
export interface EntityGetter<T> {
|
|
20
20
|
(): T;
|
|
21
21
|
}
|
|
22
|
-
export interface EntityWatchEvent<T, TValue = unknown> {
|
|
23
|
-
fieldPaths: string[];
|
|
24
|
-
newEntity: T;
|
|
25
|
-
newValue: TValue;
|
|
26
|
-
oldEntity: T;
|
|
27
|
-
oldValue: TValue;
|
|
28
|
-
}
|
|
29
|
-
export interface EntityWatcher<T, TValue = unknown> {
|
|
30
|
-
(event: EntityWatchEvent<T, TValue>): void;
|
|
31
|
-
}
|
|
32
22
|
export type PropertyPath<T, K extends keyof T = keyof T & string> = K extends infer TKey ? `${TKey & (string | number)}${'' | DotAccessorFieldPath<T[TKey & keyof T]>}` : never;
|
|
33
23
|
export type DotAccessorFieldPath<T> = T extends unknown[] ? '.length' | `${'' | `.${number}`}${DotAccessorFieldPath<T[number]>}` : T extends object ? `.${PropertyPath<T>}` : '';
|
|
34
24
|
export type FieldPath<T> = T extends unknown[] ? FieldPath<T[number]> | 'length' : T extends object ? PropertyPath<T> : never;
|
|
35
25
|
export type ExtractPropertyType<T, TPath> = TPath extends `${infer TKey}.${infer TSubPath}` ? T extends unknown[] ? ExtractPropertyType<T[number], TKey extends `${number}` ? TSubPath : TPath> : ExtractPropertyType<T[TKey & keyof T], TSubPath> : T extends unknown[] ? TPath extends 'length' ? T[TPath] : TPath extends `${number}` ? T[number] : ExtractPropertyType<T[number], TPath> : T[TPath & keyof T];
|
|
36
26
|
export type ExtractFieldType<T, TPath> = TPath extends `${infer TKey}.${infer TSubProperty}` ? ExtractPropertyType<T[TKey & keyof T], TSubProperty> : T[TPath & keyof T];
|
|
37
|
-
export type EntityWatchMap<T> = {
|
|
38
|
-
[K in FieldPath<T>]?: EntityWatcher<T, ExtractFieldType<T, K>>;
|
|
39
|
-
};
|
|
40
27
|
export interface UseCaseHookContextualOptions<T> {
|
|
41
|
-
watch?: EntityWatchMap<T>;
|
|
42
28
|
onChange?(newEntity: T, oldEntity: T): void;
|
|
43
29
|
}
|
|
44
30
|
export interface UseCaseHookOwnOptions<T, TUseCaseOptions extends object> extends UseCaseHookContextualOptions<T> {
|
|
@@ -49,7 +35,7 @@ export interface ReducersHook {
|
|
|
49
35
|
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T & SymbolSetTarget<NonEntitySymbolSet>, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): T;
|
|
50
36
|
}
|
|
51
37
|
export interface ContextualCoreCollectionHook {
|
|
52
|
-
<T, TEntityReducers extends EntityReducers<T>>(usecase: EntityUseCase<T, TEntityReducers> & UseCase<EntityReducers<T>>, options?: UseCaseHookContextualOptions<T
|
|
38
|
+
<T, TEntityReducers extends EntityReducers<T>>(usecase: EntityUseCase<T, TEntityReducers> & UseCase<EntityReducers<T>>, options?: UseCaseHookContextualOptions<T>, deps?: unknown[]): ContextualCoreCollection<T, TEntityReducers>;
|
|
53
39
|
}
|
|
54
40
|
export interface RootCoreCollectionHook {
|
|
55
41
|
<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> & UseCase<EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const captureCalls = (obj, callback) => {
|
|
2
|
+
const newObj = {};
|
|
3
|
+
Object.keys(obj).forEach((key) => {
|
|
4
|
+
const value = obj[key];
|
|
5
|
+
if (typeof value === 'function') {
|
|
6
|
+
newObj[key] = ((...args) => {
|
|
7
|
+
return callback(key, args);
|
|
8
|
+
});
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
newObj[key] = value;
|
|
12
|
+
});
|
|
13
|
+
return newObj;
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createEntityReducers } from '@mic-rexjs/usecases';
|
|
2
2
|
export const initEntityReducers = (usecase, store, options) => {
|
|
3
|
-
const {
|
|
3
|
+
const { onChange, options: usecaseOptions, ...restUseCaseOptions } = options;
|
|
4
4
|
return createEntityReducers(store, usecase, {
|
|
5
5
|
...restUseCaseOptions,
|
|
6
6
|
...usecaseOptions,
|
|
@@ -9,10 +9,8 @@ var _react = require("react");
|
|
|
9
9
|
var _useUseCase = require("../../hooks/useUseCase");
|
|
10
10
|
var UseCaseFragment = exports.UseCaseFragment = function UseCaseFragment(_ref) {
|
|
11
11
|
var usecase = _ref.usecase,
|
|
12
|
-
watch = _ref.watch,
|
|
13
12
|
onChange = _ref.onChange;
|
|
14
13
|
void (0, _useUseCase.useUseCase)(usecase, {
|
|
15
|
-
watch: watch,
|
|
16
14
|
onChange: onChange
|
|
17
15
|
});
|
|
18
16
|
return (0, _jsxRuntime.jsx)(_react.Fragment, {});
|
|
@@ -6,10 +6,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useContextualItem = void 0;
|
|
7
7
|
var _ahooks = require("ahooks");
|
|
8
8
|
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
9
|
-
var
|
|
9
|
+
var _cacheCall = require("../../methods/cacheCall");
|
|
10
10
|
var useContextualItem = exports.useContextualItem = function useContextualItem(contextItem, statuses, createFactory) {
|
|
11
|
-
var
|
|
12
|
-
var
|
|
11
|
+
var depsKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
|
12
|
+
var factoryRef = (0, _ahooks.useLatest)(createFactory);
|
|
13
|
+
var create = (0, _ahooks.useCreation)(function () {
|
|
14
|
+
void depsKey;
|
|
15
|
+
return (0, _cacheCall.cacheCall)(factoryRef.current, {
|
|
16
|
+
onCompare: function onCompare() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}, [depsKey, factoryRef]);
|
|
13
21
|
return (0, _ahooks.useCreation)(function () {
|
|
14
22
|
var rootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.RootEnabled) === _UseCaseStatuses.UseCaseStatuses.RootEnabled;
|
|
15
23
|
if (!rootEnabled && contextItem) {
|
|
@@ -12,15 +12,15 @@ var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
|
12
12
|
var _getRenderingEntity = require("../../methods/getRenderingEntity");
|
|
13
13
|
var _useContextualItem = require("../useContextualItem");
|
|
14
14
|
var _ahooks = require("ahooks");
|
|
15
|
-
var
|
|
16
|
-
var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, contextStore, options) {
|
|
15
|
+
var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, contextStore, options, depsKey) {
|
|
17
16
|
var _useState = (0, _react.useState)(rootEntity),
|
|
18
17
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
19
18
|
entityState = _useState2[0],
|
|
20
19
|
setEntityState = _useState2[1];
|
|
20
|
+
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
21
21
|
var contextEntity = contextStore ? contextStore.value : null;
|
|
22
22
|
var renderingEntity = (0, _getRenderingEntity.getRenderingEntity)(statuses, entityState, rootEntity, contextEntity);
|
|
23
|
-
var
|
|
23
|
+
var entityEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityEnabled;
|
|
24
24
|
var entityRootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
|
|
25
25
|
var store = (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
|
|
26
26
|
if (!entityRootEnabled) {
|
|
@@ -41,23 +41,18 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
41
41
|
store.value = renderingEntity;
|
|
42
42
|
}
|
|
43
43
|
(0, _react.useEffect)(function () {
|
|
44
|
-
if (
|
|
44
|
+
if (!entityEnabled) {
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
47
|
var onEntityChange = function onEntityChange(newEntity, oldEntity) {
|
|
48
|
-
var
|
|
49
|
-
onChange = _optionsRef$current.onChange,
|
|
50
|
-
watch = _optionsRef$current.watch;
|
|
51
|
-
if (watch) {
|
|
52
|
-
(0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
|
|
53
|
-
}
|
|
48
|
+
var onChange = optionsRef.current.onChange;
|
|
54
49
|
onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
|
|
55
50
|
};
|
|
56
51
|
store.watch(onEntityChange);
|
|
57
52
|
return function () {
|
|
58
53
|
store.unwatch(onEntityChange);
|
|
59
54
|
};
|
|
60
|
-
}, [
|
|
55
|
+
}, [entityEnabled, store, depsKey, optionsRef]);
|
|
61
56
|
return (0, _ahooks.useCreation)(function () {
|
|
62
57
|
return [renderingEntity, store];
|
|
63
58
|
}, [renderingEntity, store]);
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.useUseCase = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
8
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
10
|
var _ahooks = require("ahooks");
|
|
10
11
|
var _react = require("react");
|
|
@@ -20,6 +21,8 @@ var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
|
20
21
|
var _useEntity3 = require("../useEntity");
|
|
21
22
|
var _useContextualItem = require("../useContextualItem");
|
|
22
23
|
var _cacheCalls = require("../../methods/cacheCalls");
|
|
24
|
+
var _useCompareDeps = require("../useCompareDeps");
|
|
25
|
+
var _captureCalls = require("../../methods/captureCalls");
|
|
23
26
|
var useUseCase = exports.useUseCase = function useUseCase() {
|
|
24
27
|
var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
|
|
25
28
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
@@ -40,23 +43,29 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
40
43
|
var contextValue = (0, _react.useContext)(context);
|
|
41
44
|
var entityContextValue = contextValue;
|
|
42
45
|
var statuses = (0, _useUseCaseStatuses.useUseCaseStatuses)(argumentTypes, mode, contextValue);
|
|
46
|
+
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
47
|
+
var depsKey = (0, _useCompareDeps.useCompareDeps)(deps);
|
|
43
48
|
var _ref = contextValue || {},
|
|
44
49
|
_ref$reducers = _ref.reducers,
|
|
45
50
|
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
|
|
46
51
|
var _ref2 = entityContextValue || {},
|
|
47
52
|
_ref2$store = _ref2.store,
|
|
48
53
|
contextStore = _ref2$store === void 0 ? null : _ref2$store;
|
|
49
|
-
var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options),
|
|
54
|
+
var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options, depsKey),
|
|
50
55
|
_useEntity2 = (0, _slicedToArray2["default"])(_useEntity, 2),
|
|
51
56
|
entity = _useEntity2[0],
|
|
52
57
|
store = _useEntity2[1];
|
|
53
58
|
var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
|
|
59
|
+
var opts = (0, _captureCalls.captureCalls)(options, function (key, callArgs) {
|
|
60
|
+
var _optionsRef$current$k, _optionsRef$current;
|
|
61
|
+
return (_optionsRef$current$k = (_optionsRef$current = optionsRef.current)[key]) === null || _optionsRef$current$k === void 0 ? void 0 : _optionsRef$current$k.call.apply(_optionsRef$current$k, [_optionsRef$current].concat((0, _toConsumableArray2["default"])(callArgs)));
|
|
62
|
+
});
|
|
54
63
|
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|
|
55
|
-
return usecase(
|
|
64
|
+
return usecase(opts);
|
|
56
65
|
}
|
|
57
|
-
var hookOptions =
|
|
66
|
+
var hookOptions = opts;
|
|
58
67
|
return (0, _initEntityReducers.initEntityReducers)(entityUseCase, store, hookOptions);
|
|
59
|
-
},
|
|
68
|
+
}, depsKey);
|
|
60
69
|
var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
|
|
61
70
|
return (0, _ahooks.useCreation)(function () {
|
|
62
71
|
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|