@mic-rexjs/usecases-react 2.1.3 → 2.2.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/configs/defaultUseCaseContext/index.d.ts +3 -1
- package/es/configs/defaultUseCaseContext/types.d.ts +7 -5
- package/es/configs/useCaseContextReferenceMap/types.d.ts +2 -2
- package/es/hooks/useArgumentTypes/index.js +2 -5
- package/es/hooks/useContextualItem/index.d.ts +1 -1
- package/es/hooks/useContextualItem/index.js +1 -1
- package/es/hooks/useEntity/index.js +5 -6
- package/es/hooks/useGlobalUseCase/index.js +2 -2
- package/es/hooks/useGlobalUseCase/index.test.js +23 -7
- package/es/hooks/useGlobalUseCase/types.d.ts +2 -4
- package/es/hooks/useProvider/index.d.ts +2 -2
- package/es/hooks/useProvider/index.js +2 -1
- package/es/hooks/useUseCase/index.js +10 -12
- package/es/hooks/useUseCase/index.test.js +68 -105
- package/es/hooks/useUseCase/types.d.ts +19 -45
- package/es/hooks/useUseCaseContext/index.d.ts +2 -3
- package/es/hooks/useUseCaseContext/index.js +3 -8
- package/es/hooks/useUseCaseContext/index.test.js +2 -30
- package/es/hooks/useUseCaseStatuses/index.d.ts +2 -2
- package/es/hooks/useUseCaseStatuses/index.js +3 -3
- package/es/index.d.ts +1 -1
- package/es/methods/fillArguments/index.d.ts +2 -2
- package/es/methods/fillArguments/index.js +0 -9
- package/es/methods/fillArguments/types.d.ts +3 -3
- package/es/methods/initEntityReducers/index.d.ts +2 -2
- package/lib/hooks/useArgumentTypes/index.js +2 -5
- package/lib/hooks/useContextualItem/index.js +1 -1
- package/lib/hooks/useEntity/index.js +5 -8
- package/lib/hooks/useGlobalUseCase/index.js +2 -2
- package/lib/hooks/useGlobalUseCase/index.test.js +18 -7
- package/lib/hooks/useProvider/index.js +4 -2
- package/lib/hooks/useUseCase/index.js +12 -12
- package/lib/hooks/useUseCase/index.test.js +147 -182
- package/lib/hooks/useUseCaseContext/index.js +2 -8
- package/lib/hooks/useUseCaseContext/index.test.js +8 -36
- package/lib/hooks/useUseCaseStatuses/index.js +3 -3
- package/lib/methods/fillArguments/index.js +0 -3
- package/package.json +3 -3
- package/es/enums/UseCaseModeErrors/index.d.ts +0 -4
- package/es/enums/UseCaseModeErrors/index.js +0 -5
- package/es/hooks/useSafeMode/index.d.ts +0 -3
- package/es/hooks/useSafeMode/index.js +0 -18
- package/lib/enums/UseCaseModeErrors/index.js +0 -11
- package/lib/hooks/useSafeMode/index.js +0 -24
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EntityReducers, EntityUseCase, Reducers, UseCase } from '@mic-rexjs/usecases';
|
|
2
2
|
import { UseCaseProvider } from '../useProvider/types';
|
|
3
3
|
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
4
4
|
import { ContextualEntityReducers } from '../../configs/defaultUseCaseContext/types';
|
|
5
|
-
|
|
5
|
+
import { GlobalReducers, GlobalUseCase, SymbolSet, SymbolSetTarget } from '@mic-rexjs/usecases/es/types';
|
|
6
|
+
export interface NonEntitySymbolSet extends SymbolSet {
|
|
7
|
+
entity?: never;
|
|
8
|
+
}
|
|
9
|
+
export type RootCoreCollection<T, TEntityReducers extends EntityReducers<T>> = [
|
|
6
10
|
entity: T,
|
|
7
11
|
reducers: ContextualEntityReducers<T, TEntityReducers>,
|
|
8
12
|
Provider: UseCaseProvider
|
|
9
13
|
];
|
|
10
|
-
export type ContextualCoreCollection<T, TEntityReducers extends
|
|
14
|
+
export type ContextualCoreCollection<T, TEntityReducers extends EntityReducers<T>> = [
|
|
11
15
|
entity: T,
|
|
12
16
|
reducers: ContextualEntityReducers<T, TEntityReducers>
|
|
13
17
|
];
|
|
14
|
-
export type CoreCollection<T, TEntityReducers extends
|
|
15
|
-
export type PseudoCoreCollection<T extends ReducerMap, TProvider extends UseCaseProvider | null = UseCaseProvider> = [
|
|
16
|
-
reducers: T,
|
|
17
|
-
Provider: TProvider
|
|
18
|
-
];
|
|
18
|
+
export type CoreCollection<T, TEntityReducers extends EntityReducers<T>> = RootCoreCollection<T, TEntityReducers> | ContextualCoreCollection<T, TEntityReducers>;
|
|
19
19
|
export interface EntityGetter<T> {
|
|
20
20
|
(): T;
|
|
21
21
|
}
|
|
@@ -45,49 +45,23 @@ export interface UseCaseHookOwnOptions<T, TUseCaseOptions extends object> extend
|
|
|
45
45
|
options?: TUseCaseOptions;
|
|
46
46
|
}
|
|
47
47
|
export type UseCaseHookOptions<T, TUseCaseOptions extends object = object> = TUseCaseOptions & UseCaseHookOwnOptions<T, TUseCaseOptions>;
|
|
48
|
+
export interface ReducersHook {
|
|
49
|
+
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T & SymbolSetTarget<NonEntitySymbolSet>, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): T;
|
|
50
|
+
}
|
|
51
|
+
export interface ContextualReducersHook {
|
|
52
|
+
<T, TGlobalReducers extends GlobalReducers<T>>(usecase: GlobalUseCase<T, TGlobalReducers> & UseCase<EntityReducers<T>>): ContextualEntityReducers<T, TGlobalReducers>;
|
|
53
|
+
}
|
|
48
54
|
export interface ContextualCoreCollectionHook {
|
|
49
|
-
<T, TEntityReducers extends EntityReducers<T>>(usecase: EntityUseCase<T, TEntityReducers> &
|
|
50
|
-
/**
|
|
51
|
-
* 如果不使用 `&`,那么很多情况下 `options` 类型无法被正确推导;
|
|
52
|
-
* 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
|
|
53
|
-
* 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
|
|
54
|
-
*/
|
|
55
|
-
UseCase<EntityReducerMap<T>>, options?: UseCaseHookContextualOptions<T>): ContextualCoreCollection<T, TEntityReducers>;
|
|
55
|
+
<T, TEntityReducers extends EntityReducers<T>>(usecase: EntityUseCase<T, TEntityReducers> & UseCase<EntityReducers<T>>, options?: UseCaseHookContextualOptions<T>): ContextualCoreCollection<T, TEntityReducers>;
|
|
56
56
|
}
|
|
57
57
|
export interface RootCoreCollectionHook {
|
|
58
|
-
<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> &
|
|
59
|
-
/**
|
|
60
|
-
* 如果不使用 `&`,那么很多情况下 `options` 类型无法被正确推导;
|
|
61
|
-
* 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
|
|
62
|
-
* 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
|
|
63
|
-
*/
|
|
64
|
-
UseCase<EntityReducerMap<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
|
|
58
|
+
<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>;
|
|
65
59
|
}
|
|
66
60
|
export interface ModeCoreCollectionHook {
|
|
67
|
-
<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> &
|
|
68
|
-
/**
|
|
69
|
-
* 如果不使用 `&`,那么很多情况下 `options` 类型无法被正确推导;
|
|
70
|
-
* 因为使用 `&` 是为了让该参数 `usecase` 的泛型 `T` 推导占优先级,
|
|
71
|
-
* 从而保证 `options` 里的泛型 `T` 是根据 `usecase` 来推导的。
|
|
72
|
-
*/
|
|
73
|
-
UseCase<EntityReducerMap<T>, TUseCaseOptions>,
|
|
74
|
-
/**
|
|
75
|
-
* currently, only support `UseCaseModes.Stateless`
|
|
76
|
-
*/
|
|
77
|
-
mode: UseCaseModes, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
|
|
78
|
-
}
|
|
79
|
-
export interface PseudoCoreCollectionHook {
|
|
80
|
-
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>,
|
|
81
|
-
/**
|
|
82
|
-
* currently, only support `UseCaseModes.Global`
|
|
83
|
-
*/
|
|
84
|
-
mode: UseCaseModes, options?: TUseCaseOptions, deps?: unknown[]): PseudoCoreCollection<T>;
|
|
85
|
-
}
|
|
86
|
-
export interface ReducersHook {
|
|
87
|
-
<T extends Reducers, TUseCaseOptions extends object = object>(usecase: UseCase<T, TUseCaseOptions>, options?: TUseCaseOptions, deps?: unknown[]): T;
|
|
61
|
+
<T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(entity: T | EntityGetter<T>, usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions> & UseCase<EntityReducers<T>, TUseCaseOptions>, mode: UseCaseModes, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: unknown[]): RootCoreCollection<T, TEntityReducers>;
|
|
88
62
|
}
|
|
89
63
|
export interface CoreCollectionHook extends ContextualCoreCollectionHook, RootCoreCollectionHook, ModeCoreCollectionHook {
|
|
90
64
|
}
|
|
91
|
-
export type UseCaseHookParameters = Parameters<
|
|
92
|
-
export interface UseCaseHook extends
|
|
65
|
+
export type UseCaseHookParameters = Parameters<ReducersHook> | Parameters<ContextualReducersHook> | Parameters<ContextualCoreCollectionHook> | Parameters<RootCoreCollectionHook> | Parameters<ModeCoreCollectionHook>;
|
|
66
|
+
export interface UseCaseHook extends ReducersHook, ContextualReducersHook, CoreCollectionHook {
|
|
93
67
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Reducers, UseCase } from '@mic-rexjs/usecases';
|
|
2
2
|
import { UseCaseContext, UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
|
|
3
3
|
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
4
|
-
|
|
5
|
-
export declare const useUseCaseContext: <T extends ReducerMap<import("@mic-rexjs/usecases").Reducer<unknown>>, TUseCaseOptions extends object, TContext extends UseCaseContext<UseCaseContextValue<T>>>(usecase: UseCase<T, TUseCaseOptions>, argumentTypes?: UseCaseArgumentTypes, mode?: UseCaseModes) => TContext;
|
|
4
|
+
export declare const useUseCaseContext: <T extends Reducers, TUseCaseOptions extends object, TContext extends UseCaseContext<UseCaseContextValue<T>>>(usecase: UseCase<T, TUseCaseOptions>, argumentTypes?: UseCaseArgumentTypes) => TContext;
|
|
@@ -3,9 +3,8 @@ import { usecaseContextReferenceMap } from '../../configs/useCaseContextReferenc
|
|
|
3
3
|
import { createContext } from 'react';
|
|
4
4
|
import { useUnmount } from 'ahooks';
|
|
5
5
|
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
6
|
-
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
7
6
|
import { defaultUseCaseContext } from '../../configs/defaultUseCaseContext';
|
|
8
|
-
export const useUseCaseContext = (usecase, argumentTypes = UseCaseArgumentTypes.None
|
|
7
|
+
export const useUseCaseContext = (usecase, argumentTypes = UseCaseArgumentTypes.None) => {
|
|
9
8
|
const map = usecaseContextReferenceMap;
|
|
10
9
|
const context = useConstant(() => {
|
|
11
10
|
if (map.has(usecase)) {
|
|
@@ -17,12 +16,8 @@ export const useUseCaseContext = (usecase, argumentTypes = UseCaseArgumentTypes.
|
|
|
17
16
|
});
|
|
18
17
|
return value;
|
|
19
18
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
case (argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity:
|
|
23
|
-
break;
|
|
24
|
-
default:
|
|
25
|
-
return defaultUseCaseContext;
|
|
19
|
+
if ((argumentTypes & UseCaseArgumentTypes.Entity) !== UseCaseArgumentTypes.Entity) {
|
|
20
|
+
return defaultUseCaseContext;
|
|
26
21
|
}
|
|
27
22
|
const ctx = createContext(null);
|
|
28
23
|
map.set(usecase, {
|
|
@@ -3,7 +3,6 @@ import { renderHook } from '@testing-library/react';
|
|
|
3
3
|
import { useUseCaseContext } from '.';
|
|
4
4
|
import { defaultUseCaseContext } from '../../configs/defaultUseCaseContext';
|
|
5
5
|
import { usecaseContextReferenceMap } from '../../configs/useCaseContextReferenceMap';
|
|
6
|
-
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
7
6
|
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
8
7
|
const testUseCase = () => {
|
|
9
8
|
return {};
|
|
@@ -18,45 +17,18 @@ describe('useUseCaseContext', () => {
|
|
|
18
17
|
});
|
|
19
18
|
test('should return the default context if map has not saved a usecase with `UseCaseArgumentTypes.None` & `UseCaseModes.Normal`', () => {
|
|
20
19
|
const { result } = renderHook(() => {
|
|
21
|
-
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.None
|
|
20
|
+
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.None);
|
|
22
21
|
});
|
|
23
22
|
const { current } = result;
|
|
24
23
|
expect(current).toBe(defaultUseCaseContext);
|
|
25
24
|
});
|
|
26
25
|
test('should return a new context if map has not saved a usecase with `UseCaseArgumentTypes.Entity` & `UseCaseModes.Normal`', () => {
|
|
27
26
|
const { result } = renderHook(() => {
|
|
28
|
-
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.Entity
|
|
27
|
+
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.Entity);
|
|
29
28
|
});
|
|
30
29
|
const { current } = result;
|
|
31
30
|
expect(typeof current).toBe('object');
|
|
32
31
|
});
|
|
33
|
-
test('should return a new context if map has not saved a usecase with `UseCaseArgumentTypes.None` & `UseCaseModes.Global`', () => {
|
|
34
|
-
const { result } = renderHook(() => {
|
|
35
|
-
return useUseCaseContext(testUseCase, UseCaseArgumentTypes.None, UseCaseModes.Global);
|
|
36
|
-
});
|
|
37
|
-
const { current } = result;
|
|
38
|
-
expect(typeof current).toBe('object');
|
|
39
|
-
});
|
|
40
|
-
test.each([
|
|
41
|
-
{
|
|
42
|
-
type: UseCaseArgumentTypes.Entity,
|
|
43
|
-
mode: UseCaseModes.Normal,
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
type: UseCaseArgumentTypes.None,
|
|
47
|
-
mode: UseCaseModes.Global,
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
type: UseCaseArgumentTypes.Entity,
|
|
51
|
-
mode: UseCaseModes.Global,
|
|
52
|
-
},
|
|
53
|
-
])('should return the existing context if map has save a usecase already', ({ type, mode }) => {
|
|
54
|
-
const { result } = renderHook(() => {
|
|
55
|
-
return useUseCaseContext(testUseCase, type, mode) === useUseCaseContext(testUseCase);
|
|
56
|
-
});
|
|
57
|
-
const { current: isSame } = result;
|
|
58
|
-
expect(isSame).toBe(true);
|
|
59
|
-
});
|
|
60
32
|
test('check context reference times when mount/unmount a usecase', () => {
|
|
61
33
|
const { unmount: unmount1 } = renderHook(() => {
|
|
62
34
|
useUseCaseContext(testUseCase, UseCaseArgumentTypes.Entity);
|
|
@@ -2,5 +2,5 @@ import { UseCaseContextValue } from '../../configs/defaultUseCaseContext/types';
|
|
|
2
2
|
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
3
3
|
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
4
4
|
import { UseCaseStatuses } from '../../enums/UseCaseStatuses';
|
|
5
|
-
import {
|
|
6
|
-
export declare const useUseCaseStatuses: <T
|
|
5
|
+
import { Reducers } from '@mic-rexjs/usecases';
|
|
6
|
+
export declare const useUseCaseStatuses: <T extends Reducers>(argumentTypes: UseCaseArgumentTypes, mode: UseCaseModes, contextValue: UseCaseContextValue<T> | null) => UseCaseStatuses;
|
|
@@ -9,11 +9,11 @@ export const useUseCaseStatuses = (argumentTypes, mode, contextValue) => {
|
|
|
9
9
|
if ((argumentTypes & UseCaseArgumentTypes.Entity) === UseCaseArgumentTypes.Entity) {
|
|
10
10
|
statuses |= UseCaseStatuses.EntityRootEnabled;
|
|
11
11
|
}
|
|
12
|
-
if (contextValue
|
|
13
|
-
statuses |= UseCaseStatuses.
|
|
12
|
+
if (contextValue) {
|
|
13
|
+
statuses |= UseCaseStatuses.ContextEnabled;
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
|
-
statuses |= UseCaseStatuses.
|
|
16
|
+
statuses |= UseCaseStatuses.RootEnabled;
|
|
17
17
|
}
|
|
18
18
|
if (store) {
|
|
19
19
|
statuses |= UseCaseStatuses.EntityEnabled;
|
package/es/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { UseCaseFragment } from './components/UseCaseFragment';
|
|
|
2
2
|
export { useUseCase } from './hooks/useUseCase';
|
|
3
3
|
export { useGlobalUseCase } from './hooks/useGlobalUseCase';
|
|
4
4
|
export { useStatelessUseCase } from './hooks/useStatelessUseCase';
|
|
5
|
-
export type { RootCoreCollection, ContextualCoreCollection, CoreCollection
|
|
5
|
+
export type { RootCoreCollection, ContextualCoreCollection, CoreCollection } from './hooks/useUseCase/types';
|
|
6
6
|
export type { UseCaseHookOptions } from './hooks/useUseCase/types';
|
|
7
7
|
export type { UseCaseProvider } from './hooks/useProvider/types';
|
|
8
8
|
export type { UseCaseFragmentProps } from './components/UseCaseFragment/types';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UseCaseHookParameters } from '../../hooks/useUseCase/types';
|
|
2
|
-
import {
|
|
2
|
+
import { Reducers } from '@mic-rexjs/usecases';
|
|
3
3
|
import { UseCaseHookFullParameters } from './types';
|
|
4
4
|
import { UseCaseArgumentTypes } from '../../enums/UseCaseArgumentTypes';
|
|
5
|
-
export declare const fillArguments: <T, TReducers extends
|
|
5
|
+
export declare const fillArguments: <T, TReducers extends Reducers, TUseCaseOptions extends object>(args: UseCaseHookParameters, argumentTypes: UseCaseArgumentTypes) => UseCaseHookFullParameters<T, TReducers, TUseCaseOptions>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { UseCaseModes } from '../../enums/UseCaseModes';
|
|
2
2
|
import { EntityGetter, UseCaseHookContextualOptions, UseCaseHookOptions } from '../../hooks/useUseCase/types';
|
|
3
|
-
import {
|
|
4
|
-
export type UseCaseHookFullParameters<T, TReducers extends
|
|
3
|
+
import { EntityReducers, EntityUseCase, Reducers, UseCase } from '@mic-rexjs/usecases';
|
|
4
|
+
export type UseCaseHookFullParameters<T, TReducers extends Reducers, TUseCaseOptions extends object> = [
|
|
5
5
|
entity: T | EntityGetter<T>,
|
|
6
|
-
usecase: UseCase<TReducers, TUseCaseOptions> | EntityUseCase<T, TReducers &
|
|
6
|
+
usecase: UseCase<TReducers, TUseCaseOptions> | EntityUseCase<T, TReducers & EntityReducers<T>, TUseCaseOptions>,
|
|
7
7
|
mode: UseCaseModes,
|
|
8
8
|
options: TUseCaseOptions | UseCaseHookOptions<T, TUseCaseOptions> | UseCaseHookContextualOptions<T>,
|
|
9
9
|
deps: unknown[]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EntityReducers, EntityStore, EntityUseCase } from '@mic-rexjs/usecases';
|
|
2
2
|
import { UseCaseHookOptions } from '../../hooks/useUseCase/types';
|
|
3
3
|
import { ContextualEntityReducers } from '../../configs/defaultUseCaseContext/types';
|
|
4
|
-
export declare const initEntityReducers: <T, TEntityReducers extends
|
|
4
|
+
export declare const initEntityReducers: <T, TEntityReducers extends EntityReducers<T>, TUseCaseOptions extends object = object>(usecase: EntityUseCase<T, TEntityReducers, TUseCaseOptions>, store: EntityStore<T>, options: UseCaseHookOptions<T, TUseCaseOptions>) => ContextualEntityReducers<T, TEntityReducers>;
|
|
@@ -18,12 +18,9 @@ var useArgumentTypes = exports.useArgumentTypes = function useArgumentTypes(args
|
|
|
18
18
|
var type2 = (0, _typeof2["default"])(arg2);
|
|
19
19
|
if (type2 === 'function') {
|
|
20
20
|
types |= _UseCaseArgumentTypes.UseCaseArgumentTypes.Entity;
|
|
21
|
-
|
|
22
|
-
switch ('number') {
|
|
23
|
-
case type2:
|
|
24
|
-
case (0, _typeof2["default"])(arg3):
|
|
21
|
+
if (typeof arg3 === 'number') {
|
|
25
22
|
types |= _UseCaseArgumentTypes.UseCaseArgumentTypes.Mode;
|
|
26
|
-
|
|
23
|
+
}
|
|
27
24
|
}
|
|
28
25
|
return types;
|
|
29
26
|
});
|
|
@@ -7,7 +7,7 @@ exports.useContextualItem = void 0;
|
|
|
7
7
|
var _ahooks = require("ahooks");
|
|
8
8
|
var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
9
9
|
var _useMemoizedCall = require("../useMemoizedCall");
|
|
10
|
-
var useContextualItem = exports.useContextualItem = function useContextualItem(
|
|
10
|
+
var useContextualItem = exports.useContextualItem = function useContextualItem(contextItem, statuses, createFactory) {
|
|
11
11
|
var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
12
12
|
var create = (0, _useMemoizedCall.useMemoizedCall)(createFactory, deps);
|
|
13
13
|
return (0, _ahooks.useCreation)(function () {
|
|
@@ -22,14 +22,13 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
22
22
|
var renderingEntity = (0, _getRenderingEntity.getRenderingEntity)(statuses, entityState, rootEntity, contextEntity);
|
|
23
23
|
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
24
24
|
var entityRootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityRootEnabled;
|
|
25
|
-
var store = (0, _useContextualItem.useContextualItem)(
|
|
25
|
+
var store = (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
|
|
26
26
|
if (!entityRootEnabled) {
|
|
27
27
|
return new _usecases.EntityStore(null);
|
|
28
28
|
}
|
|
29
29
|
var stateless = (statuses & _UseCaseStatuses.UseCaseStatuses.StatelessEnabled) === _UseCaseStatuses.UseCaseStatuses.StatelessEnabled;
|
|
30
30
|
return new _usecases.EntityStore(renderingEntity, {
|
|
31
|
-
onChange: function onChange(
|
|
32
|
-
var newEntity = _ref.newEntity;
|
|
31
|
+
onChange: function onChange(newEntity) {
|
|
33
32
|
if (stateless) {
|
|
34
33
|
return;
|
|
35
34
|
}
|
|
@@ -45,9 +44,7 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
45
44
|
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|
|
46
45
|
return;
|
|
47
46
|
}
|
|
48
|
-
var onEntityChange = function onEntityChange(
|
|
49
|
-
var newEntity = e.newEntity,
|
|
50
|
-
oldEntity = e.oldEntity;
|
|
47
|
+
var onEntityChange = function onEntityChange(newEntity, oldEntity) {
|
|
51
48
|
var _optionsRef$current = optionsRef.current,
|
|
52
49
|
onChange = _optionsRef$current.onChange,
|
|
53
50
|
watch = _optionsRef$current.watch;
|
|
@@ -56,9 +53,9 @@ var useEntity = exports.useEntity = function useEntity(statuses, rootEntity, con
|
|
|
56
53
|
}
|
|
57
54
|
onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
|
|
58
55
|
};
|
|
59
|
-
store.
|
|
56
|
+
store.watch(onEntityChange);
|
|
60
57
|
return function () {
|
|
61
|
-
store.
|
|
58
|
+
store.unwatch(onEntityChange);
|
|
62
59
|
};
|
|
63
60
|
}, [statuses, store, optionsRef]);
|
|
64
61
|
return (0, _ahooks.useCreation)(function () {
|
|
@@ -6,6 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useGlobalUseCase = void 0;
|
|
7
7
|
var _useUseCase = require("../useUseCase");
|
|
8
8
|
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
9
|
-
var useGlobalUseCase = exports.useGlobalUseCase = function useGlobalUseCase(useCase, options, deps) {
|
|
10
|
-
return (0, _useUseCase.useUseCase)(useCase, _UseCaseModes.UseCaseModes.Global, options, deps);
|
|
9
|
+
var useGlobalUseCase = exports.useGlobalUseCase = function useGlobalUseCase(entity, useCase, options, deps) {
|
|
10
|
+
return (0, _useUseCase.useUseCase)(entity, useCase, _UseCaseModes.UseCaseModes.Global, options, deps);
|
|
11
11
|
};
|
|
@@ -1,26 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
-
var
|
|
4
|
+
var _usecases = require("@mic-rexjs/usecases");
|
|
5
5
|
var _globals = require("@jest/globals");
|
|
6
6
|
var _UseCaseModes = require("../../enums/UseCaseModes");
|
|
7
7
|
var _react = require("@testing-library/react");
|
|
8
8
|
var useUseCaseModule = _interopRequireWildcard(require("../useUseCase"));
|
|
9
|
+
var _ = require(".");
|
|
9
10
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
10
11
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
11
|
-
var
|
|
12
|
-
return
|
|
12
|
+
var numberUseCase = function numberUseCase() {
|
|
13
|
+
return (0, _usecases.entityUseCase)();
|
|
13
14
|
};
|
|
14
15
|
(0, _globals.describe)('useGlobalUseCase', function () {
|
|
15
|
-
(0, _globals.describe)('`useGlobalUseCase` should work the same as `
|
|
16
|
-
(0, _globals.test)('
|
|
16
|
+
(0, _globals.describe)('`useGlobalUseCase` should work the same as `RootCoreCollectionHook`', function () {
|
|
17
|
+
(0, _globals.test)('should pass `UseCaseModes.Global` to `useUseCase`', function () {
|
|
17
18
|
var useMockedUseCase = _globals.jest.fn();
|
|
18
19
|
_globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockImplementation(useMockedUseCase);
|
|
19
20
|
(0, _react.renderHook)(function () {
|
|
20
|
-
(0, _.useGlobalUseCase)(
|
|
21
|
+
(0, _.useGlobalUseCase)(1, numberUseCase);
|
|
21
22
|
});
|
|
22
|
-
(0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(
|
|
23
|
+
(0, _globals.expect)(useMockedUseCase).toHaveBeenCalledWith(1, numberUseCase, _UseCaseModes.UseCaseModes.Global, void 0, void 0);
|
|
23
24
|
_globals.jest.spyOn(useUseCaseModule, 'useUseCase').mockRestore();
|
|
24
25
|
});
|
|
26
|
+
(0, _globals.test)('should should return `CoreCollection` with Provider', function () {
|
|
27
|
+
var _renderHook = (0, _react.renderHook)(function () {
|
|
28
|
+
return (0, _.useGlobalUseCase)(1, numberUseCase);
|
|
29
|
+
}),
|
|
30
|
+
result = _renderHook.result;
|
|
31
|
+
var current = result.current;
|
|
32
|
+
(0, _globals.expect)(current).toEqual([1, {
|
|
33
|
+
setEntity: _globals.expect.any(Function)
|
|
34
|
+
}, _globals.expect.any(Function), void 0, void 0]);
|
|
35
|
+
});
|
|
25
36
|
});
|
|
26
37
|
});
|
|
@@ -18,11 +18,13 @@ var useProvider = exports.useProvider = function useProvider(statuses, context,
|
|
|
18
18
|
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) === _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|
|
19
19
|
return {
|
|
20
20
|
store: store,
|
|
21
|
-
reducers: reducers
|
|
21
|
+
reducers: reducers,
|
|
22
|
+
statuses: statuses
|
|
22
23
|
};
|
|
23
24
|
}
|
|
24
25
|
return {
|
|
25
|
-
reducers: reducers
|
|
26
|
+
reducers: reducers,
|
|
27
|
+
statuses: statuses
|
|
26
28
|
};
|
|
27
29
|
}, [statuses, entity, store, reducers]);
|
|
28
30
|
var contextValueRef = (0, _ahooks.useLatest)(contextValue);
|
|
@@ -20,8 +20,8 @@ var _UseCaseStatuses = require("../../enums/UseCaseStatuses");
|
|
|
20
20
|
var _useEntity3 = require("../useEntity");
|
|
21
21
|
var _useContextualItem = require("../useContextualItem");
|
|
22
22
|
var _cacheCalls = require("../../methods/cacheCalls");
|
|
23
|
-
var _useSafeMode = require("../useSafeMode");
|
|
24
23
|
var useUseCase = exports.useUseCase = function useUseCase() {
|
|
24
|
+
var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
|
|
25
25
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
26
26
|
args[_key] = arguments[_key];
|
|
27
27
|
}
|
|
@@ -30,21 +30,21 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
30
30
|
var _fullArguments = (0, _slicedToArray2["default"])(fullArguments, 5),
|
|
31
31
|
unsafeEntity = _fullArguments[0],
|
|
32
32
|
unsafeUsecase = _fullArguments[1],
|
|
33
|
-
|
|
33
|
+
mode = _fullArguments[2],
|
|
34
34
|
options = _fullArguments[3],
|
|
35
35
|
deps = _fullArguments[4];
|
|
36
36
|
var unkownUsecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
|
|
37
37
|
var usecase = unkownUsecase;
|
|
38
38
|
var entityUseCase = unkownUsecase;
|
|
39
|
-
var
|
|
40
|
-
var mode = (0, _useSafeMode.useSafeMode)(unsafeMode, argumentTypes);
|
|
41
|
-
var context = (0, _useUseCaseContext.useUseCaseContext)(unkownUsecase, argumentTypes, mode);
|
|
39
|
+
var context = (0, _useUseCaseContext.useUseCaseContext)(unkownUsecase, argumentTypes);
|
|
42
40
|
var contextValue = (0, _react.useContext)(context);
|
|
43
41
|
var entityContextValue = contextValue;
|
|
44
42
|
var statuses = (0, _useUseCaseStatuses.useUseCaseStatuses)(argumentTypes, mode, contextValue);
|
|
45
43
|
var _ref = contextValue || {},
|
|
46
44
|
_ref$reducers = _ref.reducers,
|
|
47
|
-
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers
|
|
45
|
+
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers,
|
|
46
|
+
_ref$statuses = _ref.statuses,
|
|
47
|
+
contextStatueses = _ref$statuses === void 0 ? _UseCaseStatuses.UseCaseStatuses.None : _ref$statuses;
|
|
48
48
|
var _ref2 = entityContextValue || {},
|
|
49
49
|
_ref2$store = _ref2.store,
|
|
50
50
|
contextStore = _ref2$store === void 0 ? null : _ref2$store;
|
|
@@ -52,7 +52,7 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
52
52
|
_useEntity2 = (0, _slicedToArray2["default"])(_useEntity, 2),
|
|
53
53
|
entity = _useEntity2[0],
|
|
54
54
|
store = _useEntity2[1];
|
|
55
|
-
var reducers = (0, _useContextualItem.useContextualItem)(
|
|
55
|
+
var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
|
|
56
56
|
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|
|
57
57
|
return usecase(options);
|
|
58
58
|
}
|
|
@@ -61,13 +61,10 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
61
61
|
}, deps);
|
|
62
62
|
var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
|
|
63
63
|
return (0, _ahooks.useCreation)(function () {
|
|
64
|
-
if ((statuses & _UseCaseStatuses.UseCaseStatuses.
|
|
64
|
+
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|
|
65
65
|
return reducers;
|
|
66
66
|
}
|
|
67
67
|
var rootEnabled = (statuses & _UseCaseStatuses.UseCaseStatuses.RootEnabled) === _UseCaseStatuses.UseCaseStatuses.RootEnabled;
|
|
68
|
-
if ((statuses & _UseCaseStatuses.UseCaseStatuses.EntityEnabled) !== _UseCaseStatuses.UseCaseStatuses.EntityEnabled) {
|
|
69
|
-
return rootEnabled ? [reducers, Provider] : reducers;
|
|
70
|
-
}
|
|
71
68
|
var cachedReducers = (0, _cacheCalls.cacheCalls)(reducers, {
|
|
72
69
|
onShouldCache: function onShouldCache() {
|
|
73
70
|
return isRenderingRef.current;
|
|
@@ -76,6 +73,9 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
76
73
|
if (rootEnabled) {
|
|
77
74
|
return [entity, cachedReducers, Provider];
|
|
78
75
|
}
|
|
76
|
+
if ((contextStatueses & _UseCaseStatuses.UseCaseStatuses.GlobalEnabled) === _UseCaseStatuses.UseCaseStatuses.GlobalEnabled) {
|
|
77
|
+
return cachedReducers;
|
|
78
|
+
}
|
|
79
79
|
return [entity, cachedReducers];
|
|
80
|
-
}, [statuses, entity, reducers, Provider, isRenderingRef]);
|
|
80
|
+
}, [statuses, contextStatueses, entity, reducers, Provider, isRenderingRef]);
|
|
81
81
|
};
|