@mic-rexjs/usecases-react 4.0.0-beta.0 → 4.0.0-beta.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/dist/index.min.js.LICENSE.txt +2 -0
- package/es/components/UseCaseFragment/index.js +2 -2
- package/es/enums/Statuses/index.d.ts +86 -10
- package/es/enums/Statuses/index.js +86 -10
- package/es/hooks/useAlternateStatuses/index.d.ts +2 -0
- package/es/hooks/useAlternateStatuses/index.js +16 -0
- package/es/hooks/useChanged/index.d.ts +2 -0
- package/es/hooks/useChanged/index.js +17 -0
- package/es/hooks/useChanged/types.d.ts +3 -0
- package/es/hooks/useContext/index.d.ts +3 -4
- package/es/hooks/useContext/index.js +17 -15
- package/es/hooks/useContext/index.test.js +13 -24
- package/es/hooks/useContextValue/index.d.ts +3 -4
- package/es/hooks/useContextValue/index.js +9 -16
- package/es/hooks/useDepsKey/index.js +11 -9
- package/es/hooks/useEntity/index.d.ts +3 -2
- package/es/hooks/useEntity/index.js +62 -59
- package/es/hooks/useEntityReturn/index.d.ts +5 -0
- package/es/hooks/useEntityReturn/index.js +15 -0
- package/es/hooks/useEntityReturn/types.d.ts +7 -0
- package/es/hooks/useEntityRootExec/index.d.ts +5 -0
- package/es/hooks/useEntityRootExec/index.js +7 -0
- package/es/hooks/useEntityRootExec/types.d.ts +7 -0
- package/es/hooks/useEntityRootReturn/index.d.ts +5 -0
- package/es/hooks/useEntityRootReturn/index.js +14 -0
- package/es/hooks/useEntityRootReturn/types.d.ts +7 -0
- package/es/hooks/useEntityRootReturn/types.js +1 -0
- package/es/hooks/useExec/index.d.ts +2 -3
- package/es/hooks/useExec/index.js +3 -25
- package/es/hooks/useExec/types.d.ts +7 -2
- package/es/hooks/useFullArguments/index.d.ts +2 -3
- package/es/hooks/useFullArguments/index.js +4 -6
- package/es/hooks/useIfExec/index.d.ts +2 -0
- package/es/hooks/useIfExec/index.js +20 -0
- package/es/hooks/useIfExec/types.d.ts +6 -0
- package/es/hooks/useIfExec/types.js +1 -0
- package/es/hooks/useIfReturn/index.d.ts +2 -0
- package/es/hooks/useIfReturn/index.js +22 -0
- package/es/hooks/useIfReturn/types.d.ts +6 -0
- package/es/hooks/useIfReturn/types.js +1 -0
- package/es/hooks/useProvider/index.d.ts +3 -3
- package/es/hooks/useProvider/index.js +15 -13
- package/es/hooks/useProviders/index.js +4 -4
- package/es/hooks/useReducers/index.d.ts +5 -4
- package/es/hooks/useReducers/index.js +47 -10
- package/es/hooks/useReturn/index.d.ts +2 -0
- package/es/hooks/useReturn/index.js +33 -0
- package/es/hooks/useReturn/types.d.ts +11 -0
- package/es/hooks/useReturn/types.js +1 -0
- package/es/hooks/useRootInitializing/index.d.ts +2 -0
- package/es/hooks/useRootInitializing/index.js +14 -0
- package/es/hooks/useRootReturn/index.d.ts +5 -0
- package/es/hooks/useRootReturn/index.js +22 -0
- package/es/hooks/useRootReturn/types.d.ts +14 -0
- package/es/hooks/useRootReturn/types.js +1 -0
- package/es/hooks/useStatuses/index.d.ts +4 -4
- package/es/hooks/useStatuses/index.js +46 -21
- package/es/hooks/useStore/index.d.ts +3 -3
- package/es/hooks/useStore/index.js +24 -47
- package/es/hooks/useThrottleUpdate/index.d.ts +2 -0
- package/es/hooks/useThrottleUpdate/index.js +31 -0
- package/es/hooks/useThrottleUpdate/types.d.ts +3 -0
- package/es/hooks/useThrottleUpdate/types.js +1 -0
- package/es/hooks/useUseCase/index.js +18 -27
- package/es/hooks/useUseCase/index.test.js +415 -236
- package/es/hooks/useUseCase/types.d.ts +13 -2
- package/es/types.d.ts +2 -1
- package/es/usecases/contextUseCase/index.js +21 -38
- package/es/usecases/contextUseCase/types.d.ts +6 -9
- package/es/usecases/lifecycleEventUseCase/index.js +37 -9
- package/es/usecases/lifecycleEventUseCase/types.d.ts +11 -8
- package/lib/components/UseCaseFragment/index.js +2 -2
- package/lib/enums/Statuses/index.js +86 -10
- package/lib/hooks/useAlternateStatuses/index.js +22 -0
- package/lib/hooks/useChanged/index.js +23 -0
- package/lib/hooks/useContext/index.js +19 -17
- package/lib/hooks/useContext/index.test.js +13 -24
- package/lib/hooks/useContextValue/index.js +8 -15
- package/lib/hooks/useDepsKey/index.js +10 -8
- package/lib/hooks/useEntity/index.js +93 -62
- package/lib/hooks/useEntityReturn/index.js +22 -0
- package/lib/hooks/useEntityRootExec/index.js +13 -0
- package/lib/hooks/useEntityRootReturn/index.js +21 -0
- package/lib/hooks/useEntityRootReturn/types.js +5 -0
- package/lib/hooks/useExec/index.js +3 -25
- package/lib/hooks/useFullArguments/index.js +4 -6
- package/lib/hooks/useIfExec/index.js +27 -0
- package/lib/hooks/useIfExec/types.js +5 -0
- package/lib/hooks/useIfReturn/index.js +29 -0
- package/lib/hooks/useIfReturn/types.js +5 -0
- package/lib/hooks/useProvider/index.js +15 -13
- package/lib/hooks/useProviders/index.js +3 -3
- package/lib/hooks/useReducers/index.js +50 -10
- package/lib/hooks/useReturn/index.js +40 -0
- package/lib/hooks/useReturn/types.js +5 -0
- package/lib/hooks/useRootInitializing/index.js +20 -0
- package/lib/hooks/useRootReturn/index.js +30 -0
- package/lib/hooks/useRootReturn/types.js +5 -0
- package/lib/hooks/useStatuses/index.js +47 -21
- package/lib/hooks/useStore/index.js +22 -46
- package/lib/hooks/useThrottleUpdate/index.js +37 -0
- package/lib/hooks/useThrottleUpdate/types.js +5 -0
- package/lib/hooks/useUseCase/index.js +18 -27
- package/lib/hooks/useUseCase/index.test.js +458 -280
- package/lib/usecases/contextUseCase/index.js +21 -38
- package/lib/usecases/lifecycleEventUseCase/index.js +48 -8
- package/package.json +1 -1
- package/es/classes/OptionsSet/index.d.ts +0 -6
- package/es/classes/OptionsSet/index.js +0 -44
- package/es/classes/OptionsSet/types.d.ts +0 -8
- package/es/enums/ArgumentTypes/index.d.ts +0 -4
- package/es/enums/ArgumentTypes/index.js +0 -5
- package/es/hooks/useArgumentTypes/index.d.ts +0 -3
- package/es/hooks/useArgumentTypes/index.js +0 -14
- package/es/hooks/useConstantEntityReducers/index.d.ts +0 -3
- package/es/hooks/useConstantEntityReducers/index.js +0 -7
- package/es/hooks/useConstantFn/index.d.ts +0 -1
- package/es/hooks/useConstantFn/index.js +0 -10
- package/es/hooks/useConstantReducers/index.d.ts +0 -3
- package/es/hooks/useConstantReducers/index.js +0 -6
- package/es/hooks/useContextualItem/index.d.ts +0 -4
- package/es/hooks/useContextualItem/index.js +0 -11
- package/es/hooks/useEntityInitializing/index.d.ts +0 -2
- package/es/hooks/useEntityInitializing/index.js +0 -16
- package/es/hooks/useOptions/index.d.ts +0 -5
- package/es/hooks/useOptions/index.js +0 -54
- package/es/hooks/useOptions/types.d.ts +0 -5
- package/es/hooks/useOptionsSet/index.d.ts +0 -5
- package/es/hooks/useOptionsSet/index.js +0 -16
- package/es/hooks/useRootCreation/index.d.ts +0 -4
- package/es/hooks/useRootCreation/index.js +0 -20
- package/es/hooks/useRootCreation/types.d.ts +0 -3
- package/lib/classes/OptionsSet/index.js +0 -94
- package/lib/enums/ArgumentTypes/index.js +0 -11
- package/lib/hooks/useArgumentTypes/index.js +0 -22
- package/lib/hooks/useConstantEntityReducers/index.js +0 -13
- package/lib/hooks/useConstantFn/index.js +0 -17
- package/lib/hooks/useConstantReducers/index.js +0 -12
- package/lib/hooks/useContextualItem/index.js +0 -17
- package/lib/hooks/useEntityInitializing/index.js +0 -22
- package/lib/hooks/useOptions/index.js +0 -61
- package/lib/hooks/useOptionsSet/index.js +0 -22
- package/lib/hooks/useRootCreation/index.js +0 -26
- /package/es/{classes/OptionsSet → hooks/useChanged}/types.js +0 -0
- /package/es/hooks/{useOptions → useEntityReturn}/types.js +0 -0
- /package/es/hooks/{useRootCreation → useEntityRootExec}/types.js +0 -0
- /package/lib/{classes/OptionsSet → hooks/useChanged}/types.js +0 -0
- /package/lib/hooks/{useOptions → useEntityReturn}/types.js +0 -0
- /package/lib/hooks/{useRootCreation → useEntityRootExec}/types.js +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useReturn } from '../useReturn';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { Statuses } from '../../enums/Statuses';
|
|
4
|
+
export const useRootInitializing = statuses => {
|
|
5
|
+
const rootKey = statuses & Statuses.RootKey;
|
|
6
|
+
const isInitializingRef = useRef(true);
|
|
7
|
+
return useReturn(() => {
|
|
8
|
+
const isInitializing = isInitializingRef.current;
|
|
9
|
+
isInitializingRef.current = false;
|
|
10
|
+
return isInitializing;
|
|
11
|
+
}, () => {
|
|
12
|
+
isInitializingRef.current = true;
|
|
13
|
+
}, [rootKey]);
|
|
14
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useIfReturn } from '../useIfReturn';
|
|
2
|
+
import { Statuses } from '../../enums/Statuses';
|
|
3
|
+
/**
|
|
4
|
+
* 只有 `ReducersHook` 或 `RootCoreCollectionHook` 模式下才执行相关回调
|
|
5
|
+
*/
|
|
6
|
+
export const useRootReturn = (statuses, callback, arg3, arg4, arg5) => {
|
|
7
|
+
const isDepsArg3 = Array.isArray(arg3);
|
|
8
|
+
const isDepsArg4 = Array.isArray(arg4);
|
|
9
|
+
const isStatusesArg3 = typeof arg3 === 'number';
|
|
10
|
+
const isStatusesArg4 = typeof arg4 === 'number';
|
|
11
|
+
const destructor = !isDepsArg3 && !isStatusesArg3 ? arg3 : null;
|
|
12
|
+
const rootStatuses = isStatusesArg3 ? arg3 : isStatusesArg4 ? arg4 : Statuses.RootRuntime;
|
|
13
|
+
const deps = isDepsArg3 ? arg3 : isDepsArg4 ? arg4 : arg5 || [];
|
|
14
|
+
const rootKey = statuses & Statuses.RootKey;
|
|
15
|
+
const rootCalled = (statuses & rootStatuses) === rootStatuses;
|
|
16
|
+
const isEntityRootRuntime = (statuses & Statuses.EntityRootRuntime) === Statuses.EntityRootRuntime;
|
|
17
|
+
return useIfReturn(rootCalled, () => {
|
|
18
|
+
return callback(isEntityRootRuntime);
|
|
19
|
+
}, () => {
|
|
20
|
+
destructor === null || destructor === void 0 || destructor(isEntityRootRuntime);
|
|
21
|
+
}, [rootKey, ...deps]);
|
|
22
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Statuses } from '../../enums/Statuses';
|
|
2
|
+
import { Dependencies } from '../../types';
|
|
3
|
+
export interface RootReturnCallback<T> {
|
|
4
|
+
(isEntityRootRuntime: boolean): T;
|
|
5
|
+
}
|
|
6
|
+
export interface RootReturnDestructor {
|
|
7
|
+
(isEntityRootRuntime: boolean): void;
|
|
8
|
+
}
|
|
9
|
+
export interface RootReturnHook {
|
|
10
|
+
<T>(statuses: Statuses, callback: RootReturnCallback<T>, deps?: Dependencies): T | null;
|
|
11
|
+
<T>(statuses: Statuses, callback: RootReturnCallback<T>, rootStatuses?: Statuses, deps?: Dependencies): T | null;
|
|
12
|
+
<T>(statuses: Statuses, callback: RootReturnCallback<T>, destructor: RootReturnDestructor | null, deps?: Dependencies): T | null;
|
|
13
|
+
<T>(statuses: Statuses, callback: RootReturnCallback<T>, destructor: RootReturnDestructor | null, rootStatuses?: Statuses, deps?: Dependencies): T | null;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
1
|
+
import { FullParameters } from '../useFullArguments/types';
|
|
3
2
|
import { Statuses } from '../../enums/Statuses';
|
|
4
|
-
import {
|
|
5
|
-
|
|
3
|
+
import { UnknownReducerMap } from '../../types';
|
|
4
|
+
import { EntityUseCaseContextValue, UseCaseContext } from '../../usecases/contextUseCase/types';
|
|
5
|
+
export declare const useStatuses: <T, TReducers extends UnknownReducerMap<T>, TUseCaseOptions extends object>(fullArguments: FullParameters<T, TReducers, TUseCaseOptions>, context: UseCaseContext<EntityUseCaseContextValue<T, TReducers>>, isEntityRoot: boolean) => Statuses;
|
|
@@ -1,25 +1,50 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import { useAlternateStatuses } from '../useAlternateStatuses';
|
|
3
|
+
import { useDepsKey } from '../useDepsKey';
|
|
2
4
|
import { useContext } from 'react';
|
|
3
|
-
import { ArgumentTypes } from '../../enums/ArgumentTypes';
|
|
4
5
|
import { Statuses } from '../../enums/Statuses';
|
|
5
|
-
|
|
6
|
+
// 遵循一个要求:参数不变,`statuses` 的计算结果不能变
|
|
7
|
+
export const useStatuses = (fullArguments, context, isEntityRoot) => {
|
|
8
|
+
let statuses = Statuses.None;
|
|
9
|
+
const _fullArguments = _slicedToArray(fullArguments, 4),
|
|
10
|
+
entity = _fullArguments[0],
|
|
11
|
+
usecase = _fullArguments[1],
|
|
12
|
+
deps = _fullArguments[3];
|
|
13
|
+
const isInitializer = typeof entity === 'function';
|
|
6
14
|
const contextValue = useContext(context);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
const isEntityContext = !isEntityRoot && contextValue !== null;
|
|
16
|
+
const _ref = isEntityContext ? contextValue : {
|
|
17
|
+
key: isEntityRoot ? Statuses.RootX : Statuses.RootY
|
|
18
|
+
},
|
|
19
|
+
key = _ref.key;
|
|
20
|
+
const depsKey = useDepsKey(deps);
|
|
21
|
+
const rootKey = useDepsKey([usecase, key]);
|
|
22
|
+
const reducersKey = useDepsKey([rootKey, depsKey]);
|
|
23
|
+
const rootStatuses = useAlternateStatuses(rootKey, Statuses.RootX, Statuses.RootY);
|
|
24
|
+
const usecaseStatuses = useAlternateStatuses(usecase, Statuses.UseCaseX, Statuses.UseCaseY);
|
|
25
|
+
const reducersStatuses = useAlternateStatuses(reducersKey, Statuses.ReducersX, Statuses.ReducersY);
|
|
26
|
+
const depsStatuses = useAlternateStatuses(depsKey, Statuses.DepsX, Statuses.DepsY);
|
|
27
|
+
const initialEntityStatuses = useAlternateStatuses(isInitializer ? reducersKey : entity, Statuses.InitialEntityX, Statuses.InitialEntityY);
|
|
28
|
+
switch (true) {
|
|
29
|
+
case isEntityRoot:
|
|
30
|
+
// `entity` 参数,只有 `entity root` 模式才有
|
|
31
|
+
statuses |= initialEntityStatuses;
|
|
32
|
+
statuses |= Statuses.EntityRootRuntime;
|
|
33
|
+
break;
|
|
34
|
+
case isEntityContext:
|
|
35
|
+
statuses |= Statuses.EntityContextRuntime;
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
statuses |= Statuses.RootRuntime;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
// `root` 是肯定有的,要么自身为 `root`,要么上下文有 `root`
|
|
42
|
+
statuses |= rootStatuses;
|
|
43
|
+
// `usecase` 作为标识符参数,也是肯定有的
|
|
44
|
+
statuses |= usecaseStatuses;
|
|
45
|
+
// `reducers` 作为 `usecase` 的产物,也是肯定有的
|
|
46
|
+
statuses |= reducersStatuses;
|
|
47
|
+
// `deps` 虽然是可选参数,但是默认值是空数组 `[]`,所以也是肯定有的
|
|
48
|
+
statuses |= depsStatuses;
|
|
49
|
+
return statuses;
|
|
25
50
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EntityStore } from '@mic-rexjs/usecases';
|
|
2
2
|
import { Statuses } from '../../enums/Statuses';
|
|
3
|
-
import {
|
|
3
|
+
import { EntityInitializer, UnknownReducerMap } from '../../types';
|
|
4
4
|
import { EntityUseCaseContextValue, UseCaseContext } from '../../usecases/contextUseCase/types';
|
|
5
|
-
export declare const useStore: <T
|
|
5
|
+
export declare const useStore: <T, TReducers extends UnknownReducerMap<T>>(entityArg: T | EntityInitializer<T>, context: UseCaseContext<EntityUseCaseContextValue<T, TReducers>>, statuses: Statuses) => EntityStore<T>;
|
|
@@ -1,63 +1,40 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { useExec } from '../useExec';
|
|
1
|
+
import { useEntityRootExec } from '../useEntityRootExec';
|
|
2
|
+
import { useRootInitializing } from '../useRootInitializing';
|
|
3
|
+
import { useRootReturn } from '../useRootReturn';
|
|
5
4
|
import { EntityStore } from '@mic-rexjs/usecases';
|
|
6
|
-
import {
|
|
7
|
-
import { useContext, useRef, useState } from 'react';
|
|
5
|
+
import { useContext, useRef } from 'react';
|
|
8
6
|
import { Statuses } from '../../enums/Statuses';
|
|
9
7
|
import { runEntityInitializer } from '../../methods/runEntityInitializer';
|
|
10
|
-
export const useStore =
|
|
11
|
-
let deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
12
|
-
const isFunction = typeof entityArg === 'function';
|
|
13
|
-
const isInitializing = useEntityInitializing(statuses);
|
|
8
|
+
export const useStore = (entityArg, context, statuses) => {
|
|
14
9
|
const createEntityListRef = useRef([]);
|
|
10
|
+
const isInitializing = useRootInitializing(statuses);
|
|
15
11
|
const contextValue = useContext(context);
|
|
16
12
|
const _ref = contextValue || {},
|
|
17
13
|
_ref$store = _ref.store,
|
|
18
14
|
contextStore = _ref$store === void 0 ? null : _ref$store;
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
}),
|
|
23
|
-
_useState2 = _slicedToArray(_useState, 1),
|
|
24
|
-
store = _useState2[0];
|
|
25
|
-
const prevEntityArg = usePrevious(entityArg, () => {
|
|
26
|
-
return true;
|
|
15
|
+
const initialEntityKey = statuses & Statuses.InitialEntityKey;
|
|
16
|
+
const rootStore = useRootReturn(statuses, () => {
|
|
17
|
+
return new EntityStore(void 0);
|
|
27
18
|
});
|
|
28
|
-
|
|
29
|
-
* 这里只有初始化和 `deps` 变化时,才会执行;
|
|
30
|
-
* 比如:`useUseCase(entityInitailizer, usecase, options, [key])`,
|
|
31
|
-
* 当首次调用 `entityInitailizer` 或 `key` 变化,才会触发以下事件
|
|
32
|
-
*/
|
|
19
|
+
const store = rootStore || contextStore;
|
|
33
20
|
const onRunInitializer = () => {
|
|
21
|
+
if (!isInitializing) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
34
24
|
const createEntityList = createEntityListRef.current;
|
|
35
25
|
createEntityListRef.current = runEntityInitializer(store, entityArg, createEntityList, isInitializing);
|
|
36
26
|
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
* 比如 `useUseCase(entity, usecase)`,
|
|
41
|
-
* 当传入的 `entity` 变化时,执行一下同步操作。
|
|
42
|
-
*/
|
|
43
|
-
useExec(() => {
|
|
44
|
-
switch (true) {
|
|
45
|
-
case !entityRootEnabled:
|
|
46
|
-
case isFunction:
|
|
47
|
-
return;
|
|
48
|
-
case isInitializing:
|
|
49
|
-
store.initValue(entityArg);
|
|
50
|
-
return;
|
|
51
|
-
case entityArg === prevEntityArg:
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
// 执行同步操作
|
|
55
|
-
store.setValue(entityArg);
|
|
56
|
-
});
|
|
57
|
-
return useContextualItem(contextStore, statuses, () => {
|
|
58
|
-
if (entityRootEnabled && isFunction) {
|
|
27
|
+
useEntityRootExec(statuses, () => {
|
|
28
|
+
const isFunction = typeof entityArg === 'function';
|
|
29
|
+
if (isFunction) {
|
|
59
30
|
onRunInitializer();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (isInitializing) {
|
|
34
|
+
store.initValue(entityArg);
|
|
35
|
+
return;
|
|
60
36
|
}
|
|
61
|
-
|
|
62
|
-
},
|
|
37
|
+
store.setValue(entityArg);
|
|
38
|
+
}, [initialEntityKey]);
|
|
39
|
+
return store;
|
|
63
40
|
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { useMemoizedFn, useUpdate } from 'ahooks';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
export const useThrottleUpdate = () => {
|
|
4
|
+
const update = useUpdate();
|
|
5
|
+
const prevUpdateKeyRef = useRef(-1);
|
|
6
|
+
const prevUpdateTimeRef = useRef(0);
|
|
7
|
+
const triggerUpdate = () => {
|
|
8
|
+
prevUpdateTimeRef.current = Date.now();
|
|
9
|
+
update();
|
|
10
|
+
};
|
|
11
|
+
return useMemoizedFn(function () {
|
|
12
|
+
let wait = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
13
|
+
if (wait === 0) {
|
|
14
|
+
triggerUpdate();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const prevUpdateKey = prevUpdateKeyRef.current;
|
|
18
|
+
const prevUpdateTime = prevUpdateTimeRef.current;
|
|
19
|
+
const time = Date.now();
|
|
20
|
+
const delay = wait - (time - prevUpdateTime);
|
|
21
|
+
clearTimeout(prevUpdateKey);
|
|
22
|
+
if (delay <= 0) {
|
|
23
|
+
triggerUpdate();
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const key = setTimeout(() => {
|
|
27
|
+
triggerUpdate();
|
|
28
|
+
}, delay);
|
|
29
|
+
prevUpdateKeyRef.current = key;
|
|
30
|
+
});
|
|
31
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,47 +1,38 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import { useArgumentTypes } from '../useArgumentTypes';
|
|
3
|
-
import { useConstantFn } from '../useConstantFn';
|
|
4
2
|
import { useContext } from '../useContext';
|
|
5
3
|
import { useContextValue } from '../useContextValue';
|
|
6
4
|
import { useEntity } from '../useEntity';
|
|
7
5
|
import { useFullArguments } from '../useFullArguments';
|
|
8
6
|
import { useIsRenderingRef } from '../useIsRenderingRef';
|
|
9
|
-
import { useOptions } from '../useOptions';
|
|
10
|
-
import { useOptionsSet } from '../useOptionsSet';
|
|
11
7
|
import { useProvider } from '../useProvider';
|
|
12
8
|
import { useReducers } from '../useReducers';
|
|
9
|
+
import { useReturn } from '../useReturn';
|
|
13
10
|
import { useStatuses } from '../useStatuses';
|
|
14
11
|
import { useStore } from '../useStore';
|
|
15
|
-
import { useCreation } from 'ahooks';
|
|
16
12
|
import { Statuses } from '../../enums/Statuses';
|
|
17
13
|
import { cacheCalls } from '../../methods/cacheCalls';
|
|
18
14
|
export const useUseCase = function () {
|
|
19
|
-
const isRenderingRef = useIsRenderingRef();
|
|
20
15
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
21
16
|
args[_key] = arguments[_key];
|
|
22
17
|
}
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
18
|
+
const arg2 = args[1];
|
|
19
|
+
const isEntityRoot = typeof arg2 === 'function';
|
|
20
|
+
const fullArguments = useFullArguments(args, isEntityRoot);
|
|
21
|
+
const _fullArguments = _slicedToArray(fullArguments, 3),
|
|
26
22
|
unsafeEntity = _fullArguments[0],
|
|
27
|
-
|
|
28
|
-
options = _fullArguments[2]
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const optionsSet = useOptionsSet(entityContext, statuses);
|
|
36
|
-
const _useOptions = useOptions(options, optionsSet, statuses, deps),
|
|
37
|
-
hookOptions = _useOptions.hookOptions,
|
|
38
|
-
usecaseOptions = _useOptions.usecaseOptions;
|
|
39
|
-
const reducers = useReducers(usecase, store, context, statuses, usecaseOptions, deps);
|
|
40
|
-
const entity = useEntity(store, statuses, hookOptions);
|
|
41
|
-
const contextValue = useContextValue(store, reducers, optionsSet, statuses);
|
|
23
|
+
usecase = _fullArguments[1],
|
|
24
|
+
options = _fullArguments[2];
|
|
25
|
+
const context = useContext(usecase, isEntityRoot);
|
|
26
|
+
const statuses = useStatuses(fullArguments, context, isEntityRoot);
|
|
27
|
+
const store = useStore(unsafeEntity, context, statuses);
|
|
28
|
+
const reducers = useReducers(usecase, store, context, statuses, options);
|
|
29
|
+
const entity = useEntity(store, reducers, statuses, options);
|
|
30
|
+
const contextValue = useContextValue(entity, store, reducers, statuses);
|
|
42
31
|
const Provider = useProvider(context, contextValue);
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
const isRenderingRef = useIsRenderingRef();
|
|
33
|
+
return useReturn(() => {
|
|
34
|
+
const hasEntity = (statuses & Statuses.Entity) === Statuses.Entity;
|
|
35
|
+
if (!hasEntity) {
|
|
45
36
|
return reducers;
|
|
46
37
|
}
|
|
47
38
|
const cachedReducers = cacheCalls(reducers, {
|
|
@@ -58,5 +49,5 @@ export const useUseCase = function () {
|
|
|
58
49
|
...entity
|
|
59
50
|
} : entity;
|
|
60
51
|
return [newEntity, cachedReducers, Provider];
|
|
61
|
-
}, [
|
|
52
|
+
}, [entity, reducers, Provider, statuses]);
|
|
62
53
|
};
|