@mic-rexjs/usecases-react 2.13.4 → 2.14.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/hooks/useEntity/index.d.ts +5 -2
- package/es/hooks/useEntity/index.js +88 -17
- package/es/hooks/useExec/index.d.ts +2 -0
- package/es/hooks/useExec/index.js +13 -0
- package/es/hooks/useReducers/index.js +2 -1
- package/es/hooks/useStore/index.d.ts +1 -1
- package/es/hooks/useStore/index.js +4 -61
- package/es/hooks/useUseCase/index.js +2 -2
- package/es/hooks/useUseCase/index.test.js +228 -106
- package/es/usecases/valueUseCase/index.js +6 -18
- package/lib/hooks/useEntity/index.js +88 -17
- package/lib/hooks/useExec/index.js +19 -0
- package/lib/hooks/useReducers/index.js +2 -1
- package/lib/hooks/useStore/index.js +3 -60
- package/lib/hooks/useUseCase/index.js +2 -2
- package/lib/hooks/useUseCase/index.test.js +222 -110
- package/lib/usecases/valueUseCase/index.js +6 -18
- package/package.json +1 -1
|
@@ -82,14 +82,12 @@ export const valueUseCase = createUseCase(() => {
|
|
|
82
82
|
const hasOldField = hasField(oldValue, key);
|
|
83
83
|
const hasNewField = hasField(newValue, key);
|
|
84
84
|
if (hasOldField || hasNewField) {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
newFieldGet = newFieldDescriptor.get,
|
|
92
|
-
newFieldSet = newFieldDescriptor.set;
|
|
85
|
+
const _ref3 = hasOldField ? [oldValue[key]] : [],
|
|
86
|
+
_ref4 = _slicedToArray(_ref3, 1),
|
|
87
|
+
oldSubValue = _ref4[0];
|
|
88
|
+
const _ref5 = hasNewField ? [newValue[key]] : [],
|
|
89
|
+
_ref6 = _slicedToArray(_ref5, 1),
|
|
90
|
+
newSubValue = _ref6[0];
|
|
93
91
|
const result = {
|
|
94
92
|
fieldPaths: [...fieldPaths, key],
|
|
95
93
|
newEntity: value,
|
|
@@ -102,16 +100,6 @@ export const valueUseCase = createUseCase(() => {
|
|
|
102
100
|
list.push(result);
|
|
103
101
|
continue;
|
|
104
102
|
}
|
|
105
|
-
const hasOldFieldGet = typeof oldFieldGet === 'function';
|
|
106
|
-
const hasOldFieldSet = typeof oldFieldSet === 'function';
|
|
107
|
-
const hasNewFieldGet = typeof newFieldGet === 'function';
|
|
108
|
-
const hasNewFieldSet = typeof newFieldSet === 'function';
|
|
109
|
-
const hasOldFieldAccessor = hasOldFieldGet || hasOldFieldSet;
|
|
110
|
-
const hasNewFieldAccessor = hasNewFieldGet || hasNewFieldSet;
|
|
111
|
-
// 如果都是访问器
|
|
112
|
-
if (hasOldFieldAccessor && hasNewFieldAccessor) {
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
103
|
if (newSubValue === oldSubValue) {
|
|
116
104
|
continue;
|
|
117
105
|
}
|
|
@@ -5,26 +5,97 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useEntity = void 0;
|
|
7
7
|
var _useConstantEntityReducers = require("../useConstantEntityReducers");
|
|
8
|
+
var _useExec = require("../useExec");
|
|
9
|
+
var _ahooks = require("ahooks");
|
|
10
|
+
var _react = require("react");
|
|
8
11
|
var _Statuses = require("../../enums/Statuses");
|
|
12
|
+
var _triggerWatchers = require("../../methods/triggerWatchers");
|
|
9
13
|
var _valueUseCase = require("../../usecases/valueUseCase");
|
|
10
|
-
var useEntity = exports.useEntity = function useEntity(store,
|
|
14
|
+
var useEntity = exports.useEntity = function useEntity(entityArg, store, reducers, statuses, options) {
|
|
15
|
+
var update = (0, _ahooks.useUpdate)();
|
|
16
|
+
var isFunction = typeof entityArg === 'function';
|
|
17
|
+
var entity = store.value;
|
|
18
|
+
var isFirstRef = (0, _react.useRef)(true);
|
|
19
|
+
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
20
|
+
var prevEntityRef = (0, _react.useRef)(entity);
|
|
21
|
+
var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
|
|
22
|
+
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
23
|
+
var bindEntity = reducers.bindEntity,
|
|
24
|
+
unbindEntity = reducers.unbindEntity;
|
|
11
25
|
var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(entityArg, _valueUseCase.valueUseCase),
|
|
12
26
|
isValueChanged = _useConstantEntityRed.isValueChanged,
|
|
13
27
|
recordValue = _useConstantEntityRed.recordValue;
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
var onTriggerWatchers = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
29
|
+
var watch = optionsRef.current.watch;
|
|
30
|
+
if (!watch) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
(0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
|
|
34
|
+
});
|
|
35
|
+
var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
36
|
+
var onChange = optionsRef.current.onChange;
|
|
37
|
+
prevEntityRef.current = newEntity;
|
|
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 () {
|
|
46
|
+
if (!entityEnabled) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
var prevEntity = prevEntityRef.current;
|
|
50
|
+
if (entity === prevEntity) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
prevEntityRef.current = entity;
|
|
54
|
+
onTriggerWatchers(entity, prevEntity);
|
|
55
|
+
});
|
|
56
|
+
(0, _useExec.useExec)(function () {
|
|
57
|
+
var currentEntity = entityArg;
|
|
58
|
+
var isFirst = isFirstRef.current;
|
|
59
|
+
isFirstRef.current = false;
|
|
60
|
+
if (isFirst) {
|
|
61
|
+
var _bindEntity;
|
|
62
|
+
currentEntity = (_bindEntity = bindEntity === null || bindEntity === void 0 ? void 0 : bindEntity()) !== null && _bindEntity !== void 0 ? _bindEntity : currentEntity;
|
|
63
|
+
}
|
|
64
|
+
switch (true) {
|
|
65
|
+
case !entityRootEnabled:
|
|
66
|
+
case isFunction:
|
|
67
|
+
case !isValueChanged(currentEntity):
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
recordValue(currentEntity);
|
|
71
|
+
store.disableWatchers();
|
|
72
|
+
// 执行同步操作
|
|
73
|
+
store.setValue(currentEntity);
|
|
74
|
+
store.enableWatchers();
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* 需要马上 `watch`,因为 `useEffect` 在子组件内优先执行,
|
|
78
|
+
* 如果使用了 `setEntity` 则无法监控到变化
|
|
79
|
+
*/
|
|
80
|
+
(0, _useExec.useExec)(function () {
|
|
81
|
+
if (!entityEnabled) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
store.watch(onEntityChange);
|
|
85
|
+
}, [entityEnabled, store, onEntityChange]);
|
|
86
|
+
/**
|
|
87
|
+
* 在变化时候,组件更新前,使用 `unwatch`
|
|
88
|
+
*/
|
|
89
|
+
(0, _react.useEffect)(function () {
|
|
90
|
+
return function () {
|
|
91
|
+
store.unwatch(onEntityChange);
|
|
92
|
+
};
|
|
93
|
+
}, [entityEnabled, store, onEntityChange]);
|
|
94
|
+
(0, _ahooks.useUnmount)(function () {
|
|
95
|
+
unbindEntity === null || unbindEntity === void 0 || unbindEntity();
|
|
96
|
+
});
|
|
97
|
+
(0, _ahooks.useUpdateEffect)(function () {
|
|
98
|
+
onValueChange();
|
|
99
|
+
}, [entity, onValueChange]);
|
|
100
|
+
return store.value;
|
|
30
101
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useExec = void 0;
|
|
7
|
+
var _useDepsKey = require("../useDepsKey");
|
|
8
|
+
var _ahooks = require("ahooks");
|
|
9
|
+
var useExec = exports.useExec = function useExec(callback) {
|
|
10
|
+
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [callback];
|
|
11
|
+
var depsKey = (0, _useDepsKey.useDepsKey)(deps);
|
|
12
|
+
var execCallback = (0, _ahooks.useMemoizedFn)(function () {
|
|
13
|
+
callback();
|
|
14
|
+
});
|
|
15
|
+
(0, _ahooks.useCreation)(function () {
|
|
16
|
+
void depsKey;
|
|
17
|
+
execCallback();
|
|
18
|
+
}, [depsKey, execCallback]);
|
|
19
|
+
};
|
|
@@ -27,7 +27,7 @@ var useReducers = exports.useReducers = function useReducers(usecase, context, s
|
|
|
27
27
|
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
|
|
28
28
|
var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
|
|
29
29
|
captureCalls = _useConstantReducers.captureCalls;
|
|
30
|
-
|
|
30
|
+
var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
|
|
31
31
|
var opts = captureCalls(options, function (key, callArgs) {
|
|
32
32
|
var _optionsRef$current$k2;
|
|
33
33
|
var _optionsRef$current$k, _optionsRef$current;
|
|
@@ -47,4 +47,5 @@ var useReducers = exports.useReducers = function useReducers(usecase, context, s
|
|
|
47
47
|
}
|
|
48
48
|
}));
|
|
49
49
|
}, deps);
|
|
50
|
+
return reducers;
|
|
50
51
|
};
|
|
@@ -9,18 +9,13 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
9
9
|
var _useConstantEntityReducers = require("../useConstantEntityReducers");
|
|
10
10
|
var _useContextualItem = require("../useContextualItem");
|
|
11
11
|
var _usecases = require("@mic-rexjs/usecases");
|
|
12
|
-
var _ahooks = require("ahooks");
|
|
13
12
|
var _react = require("react");
|
|
14
13
|
var _Statuses = require("../../enums/Statuses");
|
|
15
14
|
var _initStore = require("../../methods/initStore");
|
|
16
|
-
var _triggerWatchers = require("../../methods/triggerWatchers");
|
|
17
15
|
var _valueUseCase = require("../../usecases/valueUseCase");
|
|
18
|
-
var useStore = exports.useStore = function useStore(
|
|
16
|
+
var useStore = exports.useStore = function useStore(entityArg, context, statuses, options) {
|
|
19
17
|
var deps = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
20
|
-
var update = (0, _ahooks.useUpdate)();
|
|
21
|
-
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
22
18
|
var storeRef = (0, _react.useRef)(null);
|
|
23
|
-
var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
|
|
24
19
|
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
25
20
|
var contextValue = (0, _react.useContext)(context);
|
|
26
21
|
var _ref = contextValue || {},
|
|
@@ -28,7 +23,7 @@ var useStore = exports.useStore = function useStore(context, entity, statuses, o
|
|
|
28
23
|
contextStore = _ref$store === void 0 ? null : _ref$store;
|
|
29
24
|
var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)([], _valueUseCase.valueUseCase),
|
|
30
25
|
recordValueDiff = _useConstantEntityRed.recordValueDiff;
|
|
31
|
-
|
|
26
|
+
return (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
|
|
32
27
|
if (!entityRootEnabled) {
|
|
33
28
|
return new _usecases.EntityStore(null);
|
|
34
29
|
}
|
|
@@ -36,60 +31,8 @@ var useStore = exports.useStore = function useStore(context, entity, statuses, o
|
|
|
36
31
|
var _recordValueDiff = recordValueDiff(deps),
|
|
37
32
|
_recordValueDiff2 = (0, _slicedToArray2["default"])(_recordValueDiff, 2),
|
|
38
33
|
changedDeps = _recordValueDiff2[1];
|
|
39
|
-
var newStore = (0, _initStore.initStore)(
|
|
34
|
+
var newStore = (0, _initStore.initStore)(entityArg, current, changedDeps);
|
|
40
35
|
storeRef.current = newStore;
|
|
41
36
|
return newStore;
|
|
42
37
|
}, deps);
|
|
43
|
-
var value = store.value;
|
|
44
|
-
var prevValueRef = (0, _react.useRef)(value);
|
|
45
|
-
var onTriggerWatchers = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
46
|
-
var watch = optionsRef.current.watch;
|
|
47
|
-
if (!watch) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
(0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
|
|
51
|
-
});
|
|
52
|
-
var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
53
|
-
var onChange = optionsRef.current.onChange;
|
|
54
|
-
prevValueRef.current = newEntity;
|
|
55
|
-
onTriggerWatchers(newEntity, oldEntity);
|
|
56
|
-
onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
|
|
57
|
-
if (!entityRootEnabled) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
update();
|
|
61
|
-
});
|
|
62
|
-
var onValueChange = (0, _ahooks.useMemoizedFn)(function () {
|
|
63
|
-
if (!entityRootEnabled) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
var prevValue = prevValueRef.current;
|
|
67
|
-
if (value === prevValue) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
prevValueRef.current = value;
|
|
71
|
-
onTriggerWatchers(value, prevValue);
|
|
72
|
-
});
|
|
73
|
-
(0, _ahooks.useUpdateEffect)(function () {
|
|
74
|
-
onValueChange();
|
|
75
|
-
}, [value, onValueChange]);
|
|
76
|
-
/**
|
|
77
|
-
* 需要马上 `watch`,因为 `useEffect` 在子组件内优先执行,
|
|
78
|
-
* 如果使用了 `setEntity` 则无法监控到变化
|
|
79
|
-
*/
|
|
80
|
-
(0, _ahooks.useCreation)(function () {
|
|
81
|
-
if (!entityEnabled) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
store.watch(onEntityChange);
|
|
85
|
-
}, [entityEnabled, store, onEntityChange]);
|
|
86
|
-
/**
|
|
87
|
-
* 在变化时候,组件更新前,使用 `unwatch`
|
|
88
|
-
*/
|
|
89
|
-
(0, _react.useEffect)(function () {
|
|
90
|
-
return function () {
|
|
91
|
-
store.unwatch(onEntityChange);
|
|
92
|
-
};
|
|
93
|
-
}, [entityEnabled, store, onEntityChange]);
|
|
94
|
-
return store;
|
|
95
38
|
};
|
|
@@ -42,9 +42,9 @@ var useUseCase = exports.useUseCase = function useUseCase() {
|
|
|
42
42
|
var context = (0, _useContext.useContext)(usecase, argumentTypes);
|
|
43
43
|
var entityContext = context;
|
|
44
44
|
var statuses = (0, _useStatuses.useStatuses)(context, argumentTypes);
|
|
45
|
-
var store = (0, _useStore.useStore)(
|
|
46
|
-
var entity = (0, _useEntity.useEntity)(store, unsafeEntity, statuses);
|
|
45
|
+
var store = (0, _useStore.useStore)(unsafeEntity, entityContext, statuses, options, deps);
|
|
47
46
|
var reducers = (0, _useReducers.useReducers)(usecase, context, store, statuses, options, deps);
|
|
47
|
+
var entity = (0, _useEntity.useEntity)(unsafeEntity, store, reducers, statuses, options);
|
|
48
48
|
var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
|
|
49
49
|
return (0, _ahooks.useCreation)(function () {
|
|
50
50
|
if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
|