@mic-rexjs/usecases-react 3.2.0 → 3.6.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/dist/index.min.js.LICENSE.txt +0 -2
- package/es/components/RenderingEventTrigger/index.d.ts +2 -0
- package/es/components/RenderingEventTrigger/index.js +7 -0
- package/es/components/RenderingEventTrigger/types.d.ts +3 -0
- package/es/hooks/useContextualItem/index.js +2 -3
- package/es/hooks/useDepsKey/index.js +19 -9
- package/es/hooks/useEntity/index.d.ts +1 -4
- package/es/hooks/useEntity/index.js +59 -50
- package/es/hooks/useEntityInitializing/index.d.ts +2 -0
- package/es/hooks/useEntityInitializing/index.js +16 -0
- package/es/hooks/useExec/index.d.ts +2 -1
- package/es/hooks/useExec/index.js +3 -3
- package/es/hooks/useExec/types.d.ts +3 -0
- package/es/hooks/useProvider/index.d.ts +1 -1
- package/es/hooks/useProvider/index.js +7 -3
- package/es/hooks/useProvider/types.d.ts +1 -1
- package/es/hooks/useReducers/index.js +8 -6
- package/es/hooks/useStore/index.d.ts +1 -2
- package/es/hooks/useStore/index.js +55 -69
- package/es/hooks/useUseCase/index.js +5 -6
- package/es/hooks/useUseCase/index.test.js +92 -35
- package/es/index.d.ts +2 -2
- package/es/index.js +1 -1
- package/es/methods/runEntityInitializer/index.d.ts +3 -0
- package/es/methods/runEntityInitializer/index.js +67 -0
- package/es/methods/triggerWatchers/index.js +3 -3
- package/es/usecases/lifecycleEventUseCase/index.d.ts +3 -0
- package/es/usecases/lifecycleEventUseCase/index.js +34 -0
- package/es/usecases/lifecycleEventUseCase/types.d.ts +36 -0
- package/es/usecases/lifecycleEventUseCase/types.js +1 -0
- package/es/usecases/lifecycleUseCase/index.d.ts +2 -0
- package/es/usecases/lifecycleUseCase/index.js +21 -0
- package/es/usecases/lifecycleUseCase/types.d.ts +5 -0
- package/es/usecases/lifecycleUseCase/types.js +1 -0
- package/es/usecases/methodUseCase/index.js +4 -4
- package/es/usecases/objectUtilsUseCase/index.d.ts +2 -0
- package/es/usecases/objectUtilsUseCase/index.js +131 -0
- package/es/usecases/objectUtilsUseCase/types.d.ts +14 -0
- package/es/usecases/objectUtilsUseCase/types.js +1 -0
- package/lib/components/RenderingEventTrigger/index.js +13 -0
- package/lib/hooks/useContextualItem/index.js +3 -4
- package/lib/hooks/useDepsKey/index.js +19 -10
- package/lib/hooks/useEntity/index.js +59 -50
- package/lib/hooks/useEntityInitializing/index.js +22 -0
- package/lib/hooks/useExec/index.js +3 -3
- package/lib/hooks/useProvider/index.js +7 -3
- package/lib/hooks/useReducers/index.js +9 -7
- package/lib/hooks/useStore/index.js +54 -67
- package/lib/hooks/useUseCase/index.js +6 -7
- package/lib/hooks/useUseCase/index.test.js +86 -35
- package/lib/index.js +3 -3
- package/lib/methods/runEntityInitializer/index.js +73 -0
- package/lib/methods/triggerWatchers/index.js +3 -3
- package/lib/usecases/lifecycleEventUseCase/index.js +40 -0
- package/lib/usecases/lifecycleEventUseCase/types.js +5 -0
- package/lib/usecases/{lifeCycleUseCase → lifecycleUseCase}/index.js +14 -12
- package/lib/usecases/lifecycleUseCase/types.js +5 -0
- package/lib/usecases/methodUseCase/index.js +4 -4
- package/lib/usecases/objectUtilsUseCase/index.js +140 -0
- package/lib/usecases/objectUtilsUseCase/types.js +5 -0
- package/package.json +3 -3
- package/es/usecases/lifeCycleUseCase/index.d.ts +0 -2
- package/es/usecases/lifeCycleUseCase/index.js +0 -18
- package/es/usecases/lifeCycleUseCase/types.d.ts +0 -9
- package/es/usecases/valueUseCase/index.d.ts +0 -2
- package/es/usecases/valueUseCase/index.js +0 -168
- package/es/usecases/valueUseCase/types.d.ts +0 -21
- package/lib/usecases/valueUseCase/index.js +0 -219
- /package/es/{usecases/lifeCycleUseCase → components/RenderingEventTrigger}/types.js +0 -0
- /package/es/{usecases/valueUseCase → hooks/useExec}/types.js +0 -0
- /package/lib/{usecases/lifeCycleUseCase → components/RenderingEventTrigger}/types.js +0 -0
- /package/lib/{usecases/valueUseCase → hooks/useExec}/types.js +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
export const objectUtilsUseCase = () => {
|
|
3
|
+
const isObject = target => {
|
|
4
|
+
if (typeof target !== 'object' || target === null) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
return true;
|
|
8
|
+
};
|
|
9
|
+
const hasField = (target, field) => {
|
|
10
|
+
const isObj = isObject(target);
|
|
11
|
+
if (isObj) {
|
|
12
|
+
return Object.hasOwn(target, field);
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
};
|
|
16
|
+
const isEqual = (target1, target2, onFailed) => {
|
|
17
|
+
if (target1 === target2) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
const isObject1 = isObject(target1);
|
|
21
|
+
const isObject2 = isObject(target2);
|
|
22
|
+
const keys1 = isObject1 ? Object.keys(target1) : [];
|
|
23
|
+
const keys2 = isObject2 ? Object.keys(target2) : [];
|
|
24
|
+
const hasCallback = typeof onFailed === 'function';
|
|
25
|
+
if (!isObject1 && !isObject2) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
let allMatched = true;
|
|
29
|
+
const length1 = keys1.length;
|
|
30
|
+
const keys = [...keys1, ...keys2];
|
|
31
|
+
for (let i = 0, length = keys.length; i < length; i++) {
|
|
32
|
+
const key = keys[i];
|
|
33
|
+
const isInKey1 = keys1.includes(key);
|
|
34
|
+
const isFromKeys2 = i >= length1;
|
|
35
|
+
const isUsed = isFromKeys2 && isInKey1;
|
|
36
|
+
if (isUsed) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const hasField1 = hasField(target1, key);
|
|
40
|
+
const hasField2 = hasField(target2, key);
|
|
41
|
+
const value1 = hasField1 ? target1[key] : void 0;
|
|
42
|
+
const value2 = hasField2 ? target2[key] : void 0;
|
|
43
|
+
const matched = value1 === value2;
|
|
44
|
+
if (hasField1 && hasField2 && matched) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
allMatched = false;
|
|
48
|
+
if (hasCallback) {
|
|
49
|
+
onFailed(key, value2, value1);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
return allMatched;
|
|
55
|
+
};
|
|
56
|
+
const matchProperty = (target1, target2, fieldPath, onFailed) => {
|
|
57
|
+
let allMatched = true;
|
|
58
|
+
let currentFieldPath = fieldPath;
|
|
59
|
+
const list = [{
|
|
60
|
+
fieldPaths: [],
|
|
61
|
+
newEntity: target2,
|
|
62
|
+
newValue: target2,
|
|
63
|
+
oldEntity: target1,
|
|
64
|
+
oldValue: target1
|
|
65
|
+
}];
|
|
66
|
+
do {
|
|
67
|
+
const _list$shift = list.shift(),
|
|
68
|
+
oldValue = _list$shift.oldValue,
|
|
69
|
+
newValue = _list$shift.newValue,
|
|
70
|
+
fieldPaths = _list$shift.fieldPaths;
|
|
71
|
+
const _ref = currentFieldPath.match(/^([^.]+)\.(.+)$/) || [],
|
|
72
|
+
_ref2 = _slicedToArray(_ref, 3),
|
|
73
|
+
_ref2$ = _ref2[1],
|
|
74
|
+
key = _ref2$ === void 0 ? currentFieldPath : _ref2$,
|
|
75
|
+
_ref2$2 = _ref2[2],
|
|
76
|
+
subFieldPath = _ref2$2 === void 0 ? '' : _ref2$2;
|
|
77
|
+
const hasOldField = hasField(oldValue, key);
|
|
78
|
+
const hasNewField = hasField(newValue, key);
|
|
79
|
+
if (hasOldField || hasNewField) {
|
|
80
|
+
const _ref3 = hasOldField ? [oldValue[key]] : [],
|
|
81
|
+
_ref4 = _slicedToArray(_ref3, 1),
|
|
82
|
+
oldSubValue = _ref4[0];
|
|
83
|
+
const _ref5 = hasNewField ? [newValue[key]] : [],
|
|
84
|
+
_ref6 = _slicedToArray(_ref5, 1),
|
|
85
|
+
newSubValue = _ref6[0];
|
|
86
|
+
const result = {
|
|
87
|
+
fieldPaths: [...fieldPaths, key],
|
|
88
|
+
newEntity: target2,
|
|
89
|
+
newValue: newSubValue,
|
|
90
|
+
oldEntity: target1,
|
|
91
|
+
oldValue: oldSubValue
|
|
92
|
+
};
|
|
93
|
+
if (subFieldPath) {
|
|
94
|
+
currentFieldPath = subFieldPath;
|
|
95
|
+
list.push(result);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (newSubValue === oldSubValue) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
allMatched = false;
|
|
102
|
+
onFailed === null || onFailed === void 0 || onFailed(result);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (/^\d+^/.test(key)) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const oldArray = Array.isArray(oldValue) ? oldValue : [];
|
|
109
|
+
const newArray = Array.isArray(newValue) ? newValue : [];
|
|
110
|
+
const oldLength = oldArray.length;
|
|
111
|
+
const newLength = newArray.length;
|
|
112
|
+
const length = Math.max(oldLength, newLength);
|
|
113
|
+
for (let i = 0; i < length; i++) {
|
|
114
|
+
list.push({
|
|
115
|
+
fieldPaths: [...fieldPaths, `${i}`],
|
|
116
|
+
newEntity: target2,
|
|
117
|
+
newValue: newArray[i],
|
|
118
|
+
oldEntity: target1,
|
|
119
|
+
oldValue: oldArray[i]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
} while (list.length > 0);
|
|
123
|
+
return allMatched;
|
|
124
|
+
};
|
|
125
|
+
return {
|
|
126
|
+
hasField,
|
|
127
|
+
isObject,
|
|
128
|
+
isEqual,
|
|
129
|
+
matchProperty
|
|
130
|
+
};
|
|
131
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Reducers } from '@mic-rexjs/usecases';
|
|
2
|
+
import { MatchPropertyFailedResult } from '../../entities/matchPropertyFailedResult/types';
|
|
3
|
+
export interface MatchPropertyFailedCallback<T> {
|
|
4
|
+
(result: MatchPropertyFailedResult<T>): void;
|
|
5
|
+
}
|
|
6
|
+
export interface IsEqualFailedCallback<T> {
|
|
7
|
+
<K extends keyof T>(key: K, newValue: T[K], oldValue: T[K]): void;
|
|
8
|
+
}
|
|
9
|
+
export type ObjectUtilsReducers = Reducers<{
|
|
10
|
+
hasField<T>(target: T, field: PropertyKey): boolean;
|
|
11
|
+
isObject<T>(target: T): boolean;
|
|
12
|
+
isEqual<T>(target1: T, target2: T, onFailed?: IsEqualFailedCallback<T>): boolean;
|
|
13
|
+
matchProperty<T>(entity: T, value: T, fieldPath: string, onFailed?: MatchPropertyFailedCallback<T>): boolean;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RenderingEventTrigger = void 0;
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var RenderingEventTrigger = exports.RenderingEventTrigger = function RenderingEventTrigger(_ref) {
|
|
10
|
+
var onRendering = _ref.onRendering;
|
|
11
|
+
onRendering === null || onRendering === void 0 || onRendering();
|
|
12
|
+
return (0, _jsxRuntime.jsx)(_react.Fragment, {});
|
|
13
|
+
};
|
|
@@ -4,18 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.useContextualItem = void 0;
|
|
7
|
-
var _useConstantReducers2 = require("../useConstantReducers");
|
|
8
7
|
var _useDepsKey = require("../useDepsKey");
|
|
9
8
|
var _ahooks = require("ahooks");
|
|
10
9
|
var _Statuses = require("../../enums/Statuses");
|
|
11
|
-
var
|
|
10
|
+
var _methodUseCase2 = require("../../usecases/methodUseCase");
|
|
12
11
|
var useContextualItem = exports.useContextualItem = function useContextualItem(contextItem, statuses, createFactory) {
|
|
13
12
|
var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
14
13
|
var depsKey = (0, _useDepsKey.useDepsKey)(deps);
|
|
15
14
|
var factoryRef = (0, _ahooks.useLatest)(createFactory);
|
|
16
|
-
var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
|
|
17
|
-
cacheCall = _useConstantReducers.cacheCall;
|
|
18
15
|
var onCache = (0, _ahooks.useMemoizedFn)(function () {
|
|
16
|
+
var _methodUseCase = (0, _methodUseCase2.methodUseCase)(),
|
|
17
|
+
cacheCall = _methodUseCase.cacheCall;
|
|
19
18
|
var currentFactory = factoryRef.current;
|
|
20
19
|
// 防止在以下 `onCreate()` 多次调用实际 `factory`
|
|
21
20
|
return cacheCall(currentFactory, {
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.useDepsKey = void 0;
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
7
|
+
var _useConstantReducers2 = require("../useConstantReducers");
|
|
8
|
+
var _ahooks = require("ahooks");
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _objectUtilsUseCase = require("../../usecases/objectUtilsUseCase");
|
|
11
11
|
var useDepsKey = exports.useDepsKey = function useDepsKey(deps) {
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
var keyRef = (0, _react.useRef)(0);
|
|
13
|
+
var prevDeps = (0, _ahooks.usePrevious)(deps);
|
|
14
|
+
var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_objectUtilsUseCase.objectUtilsUseCase),
|
|
15
|
+
isEqual = _useConstantReducers.isEqual;
|
|
16
|
+
var equal = isEqual(deps, prevDeps);
|
|
17
|
+
var getDepsKey = (0, _ahooks.useMemoizedFn)(function () {
|
|
18
|
+
var key = keyRef.current;
|
|
19
|
+
if (equal) {
|
|
20
|
+
return key;
|
|
21
|
+
}
|
|
22
|
+
var newKey = key + 1;
|
|
23
|
+
keyRef.current = newKey;
|
|
24
|
+
return newKey;
|
|
25
|
+
});
|
|
26
|
+
return getDepsKey();
|
|
18
27
|
};
|
|
@@ -4,27 +4,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.useEntity = void 0;
|
|
7
|
-
var
|
|
7
|
+
var _useConstant = require("../useConstant");
|
|
8
|
+
var _useConstantReducers2 = require("../useConstantReducers");
|
|
9
|
+
var _useEntityInitializing = require("../useEntityInitializing");
|
|
8
10
|
var _useExec = require("../useExec");
|
|
11
|
+
var _usecases = require("@mic-rexjs/usecases");
|
|
9
12
|
var _ahooks = require("ahooks");
|
|
10
13
|
var _react = require("react");
|
|
11
14
|
var _Statuses = require("../../enums/Statuses");
|
|
12
15
|
var _triggerWatchers = require("../../methods/triggerWatchers");
|
|
13
|
-
var
|
|
14
|
-
var useEntity = exports.useEntity = function useEntity(
|
|
15
|
-
var update = (0, _ahooks.useUpdate)();
|
|
16
|
-
var isFunction = typeof entityArg === 'function';
|
|
16
|
+
var _lifecycleEventUseCase = require("../../usecases/lifecycleEventUseCase");
|
|
17
|
+
var useEntity = exports.useEntity = function useEntity(store, statuses, options) {
|
|
17
18
|
var entity = store.value;
|
|
18
|
-
var
|
|
19
|
+
var update = (0, _ahooks.useUpdate)();
|
|
20
|
+
var isInitializing = (0, _useEntityInitializing.useEntityInitializing)(statuses);
|
|
19
21
|
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
20
22
|
var prevEntityRef = (0, _react.useRef)(entity);
|
|
21
23
|
var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
|
|
22
24
|
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(function () {
|
|
26
|
+
return (0, _lifecycleEventUseCase.lifecycleEventUseCase)();
|
|
27
|
+
}),
|
|
28
|
+
bindLifecycleEventsKey = _useConstantReducers.bindLifecycleEventsKey,
|
|
29
|
+
getLifecycleEvents = _useConstantReducers.getLifecycleEvents,
|
|
30
|
+
deleteLifecycleEvents = _useConstantReducers.deleteLifecycleEvents;
|
|
31
|
+
var lifecycleKey = (0, _useConstant.useConstant)(function () {
|
|
32
|
+
var _utilsUseCase = (0, _usecases.utilsUseCase)(),
|
|
33
|
+
createKey = _utilsUseCase.createKey;
|
|
34
|
+
return createKey();
|
|
35
|
+
});
|
|
28
36
|
var onTriggerWatchers = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
29
37
|
var watch = optionsRef.current.watch;
|
|
30
38
|
if (!watch) {
|
|
@@ -32,49 +40,56 @@ var useEntity = exports.useEntity = function useEntity(entityArg, store, reducer
|
|
|
32
40
|
}
|
|
33
41
|
(0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
|
|
34
42
|
});
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
prevEntityRef.current
|
|
38
|
-
onTriggerWatchers(newEntity, oldEntity);
|
|
39
|
-
onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
|
|
40
|
-
if (!entityRootEnabled) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
update();
|
|
44
|
-
});
|
|
45
|
-
var onValueChange = (0, _ahooks.useMemoizedFn)(function () {
|
|
43
|
+
var onEntityUpdate = (0, _ahooks.useMemoizedFn)(function () {
|
|
44
|
+
var newEntity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : entity;
|
|
45
|
+
var oldEntity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : prevEntityRef.current;
|
|
46
46
|
if (!entityEnabled) {
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
var prevEntity = prevEntityRef.current;
|
|
50
|
-
if (
|
|
50
|
+
if (prevEntity === newEntity) {
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
var _getLifecycleEvents = getLifecycleEvents(lifecycleKey),
|
|
54
|
+
onUpdate = _getLifecycleEvents.onUpdate;
|
|
55
|
+
prevEntityRef.current = newEntity;
|
|
56
|
+
onTriggerWatchers(newEntity, oldEntity);
|
|
57
|
+
onUpdate === null || onUpdate === void 0 || onUpdate(newEntity, oldEntity);
|
|
55
58
|
});
|
|
56
|
-
(0,
|
|
57
|
-
var
|
|
58
|
-
|
|
59
|
+
var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
60
|
+
var currentOptions = optionsRef.current;
|
|
61
|
+
var onChange1 = currentOptions.onChange;
|
|
62
|
+
var _getLifecycleEvents2 = getLifecycleEvents(lifecycleKey),
|
|
63
|
+
onChange2 = _getLifecycleEvents2.onChange;
|
|
64
|
+
onEntityUpdate(newEntity, oldEntity);
|
|
65
|
+
onChange1 === null || onChange1 === void 0 || onChange1(newEntity, oldEntity);
|
|
66
|
+
onChange2 === null || onChange2 === void 0 || onChange2(newEntity, oldEntity);
|
|
59
67
|
if (!entityRootEnabled) {
|
|
60
68
|
return;
|
|
61
69
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
update();
|
|
71
|
+
});
|
|
72
|
+
(0, _useExec.useExec)(function () {
|
|
73
|
+
if (!entityRootEnabled) {
|
|
74
|
+
return;
|
|
65
75
|
}
|
|
66
|
-
|
|
76
|
+
var _bindLifecycleEventsK = bindLifecycleEventsKey(lifecycleKey),
|
|
77
|
+
onBind = _bindLifecycleEventsK.onBind;
|
|
78
|
+
if (!isInitializing) {
|
|
67
79
|
return;
|
|
68
80
|
}
|
|
69
|
-
|
|
70
|
-
|
|
81
|
+
onBind === null || onBind === void 0 || onBind(entity);
|
|
82
|
+
});
|
|
83
|
+
(0, _ahooks.useUnmount)(function () {
|
|
84
|
+
if (!entityRootEnabled) {
|
|
71
85
|
return;
|
|
72
86
|
}
|
|
73
|
-
|
|
74
|
-
store.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
87
|
+
// 要使用最新的 `entity`
|
|
88
|
+
var currentEntity = store.value;
|
|
89
|
+
var _getLifecycleEvents3 = getLifecycleEvents(lifecycleKey),
|
|
90
|
+
onUnbind = _getLifecycleEvents3.onUnbind;
|
|
91
|
+
deleteLifecycleEvents(lifecycleKey);
|
|
92
|
+
onUnbind === null || onUnbind === void 0 || onUnbind(currentEntity);
|
|
78
93
|
});
|
|
79
94
|
/**
|
|
80
95
|
* 需要马上 `watch`,因为 `useEffect` 在子组件内优先执行,
|
|
@@ -85,7 +100,7 @@ var useEntity = exports.useEntity = function useEntity(entityArg, store, reducer
|
|
|
85
100
|
return;
|
|
86
101
|
}
|
|
87
102
|
store.watch(onEntityChange);
|
|
88
|
-
}, [
|
|
103
|
+
}, [store, entityEnabled, onEntityChange]);
|
|
89
104
|
/**
|
|
90
105
|
* 在变化时候,组件更新前,使用 `unwatch`
|
|
91
106
|
*/
|
|
@@ -93,15 +108,9 @@ var useEntity = exports.useEntity = function useEntity(entityArg, store, reducer
|
|
|
93
108
|
return function () {
|
|
94
109
|
store.unwatch(onEntityChange);
|
|
95
110
|
};
|
|
96
|
-
}, [
|
|
97
|
-
(0, _ahooks.useUnmount)(function () {
|
|
98
|
-
if (!entityRootEnabled) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
unbindEntity === null || unbindEntity === void 0 || unbindEntity();
|
|
102
|
-
});
|
|
111
|
+
}, [store, entityEnabled, onEntityChange]);
|
|
103
112
|
(0, _ahooks.useUpdateEffect)(function () {
|
|
104
|
-
|
|
105
|
-
}, [entity,
|
|
106
|
-
return
|
|
113
|
+
onEntityUpdate();
|
|
114
|
+
}, [entity, onEntityUpdate]);
|
|
115
|
+
return entity;
|
|
107
116
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useEntityInitializing = void 0;
|
|
7
|
+
var _useExec = require("../useExec");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _Statuses = require("../../enums/Statuses");
|
|
10
|
+
var useEntityInitializing = exports.useEntityInitializing = function useEntityInitializing(statuses) {
|
|
11
|
+
var isInitializingRef = (0, _react.useRef)(true);
|
|
12
|
+
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
13
|
+
return (0, _useExec.useExec)(function () {
|
|
14
|
+
if (!entityRootEnabled) {
|
|
15
|
+
isInitializingRef.current = true;
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
var isInitializing = isInitializingRef.current;
|
|
19
|
+
isInitializingRef.current = false;
|
|
20
|
+
return isInitializing;
|
|
21
|
+
});
|
|
22
|
+
};
|
|
@@ -10,10 +10,10 @@ var useExec = exports.useExec = function useExec(callback) {
|
|
|
10
10
|
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [callback];
|
|
11
11
|
var depsKey = (0, _useDepsKey.useDepsKey)(deps);
|
|
12
12
|
var execCallback = (0, _ahooks.useMemoizedFn)(function () {
|
|
13
|
-
callback();
|
|
13
|
+
return callback();
|
|
14
14
|
});
|
|
15
|
-
(0, _ahooks.useCreation)(function () {
|
|
15
|
+
return (0, _ahooks.useCreation)(function () {
|
|
16
16
|
void depsKey;
|
|
17
|
-
execCallback();
|
|
17
|
+
return execCallback();
|
|
18
18
|
}, [depsKey, execCallback]);
|
|
19
19
|
};
|
|
@@ -8,8 +8,9 @@ exports.useProvider = void 0;
|
|
|
8
8
|
var _useConstantFn = require("../useConstantFn");
|
|
9
9
|
var _ahooks = require("ahooks");
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _RenderingEventTrigger = require("../../components/RenderingEventTrigger");
|
|
11
12
|
var _contextUseCase2 = require("../../usecases/contextUseCase");
|
|
12
|
-
var useProvider = exports.useProvider = function useProvider(statuses, context, store, reducers) {
|
|
13
|
+
var useProvider = exports.useProvider = function useProvider(statuses, context, store, reducers, onRenderingEnd) {
|
|
13
14
|
var entity = store.value;
|
|
14
15
|
var contextValue = (0, _ahooks.useCreation)(function () {
|
|
15
16
|
var _contextUseCase = (0, _contextUseCase2.contextUseCase)(),
|
|
@@ -24,10 +25,13 @@ var useProvider = exports.useProvider = function useProvider(statuses, context,
|
|
|
24
25
|
withProviders = _ref$with === void 0 ? [] : _ref$with;
|
|
25
26
|
var ContextProvider = context.Provider;
|
|
26
27
|
var value = contextValueRef.current;
|
|
28
|
+
var providers = Array.isArray(withProviders) ? withProviders : [withProviders];
|
|
27
29
|
return _react["default"].createElement(ContextProvider, {
|
|
28
30
|
value: value
|
|
29
|
-
},
|
|
31
|
+
}, providers.reduceRight(function (currentChildren, withProvider) {
|
|
30
32
|
return _react["default"].createElement(withProvider, {}, currentChildren);
|
|
31
|
-
}, children)
|
|
33
|
+
}, children), _react["default"].createElement(_RenderingEventTrigger.RenderingEventTrigger, {
|
|
34
|
+
onRendering: onRenderingEnd
|
|
35
|
+
}));
|
|
32
36
|
});
|
|
33
37
|
};
|
|
@@ -8,13 +8,12 @@ exports.useReducers = void 0;
|
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
10
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
11
|
-
var _useConstantReducers2 = require("../useConstantReducers");
|
|
12
11
|
var _useContextualItem = require("../useContextualItem");
|
|
13
12
|
var _usecases = require("@mic-rexjs/usecases");
|
|
14
13
|
var _ahooks = require("ahooks");
|
|
15
14
|
var _react = require("react");
|
|
16
15
|
var _Statuses = require("../../enums/Statuses");
|
|
17
|
-
var
|
|
16
|
+
var _methodUseCase2 = require("../../usecases/methodUseCase");
|
|
18
17
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
19
18
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
20
19
|
var _excluded = ["watch", "onChange", "options"];
|
|
@@ -25,15 +24,16 @@ var useReducers = exports.useReducers = function useReducers(usecase, context, s
|
|
|
25
24
|
var _ref = contextValue || {},
|
|
26
25
|
_ref$reducers = _ref.reducers,
|
|
27
26
|
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
28
|
+
var onCreate = function onCreate() {
|
|
29
|
+
var _methodUseCase = (0, _methodUseCase2.methodUseCase)(),
|
|
30
|
+
captureCalls = _methodUseCase.captureCalls;
|
|
31
31
|
var opts = captureCalls(options, function (key, callArgs) {
|
|
32
32
|
var _optionsRef$current$k2;
|
|
33
33
|
var _optionsRef$current$k, _optionsRef$current;
|
|
34
34
|
return (_optionsRef$current$k = (_optionsRef$current = optionsRef.current)[key]) === null || _optionsRef$current$k === void 0 ? void 0 : (_optionsRef$current$k2 = _optionsRef$current$k).call.apply(_optionsRef$current$k2, [_optionsRef$current].concat((0, _toConsumableArray2["default"])(callArgs)));
|
|
35
35
|
});
|
|
36
|
-
if (
|
|
36
|
+
if (!entityRootEnabled) {
|
|
37
37
|
return usecase(opts);
|
|
38
38
|
}
|
|
39
39
|
var hookOptions = opts;
|
|
@@ -46,6 +46,8 @@ var useReducers = exports.useReducers = function useReducers(usecase, context, s
|
|
|
46
46
|
return result;
|
|
47
47
|
}
|
|
48
48
|
}));
|
|
49
|
+
};
|
|
50
|
+
return (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
|
|
51
|
+
return onCreate();
|
|
49
52
|
}, deps);
|
|
50
|
-
return reducers;
|
|
51
53
|
};
|
|
@@ -1,88 +1,75 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.useStore = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
7
9
|
var _useContextualItem = require("../useContextualItem");
|
|
10
|
+
var _useEntityInitializing = require("../useEntityInitializing");
|
|
11
|
+
var _useExec = require("../useExec");
|
|
8
12
|
var _usecases = require("@mic-rexjs/usecases");
|
|
13
|
+
var _ahooks = require("ahooks");
|
|
9
14
|
var _react = require("react");
|
|
10
15
|
var _Statuses = require("../../enums/Statuses");
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
+
var _runEntityInitializer = require("../../methods/runEntityInitializer");
|
|
17
|
+
var useStore = exports.useStore = function useStore(entityArg, context, statuses) {
|
|
18
|
+
var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
19
|
+
var isFunction = typeof entityArg === 'function';
|
|
20
|
+
var isInitializing = (0, _useEntityInitializing.useEntityInitializing)(statuses);
|
|
16
21
|
var createEntityListRef = (0, _react.useRef)([]);
|
|
17
|
-
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
18
22
|
var contextValue = (0, _react.useContext)(context);
|
|
19
23
|
var _ref = contextValue || {},
|
|
20
24
|
_ref$store = _ref.store,
|
|
21
25
|
contextStore = _ref$store === void 0 ? null : _ref$store;
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
27
|
+
var _useState = (0, _react.useState)(function () {
|
|
28
|
+
return new _usecases.EntityStore(void 0);
|
|
29
|
+
}),
|
|
30
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 1),
|
|
31
|
+
store = _useState2[0];
|
|
32
|
+
var prevEntityArg = (0, _ahooks.usePrevious)(entityArg, function () {
|
|
33
|
+
return true;
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* 这里只有初始化和 `deps` 变化时,才会执行;
|
|
37
|
+
* 比如:`useUseCase(entityInitailizer, usecase, options, [key])`,
|
|
38
|
+
* 当首次调用 `entityInitailizer` 或 `key` 变化,才会触发以下事件
|
|
39
|
+
*/
|
|
40
|
+
var onRunInitializer = function onRunInitializer() {
|
|
41
|
+
var createEntityList = createEntityListRef.current;
|
|
42
|
+
createEntityListRef.current = (0, _runEntityInitializer.runEntityInitializer)(store, entityArg, createEntityList, isInitializing);
|
|
43
|
+
};
|
|
44
|
+
var onSetEntity = function onSetEntity() {
|
|
45
|
+
if (isInitializing) {
|
|
46
|
+
store.initValue(entityArg);
|
|
47
|
+
return;
|
|
26
48
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var store = new _usecases.EntityStore(currentEntity);
|
|
33
|
-
var createEntityList = [];
|
|
34
|
-
var _valueUseCase = (0, _valueUseCase2.valueUseCase)(),
|
|
35
|
-
isObjectValue = _valueUseCase.isObjectValue,
|
|
36
|
-
matchValue = _valueUseCase.matchValue;
|
|
37
|
-
var _createEntityReducers = (0, _usecases.createEntityReducers)(store, _entityRuntimeUseCase.entityRuntimeUseCase, {
|
|
38
|
-
onInit: function onInit(currentValue) {
|
|
39
|
-
return entityArg(currentValue);
|
|
40
|
-
},
|
|
41
|
-
onCreate: function onCreate(newEntity, oldEntity) {
|
|
42
|
-
var currentIndex = index;
|
|
43
|
-
var isObject = isObjectValue(oldEntity);
|
|
44
|
-
var isArray = isObject && Array.isArray(oldEntity);
|
|
45
|
-
index++;
|
|
46
|
-
createEntityList[currentIndex] = newEntity;
|
|
47
|
-
if (!isObject || isArray) {
|
|
48
|
-
return (0, _usecases.createEntity)(oldEntity, newEntity);
|
|
49
|
-
}
|
|
50
|
-
var descriptors = {};
|
|
51
|
-
var prevEntity = prevCreateEntityList[currentIndex];
|
|
52
|
-
matchValue(prevEntity, newEntity, function (key) {
|
|
53
|
-
var descriptor = Object.getOwnPropertyDescriptor(newEntity, key) || null;
|
|
54
|
-
if (descriptor === null) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
descriptors[key] = descriptor;
|
|
58
|
-
});
|
|
59
|
-
return (0, _usecases.createEntity)(oldEntity, Object.defineProperties({}, descriptors));
|
|
60
|
-
},
|
|
61
|
-
onGenerate: function onGenerate(entity, result) {
|
|
62
|
-
if (typeof result === 'undefined') {
|
|
63
|
-
return [entity, result];
|
|
64
|
-
}
|
|
65
|
-
var newResult = (0, _usecases.createEntity)(entity, result);
|
|
66
|
-
// 不能用 `store.value`,因为可能存在异步,异步更新是需要触发组件更新的
|
|
67
|
-
store.setValue(newResult);
|
|
68
|
-
return [newResult, result];
|
|
69
|
-
},
|
|
70
|
-
onReturn: function onReturn(result) {
|
|
71
|
-
// 不能用 `store.value`,因为可能存在异步,异步更新是需要触发组件更新的
|
|
72
|
-
store.setValue(result);
|
|
73
|
-
return result;
|
|
74
|
-
}
|
|
75
|
-
}),
|
|
76
|
-
initEntity = _createEntityReducers.initEntity;
|
|
77
|
-
initEntity();
|
|
78
|
-
storeRef.current = store;
|
|
79
|
-
createEntityListRef.current = createEntityList;
|
|
80
|
-
return store;
|
|
49
|
+
if (entityArg === prevEntityArg) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// 执行同步操作
|
|
53
|
+
store.setValue(entityArg);
|
|
81
54
|
};
|
|
55
|
+
/**
|
|
56
|
+
* 这里仅仅是将非函数的 `entity` 同步;
|
|
57
|
+
*
|
|
58
|
+
* 比如 `useUseCase(entity, usecase)`,
|
|
59
|
+
* 当传入的 `entity` 变化时,执行一下同步操作。
|
|
60
|
+
*/
|
|
61
|
+
(0, _useExec.useExec)(function () {
|
|
62
|
+
switch (true) {
|
|
63
|
+
case !entityRootEnabled:
|
|
64
|
+
case isFunction:
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
onSetEntity();
|
|
68
|
+
});
|
|
82
69
|
return (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
|
|
83
|
-
if (
|
|
84
|
-
|
|
70
|
+
if (entityRootEnabled && isFunction) {
|
|
71
|
+
onRunInitializer();
|
|
85
72
|
}
|
|
86
|
-
return
|
|
73
|
+
return store;
|
|
87
74
|
}, deps);
|
|
88
75
|
};
|