@mic-rexjs/usecases-react 2.11.2 → 2.12.1
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/SafeUseCaseFragment/index.js +17 -7
- package/es/components/SafeUseCaseFragment/types.js +1 -1
- package/es/components/UseCaseFragment/index.js +16 -6
- package/es/components/UseCaseFragment/types.js +1 -1
- package/es/entities/matchPropertyFailedResult/types.js +1 -1
- package/es/enums/ArgumentTypes/index.js +3 -3
- package/es/enums/Statuses/index.js +22 -22
- package/es/hooks/useArgumentTypes/index.js +12 -10
- package/es/hooks/useConstant/index.js +7 -4
- package/es/hooks/useConstant/types.js +1 -1
- package/es/hooks/useConstantEntityReducers/index.js +4 -4
- package/es/hooks/useConstantFn/index.js +9 -6
- package/es/hooks/useConstantReducers/index.js +4 -4
- package/es/hooks/useContext/index.js +14 -11
- package/es/hooks/useContext/index.test.js +50 -44
- package/es/hooks/useContextualItem/index.js +27 -25
- package/es/hooks/useContextualItem/types.js +1 -1
- package/es/hooks/useDepsKey/index.js +9 -5
- package/es/hooks/useEntity/index.js +65 -61
- package/es/hooks/useFullArguments/index.js +12 -17
- package/es/hooks/useFullArguments/types.js +1 -1
- package/es/hooks/useIsRenderingRef/index.js +6 -6
- package/es/hooks/useProvider/index.js +21 -15
- package/es/hooks/useProvider/types.js +1 -1
- package/es/hooks/useRuntimeEntity/index.js +18 -16
- package/es/hooks/useStatuses/index.js +19 -19
- package/es/hooks/useUseCase/index.js +78 -57
- package/es/hooks/useUseCase/index.test.js +2402 -1701
- package/es/hooks/useUseCase/types.d.ts +11 -8
- package/es/hooks/useUseCase/types.js +1 -1
- package/es/index.js +1 -1
- package/es/methods/triggerWatchers/index.js +12 -7
- package/es/types.js +1 -1
- package/es/usecases/contextUseCase/index.js +70 -65
- package/es/usecases/contextUseCase/types.js +1 -1
- package/es/usecases/methodUseCase/index.js +69 -52
- package/es/usecases/methodUseCase/types.js +1 -1
- package/es/usecases/valueUseCase/index.js +175 -167
- package/es/usecases/valueUseCase/types.js +1 -1
- package/lib/components/UseCaseFragment/index.js +1 -1
- package/lib/hooks/useUseCase/index.js +5 -8
- package/lib/hooks/useUseCase/index.test.js +198 -104
- package/lib/methods/triggerWatchers/index.js +9 -7
- package/lib/usecases/valueUseCase/index.js +1 -1
- package/package.json +3 -3
|
@@ -7,16 +7,19 @@ import { ContextualEntityReducers } from '../../usecases/contextUseCase/types';
|
|
|
7
7
|
export interface NonEntitySymbolSet extends SymbolSet {
|
|
8
8
|
entity?: never;
|
|
9
9
|
}
|
|
10
|
-
export type
|
|
10
|
+
export type CoreCollection<T, TEntityReducers extends EntityReducerMap<T>> = [
|
|
11
11
|
entity: T,
|
|
12
12
|
reducers: ContextualEntityReducers<T, TEntityReducers>,
|
|
13
13
|
Provider: UseCaseProvider
|
|
14
14
|
];
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated 请用 `CoreCollection` 代替
|
|
17
|
+
*/
|
|
18
|
+
export type RootCoreCollection<T, TEntityReducers extends EntityReducerMap<T>> = CoreCollection<T, TEntityReducers>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated 请用 `CoreCollection` 代替
|
|
21
|
+
*/
|
|
22
|
+
export type ContextualCoreCollection<T, TEntityReducers extends EntityReducerMap<T>> = CoreCollection<T, TEntityReducers>;
|
|
20
23
|
export interface EntityGetter<T, TDependencies extends Dependencies = Dependencies> {
|
|
21
24
|
(entity: T | undefined, changedDeps: TDependencies): T;
|
|
22
25
|
}
|
|
@@ -51,10 +54,10 @@ export interface ReducersHook {
|
|
|
51
54
|
<T extends ReducerMap, TUseCaseOptions extends object = object>(usecase: UseCase<T & SymbolSetTarget<NonEntitySymbolSet>, TUseCaseOptions>, options?: TUseCaseOptions, deps?: Dependencies): T;
|
|
52
55
|
}
|
|
53
56
|
export interface ContextualCoreCollectionHook {
|
|
54
|
-
<T, TEntityReducers extends EntityReducerMap<T>>(usecase: InferableEntityUseCase<T, TEntityReducers>, options?: UseCaseHookContextualOptions<T>, deps?: Dependencies):
|
|
57
|
+
<T, TEntityReducers extends EntityReducerMap<T>>(usecase: InferableEntityUseCase<T, TEntityReducers>, options?: UseCaseHookContextualOptions<T>, deps?: Dependencies): CoreCollection<T, TEntityReducers>;
|
|
55
58
|
}
|
|
56
59
|
export interface RootCoreCollectionHook {
|
|
57
|
-
<T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object, TDependencies extends Dependencies = Dependencies>(entity: T | EntityGetter<T, TDependencies>, usecase: InferableEntityUseCase<T, TEntityReducers & EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: TDependencies):
|
|
60
|
+
<T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object, TDependencies extends Dependencies = Dependencies>(entity: T | EntityGetter<T, TDependencies>, usecase: InferableEntityUseCase<T, TEntityReducers & EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: TDependencies): CoreCollection<T, EntityReducers<T, TEntityReducers>>;
|
|
58
61
|
}
|
|
59
62
|
export interface CoreCollectionHook extends ContextualCoreCollectionHook, RootCoreCollectionHook {
|
|
60
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
package/es/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { UseCaseFragment } from './components/UseCaseFragment';
|
|
2
|
-
export { useUseCase } from './hooks/useUseCase';
|
|
2
|
+
export { useUseCase } from './hooks/useUseCase';
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
1
2
|
import { valueUseCase } from '../../usecases/valueUseCase';
|
|
2
3
|
export const triggerWatchers = (watch, newEntity, oldEntity) => {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
const _valueUseCase = valueUseCase(),
|
|
5
|
+
matchProperty = _valueUseCase.matchProperty;
|
|
6
|
+
for (const _ref of Object.entries(watch)) {
|
|
7
|
+
var _ref2 = _slicedToArray(_ref, 2);
|
|
8
|
+
const fieldPath = _ref2[0];
|
|
9
|
+
const watcher = _ref2[1];
|
|
10
|
+
matchProperty(oldEntity, newEntity, fieldPath, result => {
|
|
11
|
+
watcher(result);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
};
|
package/es/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
@@ -3,71 +3,76 @@ import { createContext } from 'react';
|
|
|
3
3
|
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
4
4
|
import { Statuses } from '../../enums/Statuses';
|
|
5
5
|
export const contextUseCase = createUseCase(() => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return {
|
|
12
|
-
store,
|
|
13
|
-
reducers,
|
|
14
|
-
statuses,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
return { reducers, statuses };
|
|
18
|
-
};
|
|
19
|
-
const getUseCaseContext = (usecase) => {
|
|
20
|
-
if (!referenceMap.has(usecase)) {
|
|
21
|
-
return defaultUseCaseContext;
|
|
22
|
-
}
|
|
23
|
-
const { value } = referenceMap.get(usecase);
|
|
24
|
-
return value;
|
|
25
|
-
};
|
|
26
|
-
const registerUseCase = (usecase, argumentTypes) => {
|
|
27
|
-
if (referenceMap.has(usecase)) {
|
|
28
|
-
const reference = referenceMap.get(usecase);
|
|
29
|
-
const { value, times } = reference;
|
|
30
|
-
referenceMap.set(usecase, {
|
|
31
|
-
value,
|
|
32
|
-
times: times + 1,
|
|
33
|
-
});
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
if ((argumentTypes & ArgumentTypes.Entity) !== ArgumentTypes.Entity) {
|
|
37
|
-
return defaultUseCaseContext;
|
|
38
|
-
}
|
|
39
|
-
const context = createContext(null);
|
|
40
|
-
referenceMap.set(usecase, {
|
|
41
|
-
value: context,
|
|
42
|
-
times: 1,
|
|
43
|
-
});
|
|
44
|
-
return context;
|
|
45
|
-
};
|
|
46
|
-
const unregisterUseCase = (usecase, argumentTypes) => {
|
|
47
|
-
if ((argumentTypes & ArgumentTypes.Entity) !== ArgumentTypes.Entity) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
if (!referenceMap.has(usecase)) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
const reference = referenceMap.get(usecase);
|
|
54
|
-
const { value, times } = reference;
|
|
55
|
-
if (times === 1) {
|
|
56
|
-
referenceMap.delete(usecase);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
referenceMap.set(usecase, {
|
|
60
|
-
value,
|
|
61
|
-
times: times - 1,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return true;
|
|
65
|
-
};
|
|
6
|
+
const referenceMap = new Map();
|
|
7
|
+
const defaultUseCaseContext = createContext(null);
|
|
8
|
+
return () => {
|
|
9
|
+
const createContextValue = (store, reducers, statuses) => {
|
|
10
|
+
if ((statuses & Statuses.EntityEnabled) === Statuses.EntityEnabled) {
|
|
66
11
|
return {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
unregisterUseCase,
|
|
12
|
+
store,
|
|
13
|
+
reducers,
|
|
14
|
+
statuses
|
|
71
15
|
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
reducers,
|
|
19
|
+
statuses
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
const getUseCaseContext = usecase => {
|
|
23
|
+
if (!referenceMap.has(usecase)) {
|
|
24
|
+
return defaultUseCaseContext;
|
|
25
|
+
}
|
|
26
|
+
const _referenceMap$get = referenceMap.get(usecase),
|
|
27
|
+
value = _referenceMap$get.value;
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
const registerUseCase = (usecase, argumentTypes) => {
|
|
31
|
+
if (referenceMap.has(usecase)) {
|
|
32
|
+
const reference = referenceMap.get(usecase);
|
|
33
|
+
const value = reference.value,
|
|
34
|
+
times = reference.times;
|
|
35
|
+
referenceMap.set(usecase, {
|
|
36
|
+
value,
|
|
37
|
+
times: times + 1
|
|
38
|
+
});
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
if ((argumentTypes & ArgumentTypes.Entity) !== ArgumentTypes.Entity) {
|
|
42
|
+
return defaultUseCaseContext;
|
|
43
|
+
}
|
|
44
|
+
const context = createContext(null);
|
|
45
|
+
referenceMap.set(usecase, {
|
|
46
|
+
value: context,
|
|
47
|
+
times: 1
|
|
48
|
+
});
|
|
49
|
+
return context;
|
|
50
|
+
};
|
|
51
|
+
const unregisterUseCase = (usecase, argumentTypes) => {
|
|
52
|
+
if ((argumentTypes & ArgumentTypes.Entity) !== ArgumentTypes.Entity) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
if (!referenceMap.has(usecase)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const reference = referenceMap.get(usecase);
|
|
59
|
+
const value = reference.value,
|
|
60
|
+
times = reference.times;
|
|
61
|
+
if (times === 1) {
|
|
62
|
+
referenceMap.delete(usecase);
|
|
63
|
+
} else {
|
|
64
|
+
referenceMap.set(usecase, {
|
|
65
|
+
value,
|
|
66
|
+
times: times - 1
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
createContextValue,
|
|
73
|
+
getUseCaseContext,
|
|
74
|
+
registerUseCase,
|
|
75
|
+
unregisterUseCase
|
|
72
76
|
};
|
|
73
|
-
}
|
|
77
|
+
};
|
|
78
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
@@ -1,55 +1,72 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
1
2
|
import { valueUseCase } from '../valueUseCase';
|
|
2
3
|
export const methodUseCase = () => {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
4
|
+
const _valueUseCase = valueUseCase(),
|
|
5
|
+
isValueMatched = _valueUseCase.isValueMatched;
|
|
6
|
+
const cacheCall = (factory, options) => {
|
|
7
|
+
let cache;
|
|
8
|
+
const _ref = options || {},
|
|
9
|
+
_ref$onShouldCache = _ref.onShouldCache,
|
|
10
|
+
onShouldCache = _ref$onShouldCache === void 0 ? () => {
|
|
11
|
+
return true;
|
|
12
|
+
} : _ref$onShouldCache,
|
|
13
|
+
_ref$onCompare = _ref.onCompare,
|
|
14
|
+
onCompare = _ref$onCompare === void 0 ? (newArgs, oldArgs) => {
|
|
15
|
+
return isValueMatched(newArgs, oldArgs);
|
|
16
|
+
} : _ref$onCompare;
|
|
17
|
+
return function () {
|
|
18
|
+
const cacheable = onShouldCache();
|
|
19
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
20
|
+
args[_key] = arguments[_key];
|
|
21
|
+
}
|
|
22
|
+
if (cache && cacheable) {
|
|
23
|
+
const _cache = cache,
|
|
24
|
+
parameters = _cache.parameters,
|
|
25
|
+
returnValue = _cache.returnValue;
|
|
26
|
+
if (onCompare(parameters, args)) {
|
|
27
|
+
return returnValue;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const returnValue = factory(...args);
|
|
31
|
+
if (cacheable) {
|
|
32
|
+
cache = {
|
|
33
|
+
parameters: args,
|
|
34
|
+
returnValue
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return returnValue;
|
|
28
38
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
};
|
|
55
|
-
|
|
39
|
+
};
|
|
40
|
+
const cacheCalls = (sourceFactories, options) => {
|
|
41
|
+
const cachedFactories = {};
|
|
42
|
+
Object.entries(sourceFactories).forEach(_ref2 => {
|
|
43
|
+
let _ref3 = _slicedToArray(_ref2, 2),
|
|
44
|
+
key = _ref3[0],
|
|
45
|
+
factory = _ref3[1];
|
|
46
|
+
cachedFactories[key] = cacheCall(factory, options);
|
|
47
|
+
});
|
|
48
|
+
return cachedFactories;
|
|
49
|
+
};
|
|
50
|
+
const captureCalls = (obj, callback) => {
|
|
51
|
+
const newObj = {};
|
|
52
|
+
Object.keys(obj).forEach(key => {
|
|
53
|
+
const value = obj[key];
|
|
54
|
+
if (typeof value === 'function') {
|
|
55
|
+
newObj[key] = function () {
|
|
56
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
57
|
+
args[_key2] = arguments[_key2];
|
|
58
|
+
}
|
|
59
|
+
return callback(key, args);
|
|
60
|
+
};
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
newObj[key] = value;
|
|
64
|
+
});
|
|
65
|
+
return newObj;
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
cacheCall,
|
|
69
|
+
cacheCalls,
|
|
70
|
+
captureCalls
|
|
71
|
+
};
|
|
72
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|