@mic-rexjs/usecases-react 2.6.2 → 2.7.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/dist/index.min.js +1 -1
- package/es/components/UseCaseFragment/index.d.ts +2 -2
- package/es/components/UseCaseFragment/types.d.ts +3 -3
- package/es/enums/ArgumentTypes/index.d.ts +6 -0
- package/es/enums/ArgumentTypes/index.js +7 -0
- package/es/enums/Statuses/index.d.ts +27 -0
- package/es/enums/Statuses/index.js +28 -0
- package/es/hooks/useArgumentTypes/index.d.ts +2 -2
- package/es/hooks/useArgumentTypes/index.js +9 -4
- package/es/hooks/useContext/index.d.ts +5 -0
- package/es/hooks/useContext/index.js +14 -0
- package/es/hooks/useContext/index.test.js +52 -0
- package/es/hooks/useContextUseCase/index.d.ts +2 -0
- package/es/hooks/useContextUseCase/index.js +7 -0
- package/es/hooks/useContextValue/index.d.ts +4 -0
- package/es/hooks/useContextValue/index.js +13 -0
- package/es/hooks/useContextualItem/index.d.ts +2 -2
- package/es/hooks/useContextualItem/index.js +2 -2
- package/es/hooks/useEntity/index.d.ts +2 -2
- package/es/hooks/useEntity/index.js +20 -20
- package/es/hooks/useFullArguments/index.d.ts +5 -0
- package/es/hooks/useFullArguments/index.js +22 -0
- package/es/{methods/fillArguments → hooks/useFullArguments}/types.d.ts +3 -2
- package/es/hooks/useProvider/index.d.ts +5 -4
- package/es/hooks/useProvider/index.js +7 -14
- package/es/hooks/useRuntimeEntity/index.d.ts +2 -2
- package/es/hooks/useRuntimeEntity/index.js +9 -9
- package/es/hooks/useStatuses/index.d.ts +5 -0
- package/es/hooks/useStatuses/index.js +27 -0
- package/es/hooks/useUseCase/index.js +13 -13
- package/es/hooks/useUseCase/index.test.js +106 -1
- package/es/hooks/useUseCase/types.d.ts +10 -10
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/methods/initEntityReducers/index.d.ts +4 -3
- package/es/methods/registerGlobalUseCase/index.d.ts +1 -0
- package/es/methods/registerGlobalUseCase/index.js +2 -0
- package/es/usecases/contextUseCase/index.d.ts +2 -2
- package/es/usecases/contextUseCase/index.js +99 -18
- package/es/usecases/contextUseCase/types.d.ts +33 -2
- package/lib/enums/ArgumentTypes/index.js +13 -0
- package/lib/enums/Statuses/index.js +34 -0
- package/lib/hooks/useArgumentTypes/index.js +9 -3
- package/lib/hooks/useContext/index.js +23 -0
- package/lib/hooks/useContext/index.test.js +62 -0
- package/lib/hooks/useContextUseCase/index.js +13 -0
- package/lib/hooks/useContextValue/index.js +20 -0
- package/lib/hooks/useContextualItem/index.js +2 -2
- package/lib/hooks/useEntity/index.js +21 -21
- package/lib/hooks/useFullArguments/index.js +25 -0
- package/lib/hooks/useProvider/index.js +8 -15
- package/lib/hooks/useRuntimeEntity/index.js +9 -9
- package/lib/hooks/useStatuses/index.js +33 -0
- package/lib/hooks/useUseCase/index.js +13 -13
- package/lib/hooks/useUseCase/index.test.js +152 -7
- package/lib/index.js +8 -1
- package/lib/methods/registerGlobalUseCase/index.js +9 -0
- package/lib/usecases/contextUseCase/index.js +103 -20
- package/package.json +3 -3
- package/es/configs/defaultUseCaseContext/index.d.ts +0 -4
- package/es/configs/defaultUseCaseContext/index.js +0 -2
- package/es/configs/defaultUseCaseContext/types.d.ts +0 -19
- package/es/configs/useCaseContextReferenceMap/index.d.ts +0 -1
- package/es/configs/useCaseContextReferenceMap/index.js +0 -1
- package/es/configs/useCaseContextReferenceMap/types.d.ts +0 -8
- package/es/configs/useCaseContextReferenceMap/types.js +0 -1
- package/es/enums/UseCaseArgumentTypes/index.d.ts +0 -4
- package/es/enums/UseCaseArgumentTypes/index.js +0 -5
- package/es/enums/UseCaseStatuses/index.d.ts +0 -8
- package/es/enums/UseCaseStatuses/index.js +0 -14
- package/es/hooks/useUseCaseContext/index.d.ts +0 -4
- package/es/hooks/useUseCaseContext/index.js +0 -48
- package/es/hooks/useUseCaseContext/index.test.js +0 -59
- package/es/hooks/useUseCaseStatuses/index.d.ts +0 -5
- package/es/hooks/useUseCaseStatuses/index.js +0 -22
- package/es/methods/fillArguments/index.d.ts +0 -5
- package/es/methods/fillArguments/index.js +0 -14
- package/es/methods/fillArguments/types.js +0 -1
- package/lib/configs/defaultUseCaseContext/index.js +0 -8
- package/lib/configs/useCaseContextReferenceMap/index.js +0 -7
- package/lib/configs/useCaseContextReferenceMap/types.js +0 -5
- package/lib/enums/UseCaseArgumentTypes/index.js +0 -11
- package/lib/enums/UseCaseStatuses/index.js +0 -20
- package/lib/hooks/useUseCaseContext/index.js +0 -57
- package/lib/hooks/useUseCaseContext/index.test.js +0 -73
- package/lib/hooks/useUseCaseStatuses/index.js +0 -28
- package/lib/methods/fillArguments/index.js +0 -21
- package/lib/methods/fillArguments/types.js +0 -5
- /package/es/hooks/{useUseCaseContext → useContext}/index.test.d.ts +0 -0
- /package/es/{configs/defaultUseCaseContext → hooks/useFullArguments}/types.js +0 -0
- /package/lib/{configs/defaultUseCaseContext → hooks/useFullArguments}/types.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mic-rexjs/usecases-react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "React-based solution for use usecases of Clean Architecture",
|
|
5
5
|
"private": false,
|
|
6
6
|
"keywords": [
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@mic-rexjs/usecases": "^2.
|
|
36
|
+
"@mic-rexjs/usecases": "^2.12.2",
|
|
37
37
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@commitlint/cli": "^19.0.3",
|
|
50
50
|
"@commitlint/config-angular": "^19.0.3",
|
|
51
51
|
"@jest/globals": "^29.5.0",
|
|
52
|
-
"@mic-rexjs/usecases": "^2.
|
|
52
|
+
"@mic-rexjs/usecases": "^2.12.2",
|
|
53
53
|
"@testing-library/react": "^14.0.0",
|
|
54
54
|
"@types/node": "^20.4.2",
|
|
55
55
|
"@types/react": "^18.2.14",
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
3
|
-
import { AsyncEntityGenerator, EntityGenerator, EntityReducer, EntityReducers, EntityStore, ReducerKeys, Reducers } from '@mic-rexjs/usecases';
|
|
4
|
-
export interface ChangeCallback<T> {
|
|
5
|
-
(newEntity: T, oldEntity: T): void;
|
|
6
|
-
}
|
|
7
|
-
export type ContextualEntityReducer<T, TEntityReducer extends EntityReducer<T>> = TEntityReducer extends (entity: infer TEntity, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn extends AsyncEntityGenerator<TEntity, infer TResult> ? Promise<TResult> : TReturn extends EntityGenerator<TEntity, infer TResult> ? TResult : TReturn : never;
|
|
8
|
-
export type ContextualEntityReducers<T, TEntityReducers extends EntityReducers<T>> = {
|
|
9
|
-
[K in ReducerKeys<TEntityReducers>]: ContextualEntityReducer<T, TEntityReducers[K]>;
|
|
10
|
-
};
|
|
11
|
-
export interface UseCaseContextValue<T extends Reducers> {
|
|
12
|
-
reducers: T;
|
|
13
|
-
statuses: UseCaseStatuses;
|
|
14
|
-
}
|
|
15
|
-
export interface EntityUseCaseContextValue<T, TEntityReducers extends EntityReducers<T>> extends UseCaseContextValue<ContextualEntityReducers<T, TEntityReducers>> {
|
|
16
|
-
store: EntityStore<T>;
|
|
17
|
-
}
|
|
18
|
-
export interface UseCaseContext<T> extends React.Context<T | null> {
|
|
19
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const usecaseContextReferenceMap: Map<any, any>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const usecaseContextReferenceMap = new Map();
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Reducers, UseCase } from '@mic-rexjs/usecases';
|
|
2
|
-
import { UseCaseContext, UseCaseContextValue } from '../defaultUseCaseContext/types';
|
|
3
|
-
export interface UseCaseContextReference<T> {
|
|
4
|
-
value: UseCaseContext<T>;
|
|
5
|
-
times: number;
|
|
6
|
-
}
|
|
7
|
-
export interface UseCaseContextReferenceMap<T extends Reducers, TUseCaseOptions extends object, TContextValue extends UseCaseContextValue<T> = UseCaseContextValue<T>, TKey extends UseCase<T, TUseCaseOptions> = UseCase<T, TUseCaseOptions>, TValue extends UseCaseContextReference<TContextValue> = UseCaseContextReference<TContextValue>> extends Map<TKey, TValue> {
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export var UseCaseStatuses;
|
|
2
|
-
(function (UseCaseStatuses) {
|
|
3
|
-
UseCaseStatuses[UseCaseStatuses["None"] = 0] = "None";
|
|
4
|
-
// 是否需要初始化根 `redurcers`
|
|
5
|
-
UseCaseStatuses[UseCaseStatuses["RootEnabled"] = 2] = "RootEnabled";
|
|
6
|
-
// 是否为上下文模式
|
|
7
|
-
UseCaseStatuses[UseCaseStatuses["ContextEnabled"] = 4] = "ContextEnabled";
|
|
8
|
-
// 是否有 `entity`
|
|
9
|
-
UseCaseStatuses[UseCaseStatuses["EntityEnabled"] = 8] = "EntityEnabled";
|
|
10
|
-
// 是否为需要提供 `Provider` 去挂载根 `context`
|
|
11
|
-
UseCaseStatuses[UseCaseStatuses["ContextRootEnabled"] = 22] = "ContextRootEnabled";
|
|
12
|
-
// 是否初始化与 `entity` 相关的 `reducers`
|
|
13
|
-
UseCaseStatuses[UseCaseStatuses["EntityRootEnabled"] = 62] = "EntityRootEnabled";
|
|
14
|
-
})(UseCaseStatuses || (UseCaseStatuses = {}));
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Reducers, UseCase } from '@mic-rexjs/usecases';
|
|
2
|
-
import { UseCaseContext, UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
|
|
3
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
4
|
-
export declare const useUseCaseContext: <T extends Reducers, TUseCaseOptions extends object, TContext extends UseCaseContext<UseCaseContextValue<T>>>(usecase: UseCase<T, TUseCaseOptions>, argumentTypes?: UseCaseArgumentTypes) => TContext;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { useConstant } from '../useConstant';
|
|
2
|
-
import { usecaseContextReferenceMap } from '../../configs/useCaseContextReferenceMap';
|
|
3
|
-
import { createContext } from 'react';
|
|
4
|
-
import { useUnmount } from 'ahooks';
|
|
5
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
6
|
-
import { defaultUseCaseContext } from '../../configs/defaultUseCaseContext';
|
|
7
|
-
export const useUseCaseContext = (usecase, argumentTypes = UseCaseArgumentTypes.None) => {
|
|
8
|
-
const map = usecaseContextReferenceMap;
|
|
9
|
-
const context = useConstant(() => {
|
|
10
|
-
if (map.has(usecase)) {
|
|
11
|
-
const reference = map.get(usecase);
|
|
12
|
-
const { value, times } = reference;
|
|
13
|
-
map.set(usecase, {
|
|
14
|
-
value,
|
|
15
|
-
times: times + 1,
|
|
16
|
-
});
|
|
17
|
-
return value;
|
|
18
|
-
}
|
|
19
|
-
if ((argumentTypes & UseCaseArgumentTypes.Entity) !== UseCaseArgumentTypes.Entity) {
|
|
20
|
-
return defaultUseCaseContext;
|
|
21
|
-
}
|
|
22
|
-
const ctx = createContext(null);
|
|
23
|
-
map.set(usecase, {
|
|
24
|
-
value: ctx,
|
|
25
|
-
times: 1,
|
|
26
|
-
});
|
|
27
|
-
return ctx;
|
|
28
|
-
});
|
|
29
|
-
useUnmount(() => {
|
|
30
|
-
if (!map.has(usecase)) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const reference = map.get(usecase);
|
|
34
|
-
const { value, times } = reference;
|
|
35
|
-
if (context !== value) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (times === 1) {
|
|
39
|
-
map.delete(usecase);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
map.set(usecase, {
|
|
43
|
-
value,
|
|
44
|
-
times: times - 1,
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
return context;
|
|
48
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { renderHook } from '@testing-library/react';
|
|
3
|
-
import { useUseCaseContext } from '.';
|
|
4
|
-
import { defaultUseCaseContext } from '../../configs/defaultUseCaseContext';
|
|
5
|
-
import { usecaseContextReferenceMap } from '../../configs/useCaseContextReferenceMap';
|
|
6
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
7
|
-
const testUseCase = () => {
|
|
8
|
-
return {};
|
|
9
|
-
};
|
|
10
|
-
describe('useUseCaseContext', () => {
|
|
11
|
-
test('should return the default context if map has not saved a usecase with default args', () => {
|
|
12
|
-
const { result } = renderHook(() => {
|
|
13
|
-
return useUseCaseContext(testUseCase);
|
|
14
|
-
});
|
|
15
|
-
const { current } = result;
|
|
16
|
-
expect(current).toBe(defaultUseCaseContext);
|
|
17
|
-
});
|
|
18
|
-
test('should return the default context if map has not saved a usecase with `UseCaseArgumentTypes.None` & `UseCaseModes.Normal`', () => {
|
|
19
|
-
const { result } = renderHook(() => {
|
|
20
|
-
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.None);
|
|
21
|
-
});
|
|
22
|
-
const { current } = result;
|
|
23
|
-
expect(current).toBe(defaultUseCaseContext);
|
|
24
|
-
});
|
|
25
|
-
test('should return a new context if map has not saved a usecase with `UseCaseArgumentTypes.Entity` & `UseCaseModes.Normal`', () => {
|
|
26
|
-
const { result } = renderHook(() => {
|
|
27
|
-
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.Entity);
|
|
28
|
-
});
|
|
29
|
-
const { current } = result;
|
|
30
|
-
expect(typeof current).toBe('object');
|
|
31
|
-
});
|
|
32
|
-
test('check context reference times when mount/unmount a usecase', () => {
|
|
33
|
-
const { unmount: unmount1 } = renderHook(() => {
|
|
34
|
-
useUseCaseContext(testUseCase, UseCaseArgumentTypes.Entity);
|
|
35
|
-
});
|
|
36
|
-
const { times: times1 } = usecaseContextReferenceMap.get(testUseCase);
|
|
37
|
-
const { unmount: unmount2 } = renderHook(() => {
|
|
38
|
-
useUseCaseContext(testUseCase);
|
|
39
|
-
useUseCaseContext(testUseCase);
|
|
40
|
-
});
|
|
41
|
-
const { times: times2 } = usecaseContextReferenceMap.get(testUseCase);
|
|
42
|
-
expect(times1).toBe(1);
|
|
43
|
-
expect(times2).toBe(3);
|
|
44
|
-
unmount1();
|
|
45
|
-
const { times: times3 } = usecaseContextReferenceMap.get(testUseCase);
|
|
46
|
-
expect(times3).toBe(2);
|
|
47
|
-
unmount2();
|
|
48
|
-
const hasSaved = usecaseContextReferenceMap.has(testUseCase);
|
|
49
|
-
expect(hasSaved).toBe(false);
|
|
50
|
-
});
|
|
51
|
-
test('context reference times should not change when rerender hooks', () => {
|
|
52
|
-
const { rerender } = renderHook(() => {
|
|
53
|
-
useUseCaseContext(testUseCase, UseCaseArgumentTypes.Entity);
|
|
54
|
-
});
|
|
55
|
-
rerender();
|
|
56
|
-
const { times } = usecaseContextReferenceMap.get(testUseCase);
|
|
57
|
-
expect(times).toBe(1);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
|
|
2
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
3
|
-
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
4
|
-
import { Reducers } from '@mic-rexjs/usecases';
|
|
5
|
-
export declare const useUseCaseStatuses: <T extends Reducers>(argumentTypes: UseCaseArgumentTypes, contextValue: UseCaseContextValue<T> | null) => UseCaseStatuses;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
2
|
-
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
3
|
-
import { useCreation } from 'ahooks';
|
|
4
|
-
export const useUseCaseStatuses = (argumentTypes, contextValue) => {
|
|
5
|
-
return useCreation(() => {
|
|
6
|
-
let statuses = UseCaseStatuses.None;
|
|
7
|
-
const { store } = (contextValue || {});
|
|
8
|
-
if ((argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity) {
|
|
9
|
-
statuses |= UseCaseStatuses.EntityRootEnabled;
|
|
10
|
-
}
|
|
11
|
-
if (contextValue) {
|
|
12
|
-
statuses |= UseCaseStatuses.ContextEnabled;
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
statuses |= UseCaseStatuses.RootEnabled;
|
|
16
|
-
}
|
|
17
|
-
if (store) {
|
|
18
|
-
statuses |= UseCaseStatuses.EntityEnabled;
|
|
19
|
-
}
|
|
20
|
-
return statuses;
|
|
21
|
-
}, [argumentTypes, contextValue]);
|
|
22
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { UseCaseHookParameters } from '../../hooks/useUseCase/types';
|
|
2
|
-
import { Reducers } from '@mic-rexjs/usecases';
|
|
3
|
-
import { UseCaseHookFullParameters } from './types';
|
|
4
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
5
|
-
export declare const fillArguments: <T, TReducers extends Reducers, TUseCaseOptions extends object>(args: UseCaseHookParameters, argumentTypes: UseCaseArgumentTypes) => UseCaseHookFullParameters<T, TReducers, TUseCaseOptions>;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
2
|
-
export const fillArguments = (args, argumentTypes) => {
|
|
3
|
-
const [arg1, arg2, arg3, arg4] = args;
|
|
4
|
-
const hasEntity = (argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity;
|
|
5
|
-
if (hasEntity) {
|
|
6
|
-
return [
|
|
7
|
-
arg1,
|
|
8
|
-
arg2,
|
|
9
|
-
(arg3 || {}),
|
|
10
|
-
(arg4 || []),
|
|
11
|
-
];
|
|
12
|
-
}
|
|
13
|
-
return [null, arg1, (arg2 || {}), (arg3 || [])];
|
|
14
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.UseCaseArgumentTypes = void 0;
|
|
7
|
-
var UseCaseArgumentTypes;
|
|
8
|
-
(function (UseCaseArgumentTypes) {
|
|
9
|
-
UseCaseArgumentTypes[UseCaseArgumentTypes["None"] = 0] = "None";
|
|
10
|
-
UseCaseArgumentTypes[UseCaseArgumentTypes["Entity"] = 2] = "Entity";
|
|
11
|
-
})(UseCaseArgumentTypes || (exports.UseCaseArgumentTypes = UseCaseArgumentTypes = {}));
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.UseCaseStatuses = void 0;
|
|
7
|
-
var UseCaseStatuses;
|
|
8
|
-
(function (UseCaseStatuses) {
|
|
9
|
-
UseCaseStatuses[UseCaseStatuses["None"] = 0] = "None";
|
|
10
|
-
// 是否需要初始化根 `redurcers`
|
|
11
|
-
UseCaseStatuses[UseCaseStatuses["RootEnabled"] = 2] = "RootEnabled";
|
|
12
|
-
// 是否为上下文模式
|
|
13
|
-
UseCaseStatuses[UseCaseStatuses["ContextEnabled"] = 4] = "ContextEnabled";
|
|
14
|
-
// 是否有 `entity`
|
|
15
|
-
UseCaseStatuses[UseCaseStatuses["EntityEnabled"] = 8] = "EntityEnabled";
|
|
16
|
-
// 是否为需要提供 `Provider` 去挂载根 `context`
|
|
17
|
-
UseCaseStatuses[UseCaseStatuses["ContextRootEnabled"] = 22] = "ContextRootEnabled";
|
|
18
|
-
// 是否初始化与 `entity` 相关的 `reducers`
|
|
19
|
-
UseCaseStatuses[UseCaseStatuses["EntityRootEnabled"] = 62] = "EntityRootEnabled";
|
|
20
|
-
})(UseCaseStatuses || (exports.UseCaseStatuses = UseCaseStatuses = {}));
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useUseCaseContext = void 0;
|
|
7
|
-
var _useConstant = require("../useConstant");
|
|
8
|
-
var _useCaseContextReferenceMap = require("../../configs/useCaseContextReferenceMap");
|
|
9
|
-
var _react = require("react");
|
|
10
|
-
var _ahooks = require("ahooks");
|
|
11
|
-
var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
|
|
12
|
-
var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
|
|
13
|
-
var useUseCaseContext = exports.useUseCaseContext = function useUseCaseContext(usecase) {
|
|
14
|
-
var argumentTypes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _UseCaseArgumentTypes.UseCaseArgumentTypes.None;
|
|
15
|
-
var map = _useCaseContextReferenceMap.usecaseContextReferenceMap;
|
|
16
|
-
var context = (0, _useConstant.useConstant)(function () {
|
|
17
|
-
if (map.has(usecase)) {
|
|
18
|
-
var reference = map.get(usecase);
|
|
19
|
-
var value = reference.value,
|
|
20
|
-
times = reference.times;
|
|
21
|
-
map.set(usecase, {
|
|
22
|
-
value: value,
|
|
23
|
-
times: times + 1
|
|
24
|
-
});
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
27
|
-
if ((argumentTypes & _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) !== _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) {
|
|
28
|
-
return _defaultUseCaseContext.defaultUseCaseContext;
|
|
29
|
-
}
|
|
30
|
-
var ctx = (0, _react.createContext)(null);
|
|
31
|
-
map.set(usecase, {
|
|
32
|
-
value: ctx,
|
|
33
|
-
times: 1
|
|
34
|
-
});
|
|
35
|
-
return ctx;
|
|
36
|
-
});
|
|
37
|
-
(0, _ahooks.useUnmount)(function () {
|
|
38
|
-
if (!map.has(usecase)) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
var reference = map.get(usecase);
|
|
42
|
-
var value = reference.value,
|
|
43
|
-
times = reference.times;
|
|
44
|
-
if (context !== value) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (times === 1) {
|
|
48
|
-
map["delete"](usecase);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
map.set(usecase, {
|
|
52
|
-
value: value,
|
|
53
|
-
times: times - 1
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
return context;
|
|
57
|
-
};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
5
|
-
var _globals = require("@jest/globals");
|
|
6
|
-
var _react = require("@testing-library/react");
|
|
7
|
-
var _ = require(".");
|
|
8
|
-
var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
|
|
9
|
-
var _useCaseContextReferenceMap = require("../../configs/useCaseContextReferenceMap");
|
|
10
|
-
var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
|
|
11
|
-
var testUseCase = function testUseCase() {
|
|
12
|
-
return {};
|
|
13
|
-
};
|
|
14
|
-
(0, _globals.describe)('useUseCaseContext', function () {
|
|
15
|
-
(0, _globals.test)('should return the default context if map has not saved a usecase with default args', function () {
|
|
16
|
-
var _renderHook = (0, _react.renderHook)(function () {
|
|
17
|
-
return (0, _.useUseCaseContext)(testUseCase);
|
|
18
|
-
}),
|
|
19
|
-
result = _renderHook.result;
|
|
20
|
-
var current = result.current;
|
|
21
|
-
(0, _globals.expect)(current).toBe(_defaultUseCaseContext.defaultUseCaseContext);
|
|
22
|
-
});
|
|
23
|
-
(0, _globals.test)('should return the default context if map has not saved a usecase with `UseCaseArgumentTypes.None` & `UseCaseModes.Normal`', function () {
|
|
24
|
-
var _renderHook2 = (0, _react.renderHook)(function () {
|
|
25
|
-
return (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.None);
|
|
26
|
-
}),
|
|
27
|
-
result = _renderHook2.result;
|
|
28
|
-
var current = result.current;
|
|
29
|
-
(0, _globals.expect)(current).toBe(_defaultUseCaseContext.defaultUseCaseContext);
|
|
30
|
-
});
|
|
31
|
-
(0, _globals.test)('should return a new context if map has not saved a usecase with `UseCaseArgumentTypes.Entity` & `UseCaseModes.Normal`', function () {
|
|
32
|
-
var _renderHook3 = (0, _react.renderHook)(function () {
|
|
33
|
-
return (0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity);
|
|
34
|
-
}),
|
|
35
|
-
result = _renderHook3.result;
|
|
36
|
-
var current = result.current;
|
|
37
|
-
(0, _globals.expect)((0, _typeof2["default"])(current)).toBe('object');
|
|
38
|
-
});
|
|
39
|
-
(0, _globals.test)('check context reference times when mount/unmount a usecase', function () {
|
|
40
|
-
var _renderHook4 = (0, _react.renderHook)(function () {
|
|
41
|
-
(0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity);
|
|
42
|
-
}),
|
|
43
|
-
unmount1 = _renderHook4.unmount;
|
|
44
|
-
var _usecaseContextRefere = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
|
|
45
|
-
times1 = _usecaseContextRefere.times;
|
|
46
|
-
var _renderHook5 = (0, _react.renderHook)(function () {
|
|
47
|
-
(0, _.useUseCaseContext)(testUseCase);
|
|
48
|
-
(0, _.useUseCaseContext)(testUseCase);
|
|
49
|
-
}),
|
|
50
|
-
unmount2 = _renderHook5.unmount;
|
|
51
|
-
var _usecaseContextRefere2 = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
|
|
52
|
-
times2 = _usecaseContextRefere2.times;
|
|
53
|
-
(0, _globals.expect)(times1).toBe(1);
|
|
54
|
-
(0, _globals.expect)(times2).toBe(3);
|
|
55
|
-
unmount1();
|
|
56
|
-
var _usecaseContextRefere3 = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
|
|
57
|
-
times3 = _usecaseContextRefere3.times;
|
|
58
|
-
(0, _globals.expect)(times3).toBe(2);
|
|
59
|
-
unmount2();
|
|
60
|
-
var hasSaved = _useCaseContextReferenceMap.usecaseContextReferenceMap.has(testUseCase);
|
|
61
|
-
(0, _globals.expect)(hasSaved).toBe(false);
|
|
62
|
-
});
|
|
63
|
-
(0, _globals.test)('context reference times should not change when rerender hooks', function () {
|
|
64
|
-
var _renderHook6 = (0, _react.renderHook)(function () {
|
|
65
|
-
(0, _.useUseCaseContext)(testUseCase, _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity);
|
|
66
|
-
}),
|
|
67
|
-
rerender = _renderHook6.rerender;
|
|
68
|
-
rerender();
|
|
69
|
-
var _usecaseContextRefere4 = _useCaseContextReferenceMap.usecaseContextReferenceMap.get(testUseCase),
|
|
70
|
-
times = _usecaseContextRefere4.times;
|
|
71
|
-
(0, _globals.expect)(times).toBe(1);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useUseCaseStatuses = void 0;
|
|
7
|
-
var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
|
|
8
|
-
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
9
|
-
var _ahooks = require("ahooks");
|
|
10
|
-
var useUseCaseStatuses = exports.useUseCaseStatuses = function useUseCaseStatuses(argumentTypes, contextValue) {
|
|
11
|
-
return (0, _ahooks.useCreation)(function () {
|
|
12
|
-
var statuses = _UseCaseStatuses.UseCaseStatuses.None;
|
|
13
|
-
var _ref = contextValue || {},
|
|
14
|
-
store = _ref.store;
|
|
15
|
-
if ((argumentTypes & _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) === _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) {
|
|
16
|
-
statuses |= _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
|
|
17
|
-
}
|
|
18
|
-
if (contextValue) {
|
|
19
|
-
statuses |= _UseCaseStatuses.UseCaseStatuses.ContextEnabled;
|
|
20
|
-
} else {
|
|
21
|
-
statuses |= _UseCaseStatuses.UseCaseStatuses.RootEnabled;
|
|
22
|
-
}
|
|
23
|
-
if (store) {
|
|
24
|
-
statuses |= _UseCaseStatuses.UseCaseStatuses.EntityEnabled;
|
|
25
|
-
}
|
|
26
|
-
return statuses;
|
|
27
|
-
}, [argumentTypes, contextValue]);
|
|
28
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.fillArguments = void 0;
|
|
8
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
-
var _UseCaseArgumentTypes = require("../../enums/UseCaseArgumentTypes");
|
|
10
|
-
var fillArguments = exports.fillArguments = function fillArguments(args, argumentTypes) {
|
|
11
|
-
var _args = (0, _slicedToArray2["default"])(args, 4),
|
|
12
|
-
arg1 = _args[0],
|
|
13
|
-
arg2 = _args[1],
|
|
14
|
-
arg3 = _args[2],
|
|
15
|
-
arg4 = _args[3];
|
|
16
|
-
var hasEntity = (argumentTypes & _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity) === _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity;
|
|
17
|
-
if (hasEntity) {
|
|
18
|
-
return [arg1, arg2, arg3 || {}, arg4 || []];
|
|
19
|
-
}
|
|
20
|
-
return [null, arg1, arg2 || {}, arg3 || []];
|
|
21
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|