@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.
Files changed (73) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.LICENSE.txt +0 -2
  3. package/es/components/RenderingEventTrigger/index.d.ts +2 -0
  4. package/es/components/RenderingEventTrigger/index.js +7 -0
  5. package/es/components/RenderingEventTrigger/types.d.ts +3 -0
  6. package/es/hooks/useContextualItem/index.js +2 -3
  7. package/es/hooks/useDepsKey/index.js +19 -9
  8. package/es/hooks/useEntity/index.d.ts +1 -4
  9. package/es/hooks/useEntity/index.js +59 -50
  10. package/es/hooks/useEntityInitializing/index.d.ts +2 -0
  11. package/es/hooks/useEntityInitializing/index.js +16 -0
  12. package/es/hooks/useExec/index.d.ts +2 -1
  13. package/es/hooks/useExec/index.js +3 -3
  14. package/es/hooks/useExec/types.d.ts +3 -0
  15. package/es/hooks/useProvider/index.d.ts +1 -1
  16. package/es/hooks/useProvider/index.js +7 -3
  17. package/es/hooks/useProvider/types.d.ts +1 -1
  18. package/es/hooks/useReducers/index.js +8 -6
  19. package/es/hooks/useStore/index.d.ts +1 -2
  20. package/es/hooks/useStore/index.js +55 -69
  21. package/es/hooks/useUseCase/index.js +5 -6
  22. package/es/hooks/useUseCase/index.test.js +92 -35
  23. package/es/index.d.ts +2 -2
  24. package/es/index.js +1 -1
  25. package/es/methods/runEntityInitializer/index.d.ts +3 -0
  26. package/es/methods/runEntityInitializer/index.js +67 -0
  27. package/es/methods/triggerWatchers/index.js +3 -3
  28. package/es/usecases/lifecycleEventUseCase/index.d.ts +3 -0
  29. package/es/usecases/lifecycleEventUseCase/index.js +34 -0
  30. package/es/usecases/lifecycleEventUseCase/types.d.ts +36 -0
  31. package/es/usecases/lifecycleEventUseCase/types.js +1 -0
  32. package/es/usecases/lifecycleUseCase/index.d.ts +2 -0
  33. package/es/usecases/lifecycleUseCase/index.js +21 -0
  34. package/es/usecases/lifecycleUseCase/types.d.ts +5 -0
  35. package/es/usecases/lifecycleUseCase/types.js +1 -0
  36. package/es/usecases/methodUseCase/index.js +4 -4
  37. package/es/usecases/objectUtilsUseCase/index.d.ts +2 -0
  38. package/es/usecases/objectUtilsUseCase/index.js +131 -0
  39. package/es/usecases/objectUtilsUseCase/types.d.ts +14 -0
  40. package/es/usecases/objectUtilsUseCase/types.js +1 -0
  41. package/lib/components/RenderingEventTrigger/index.js +13 -0
  42. package/lib/hooks/useContextualItem/index.js +3 -4
  43. package/lib/hooks/useDepsKey/index.js +19 -10
  44. package/lib/hooks/useEntity/index.js +59 -50
  45. package/lib/hooks/useEntityInitializing/index.js +22 -0
  46. package/lib/hooks/useExec/index.js +3 -3
  47. package/lib/hooks/useProvider/index.js +7 -3
  48. package/lib/hooks/useReducers/index.js +9 -7
  49. package/lib/hooks/useStore/index.js +54 -67
  50. package/lib/hooks/useUseCase/index.js +6 -7
  51. package/lib/hooks/useUseCase/index.test.js +86 -35
  52. package/lib/index.js +3 -3
  53. package/lib/methods/runEntityInitializer/index.js +73 -0
  54. package/lib/methods/triggerWatchers/index.js +3 -3
  55. package/lib/usecases/lifecycleEventUseCase/index.js +40 -0
  56. package/lib/usecases/lifecycleEventUseCase/types.js +5 -0
  57. package/lib/usecases/{lifeCycleUseCase → lifecycleUseCase}/index.js +14 -12
  58. package/lib/usecases/lifecycleUseCase/types.js +5 -0
  59. package/lib/usecases/methodUseCase/index.js +4 -4
  60. package/lib/usecases/objectUtilsUseCase/index.js +140 -0
  61. package/lib/usecases/objectUtilsUseCase/types.js +5 -0
  62. package/package.json +3 -3
  63. package/es/usecases/lifeCycleUseCase/index.d.ts +0 -2
  64. package/es/usecases/lifeCycleUseCase/index.js +0 -18
  65. package/es/usecases/lifeCycleUseCase/types.d.ts +0 -9
  66. package/es/usecases/valueUseCase/index.d.ts +0 -2
  67. package/es/usecases/valueUseCase/index.js +0 -168
  68. package/es/usecases/valueUseCase/types.d.ts +0 -21
  69. package/lib/usecases/valueUseCase/index.js +0 -219
  70. /package/es/{usecases/lifeCycleUseCase → components/RenderingEventTrigger}/types.js +0 -0
  71. /package/es/{usecases/valueUseCase → hooks/useExec}/types.js +0 -0
  72. /package/lib/{usecases/lifeCycleUseCase → components/RenderingEventTrigger}/types.js +0 -0
  73. /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 _methodUseCase = require("../../usecases/methodUseCase");
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
- var _useConstantEntityReducers = require("../useConstantEntityReducers");
10
- var _valueUseCase = require("../../usecases/valueUseCase");
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 _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(deps, _valueUseCase.valueUseCase),
13
- recordValueMatchWith = _useConstantEntityRed.recordValueMatchWith;
14
- var _recordValueMatchWith = recordValueMatchWith(deps),
15
- _recordValueMatchWith2 = (0, _slicedToArray2["default"])(_recordValueMatchWith, 2),
16
- depsKey = _recordValueMatchWith2[1];
17
- return depsKey;
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 _useConstantEntityReducers = require("../useConstantEntityReducers");
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 _valueUseCase = require("../../usecases/valueUseCase");
14
- var useEntity = exports.useEntity = function useEntity(entityArg, store, reducers, statuses, options) {
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 isFirstRef = (0, _react.useRef)(true);
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 bindEntity = reducers.bindEntity,
24
- unbindEntity = reducers.unbindEntity;
25
- var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(entityArg, _valueUseCase.valueUseCase),
26
- isValueChanged = _useConstantEntityRed.isValueChanged,
27
- recordValue = _useConstantEntityRed.recordValue;
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 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 () {
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 (entity === prevEntity) {
50
+ if (prevEntity === newEntity) {
51
51
  return;
52
52
  }
53
- prevEntityRef.current = entity;
54
- onTriggerWatchers(entity, prevEntity);
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, _useExec.useExec)(function () {
57
- var isFirst = isFirstRef.current;
58
- isFirstRef.current = false;
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
- if (isFirst) {
63
- // 这里不要修改 `entity`,因为 `useUseCase` 有初始化 `entity` 的逻辑
64
- bindEntity === null || bindEntity === void 0 || bindEntity();
70
+ update();
71
+ });
72
+ (0, _useExec.useExec)(function () {
73
+ if (!entityRootEnabled) {
74
+ return;
65
75
  }
66
- if (isFunction) {
76
+ var _bindLifecycleEventsK = bindLifecycleEventsKey(lifecycleKey),
77
+ onBind = _bindLifecycleEventsK.onBind;
78
+ if (!isInitializing) {
67
79
  return;
68
80
  }
69
- var isChanged = isValueChanged(entityArg);
70
- if (!isChanged) {
81
+ onBind === null || onBind === void 0 || onBind(entity);
82
+ });
83
+ (0, _ahooks.useUnmount)(function () {
84
+ if (!entityRootEnabled) {
71
85
  return;
72
86
  }
73
- recordValue(entityArg);
74
- store.disableWatchers();
75
- // 执行同步操作
76
- store.setValue(entityArg);
77
- store.enableWatchers();
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
- }, [entityEnabled, store, onEntityChange]);
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
- }, [entityEnabled, store, onEntityChange]);
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
- onValueChange();
105
- }, [entity, onValueChange]);
106
- return store.value;
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
- }, withProviders.reduceRight(function (currentChildren, withProvider) {
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 _methodUseCase = require("../../usecases/methodUseCase");
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 _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
29
- captureCalls = _useConstantReducers.captureCalls;
30
- var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
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 ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
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 _entityRuntimeUseCase = require("../../usecases/entityRuntimeUseCase");
12
- var _valueUseCase2 = require("../../usecases/valueUseCase");
13
- var useStore = exports.useStore = function useStore(entityArg, context, statuses, options) {
14
- var deps = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
15
- var storeRef = (0, _react.useRef)(null);
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 initStore = function initStore() {
23
- var isFunction = typeof entityArg === 'function';
24
- if (!isFunction) {
25
- return new _usecases.EntityStore(entityArg);
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
- var index = 0;
28
- var currentStore = storeRef.current;
29
- var _ref2 = currentStore || {},
30
- currentEntity = _ref2.value;
31
- var prevCreateEntityList = createEntityListRef.current;
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 (!entityRootEnabled) {
84
- return new _usecases.EntityStore(null);
70
+ if (entityRootEnabled && isFunction) {
71
+ onRunInitializer();
85
72
  }
86
- return initStore();
73
+ return store;
87
74
  }, deps);
88
75
  };