@mic-rexjs/usecases-react 2.10.3 → 2.11.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.
Files changed (37) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/hooks/useConstantEntityReducers/index.d.ts +3 -0
  3. package/es/hooks/useConstantEntityReducers/index.js +7 -0
  4. package/es/hooks/useConstantReducers/index.d.ts +3 -0
  5. package/es/hooks/useConstantReducers/index.js +6 -0
  6. package/es/hooks/useContextualItem/index.d.ts +2 -1
  7. package/es/hooks/useContextualItem/index.js +5 -3
  8. package/es/hooks/useDepsKey/index.js +2 -2
  9. package/es/hooks/useEntity/index.d.ts +2 -1
  10. package/es/hooks/useEntity/index.js +11 -3
  11. package/es/hooks/useFullArguments/types.d.ts +3 -3
  12. package/es/hooks/useRuntimeEntity/index.d.ts +2 -1
  13. package/es/hooks/useRuntimeEntity/index.js +4 -3
  14. package/es/hooks/useUseCase/index.js +13 -8
  15. package/es/hooks/useUseCase/index.test.js +60 -0
  16. package/es/hooks/useUseCase/types.d.ts +3 -3
  17. package/es/usecases/valueUseCase/index.js +45 -9
  18. package/es/usecases/valueUseCase/types.d.ts +5 -1
  19. package/lib/hooks/useConstantEntityReducers/index.js +13 -0
  20. package/lib/hooks/useConstantReducers/index.js +12 -0
  21. package/lib/hooks/useContextualItem/index.js +6 -4
  22. package/lib/hooks/useDepsKey/index.js +3 -3
  23. package/lib/hooks/useEntity/index.js +15 -4
  24. package/lib/hooks/useRuntimeEntity/index.js +6 -5
  25. package/lib/hooks/useUseCase/index.js +19 -11
  26. package/lib/hooks/useUseCase/index.test.js +152 -72
  27. package/lib/usecases/valueUseCase/index.js +71 -23
  28. package/package.json +1 -1
  29. package/es/hooks/useEntityReducers/index.d.ts +0 -4
  30. package/es/hooks/useEntityReducers/index.js +0 -18
  31. package/es/hooks/useReducers/index.d.ts +0 -4
  32. package/es/hooks/useReducers/index.js +0 -13
  33. package/es/methods/initEntityReducers/index.d.ts +0 -5
  34. package/es/methods/initEntityReducers/index.js +0 -11
  35. package/lib/hooks/useEntityReducers/index.js +0 -30
  36. package/lib/hooks/useReducers/index.js +0 -20
  37. package/lib/methods/initEntityReducers/index.js +0 -24
@@ -27,7 +27,7 @@ var valueUseCase = exports.valueUseCase = (0, _usecases.createUseCase)(function
27
27
  var isValueChanged = function isValueChanged(entity, value) {
28
28
  return entity !== value;
29
29
  };
30
- var isValueMatched = function isValueMatched(entity, value) {
30
+ var isValueMatched = function isValueMatched(entity, value, onMatchFailed) {
31
31
  if (entity === value) {
32
32
  return true;
33
33
  }
@@ -36,23 +36,39 @@ var valueUseCase = exports.valueUseCase = (0, _usecases.createUseCase)(function
36
36
  if (!isObject1 || !isObject2) {
37
37
  return false;
38
38
  }
39
+ var allMatched = true;
39
40
  var keys1 = Object.keys(entity);
40
41
  var keys2 = Object.keys(value);
41
42
  var length1 = keys1.length;
42
- var length2 = keys2.length;
43
- if (length1 !== length2) {
44
- return false;
45
- }
46
- for (var _i = 0, _keys = keys1; _i < _keys.length; _i++) {
47
- var key = _keys[_i];
43
+ var keys = [].concat(keys1, keys2);
44
+ var hasCallback = typeof onMatchFailed === 'function';
45
+ for (var i = 0, length = keys.length; i < length; i++) {
46
+ var key = keys[i];
47
+ var isFromKeys2 = i >= length1;
48
+ var isInKey1 = keys1.includes(key);
49
+ var isUsed = isFromKeys2 && isInKey1;
50
+ if (isUsed) {
51
+ continue;
52
+ }
53
+ var hasField1 = Object.hasOwn(entity, key);
54
+ var hasField2 = Object.hasOwn(value, key);
55
+ var onlyHasField1 = hasField1 && !hasField2;
56
+ var onlyHasField2 = !hasField1 && hasField2;
57
+ var onlyHasOneField = onlyHasField1 || onlyHasField2;
48
58
  var value1 = entity[key];
49
59
  var value2 = value[key];
50
- if (value1 === value2) {
60
+ var matched = value1 === value2;
61
+ if (!onlyHasOneField && matched) {
51
62
  continue;
52
63
  }
53
- return false;
64
+ allMatched = false;
65
+ if (hasCallback) {
66
+ onMatchFailed(key, value2, value1);
67
+ continue;
68
+ }
69
+ break;
54
70
  }
55
- return true;
71
+ return allMatched;
56
72
  };
57
73
  var matchProperty = function matchProperty(entity, value, fieldPath, onFailed) {
58
74
  var allMatched = true;
@@ -141,25 +157,56 @@ var valueUseCase = exports.valueUseCase = (0, _usecases.createUseCase)(function
141
157
  }
142
158
  }, recordValue);
143
159
  });
144
- var recordValueMatch = /*#__PURE__*/_regenerator["default"].mark(function recordValueMatch(entity, value) {
145
- var matched;
160
+ var recordValueDiff = /*#__PURE__*/_regenerator["default"].mark(function recordValueDiff(entity, value) {
161
+ var isArray1, isArray2, isArray, result, length1, length2, matched;
146
162
  return _regenerator["default"].wrap(function (_context2) {
147
163
  while (1) switch (_context2.prev = _context2.next) {
164
+ case 0:
165
+ isArray1 = Array.isArray(entity);
166
+ isArray2 = Array.isArray(value);
167
+ isArray = isArray1 && isArray2;
168
+ result = isArray ? [] : {};
169
+ if (isArray) {
170
+ length1 = entity.length;
171
+ length2 = value.length;
172
+ result.length = Math.max(length1, length2);
173
+ }
174
+ matched = isValueMatched(entity, value, function (key, newValue) {
175
+ result[key] = newValue;
176
+ });
177
+ if (matched) {
178
+ _context2.next = 1;
179
+ break;
180
+ }
181
+ _context2.next = 1;
182
+ return value;
183
+ case 1:
184
+ return _context2.abrupt("return", result);
185
+ case 2:
186
+ case "end":
187
+ return _context2.stop();
188
+ }
189
+ }, recordValueDiff);
190
+ });
191
+ var recordValueMatch = /*#__PURE__*/_regenerator["default"].mark(function recordValueMatch(entity, value) {
192
+ var matched;
193
+ return _regenerator["default"].wrap(function (_context3) {
194
+ while (1) switch (_context3.prev = _context3.next) {
148
195
  case 0:
149
196
  matched = isValueMatched(entity, value);
150
197
  if (!matched) {
151
- _context2.next = 1;
198
+ _context3.next = 1;
152
199
  break;
153
200
  }
154
- return _context2.abrupt("return", true);
201
+ return _context3.abrupt("return", true);
155
202
  case 1:
156
- _context2.next = 2;
203
+ _context3.next = 2;
157
204
  return value;
158
205
  case 2:
159
- return _context2.abrupt("return", false);
206
+ return _context3.abrupt("return", false);
160
207
  case 3:
161
208
  case "end":
162
- return _context2.stop();
209
+ return _context3.stop();
163
210
  }
164
211
  }, recordValueMatch);
165
212
  });
@@ -167,21 +214,21 @@ var valueUseCase = exports.valueUseCase = (0, _usecases.createUseCase)(function
167
214
  var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : keyIndex + 1;
168
215
  return /*#__PURE__*/_regenerator["default"].mark(function _callee() {
169
216
  var matched;
170
- return _regenerator["default"].wrap(function (_context3) {
171
- while (1) switch (_context3.prev = _context3.next) {
217
+ return _regenerator["default"].wrap(function (_context4) {
218
+ while (1) switch (_context4.prev = _context4.next) {
172
219
  case 0:
173
- return _context3.delegateYield(recordValueMatch(entity, value), "t0", 1);
220
+ return _context4.delegateYield(recordValueMatch(entity, value), "t0", 1);
174
221
  case 1:
175
- matched = _context3.t0;
222
+ matched = _context4.t0;
176
223
  if (!matched) {
177
224
  // 不管是不是使用 `keyIndex` 生成的 `key`,都自增一次,如果是,则可以保持一致
178
225
  keyIndex++;
179
226
  prevKeyIndex = key;
180
227
  }
181
- return _context3.abrupt("return", prevKeyIndex);
228
+ return _context4.abrupt("return", prevKeyIndex);
182
229
  case 2:
183
230
  case "end":
184
- return _context3.stop();
231
+ return _context4.stop();
185
232
  }
186
233
  }, _callee);
187
234
  })();
@@ -191,6 +238,7 @@ var valueUseCase = exports.valueUseCase = (0, _usecases.createUseCase)(function
191
238
  isValueMatched: isValueMatched,
192
239
  matchProperty: matchProperty,
193
240
  recordValue: recordValue,
241
+ recordValueDiff: recordValueDiff,
194
242
  recordValueMatch: recordValueMatch,
195
243
  recordValueMatchWith: recordValueMatchWith
196
244
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mic-rexjs/usecases-react",
3
- "version": "2.10.3",
3
+ "version": "2.11.0",
4
4
  "description": "React-based solution for use usecases of Clean Architecture",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -1,4 +0,0 @@
1
- import { CreateEntityReducersOptions, ScopedEntityReducers } from '@mic-rexjs/usecases/es/methods/createEntityReducers/types';
2
- import { EntityReducerMap, EntityReducers, InferableEntityUseCase } from '@mic-rexjs/usecases/es/types';
3
- import { Dependencies } from '../../types';
4
- export declare const useEntityReducers: <T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object>(initailEntity: T, usecase: InferableEntityUseCase<T, TEntityReducers & EntityReducers<T>, TUseCaseOptions>, options?: CreateEntityReducersOptions<T, TUseCaseOptions>, deps?: Dependencies) => ScopedEntityReducers<T, EntityReducers<T, TEntityReducers>>;
@@ -1,18 +0,0 @@
1
- import { useConstant } from '../useConstant';
2
- import { createEntityReducers } from '@mic-rexjs/usecases';
3
- import { useCreation, useMemoizedFn } from 'ahooks';
4
- import { valueUseCase } from '../../usecases/valueUseCase';
5
- export const useEntityReducers = (initailEntity, usecase, options, deps = []) => {
6
- const { recordValueMatchWith } = useConstant(() => {
7
- return createEntityReducers(deps, valueUseCase);
8
- });
9
- const [, depsKey] = recordValueMatchWith(deps);
10
- const onCreate = useMemoizedFn(() => {
11
- return createEntityReducers(initailEntity, usecase, options);
12
- });
13
- return useCreation(() => {
14
- void depsKey;
15
- void usecase;
16
- return onCreate();
17
- }, [depsKey, usecase, onCreate]);
18
- };
@@ -1,4 +0,0 @@
1
- import { NonEntitySymbolSet } from '../useUseCase/types';
2
- import { ReducerMap, SymbolSetTarget, UseCase } from '@mic-rexjs/usecases/es/types';
3
- import { Dependencies } from '../../types';
4
- export declare const useReducers: <T extends ReducerMap, TUseCaseOptions extends object = object>(usecase: UseCase<T & SymbolSetTarget<NonEntitySymbolSet>, TUseCaseOptions>, options?: TUseCaseOptions, deps?: Dependencies) => T;
@@ -1,13 +0,0 @@
1
- import { useDepsKey } from '../useDepsKey';
2
- import { useCreation, useMemoizedFn } from 'ahooks';
3
- export const useReducers = (usecase, options, deps = []) => {
4
- const depsKey = useDepsKey(deps);
5
- const onCreate = useMemoizedFn(() => {
6
- return usecase(options);
7
- });
8
- return useCreation(() => {
9
- void depsKey;
10
- void usecase;
11
- return onCreate();
12
- }, [depsKey, usecase, onCreate]);
13
- };
@@ -1,5 +0,0 @@
1
- import { UseCaseHookOptions } from '../../hooks/useUseCase/types';
2
- import { EntityStore } from '@mic-rexjs/usecases';
3
- import { EntityReducerMap, InferableEntityUseCase } from '@mic-rexjs/usecases/es/types';
4
- import { ContextualEntityReducers } from '../../usecases/contextUseCase/types';
5
- export declare const initEntityReducers: <T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object>(usecase: InferableEntityUseCase<T, TEntityReducers, TUseCaseOptions>, store: EntityStore<T>, options: UseCaseHookOptions<T, TUseCaseOptions>) => ContextualEntityReducers<T, TEntityReducers>;
@@ -1,11 +0,0 @@
1
- import { createEntityReducers } from '@mic-rexjs/usecases';
2
- export const initEntityReducers = (usecase, store, options) => {
3
- const { watch, onChange, options: usecaseOptions, ...restUseCaseOptions } = options;
4
- return createEntityReducers(store, usecase, {
5
- ...restUseCaseOptions,
6
- ...usecaseOptions,
7
- onGenerate(newEntity, result) {
8
- return result;
9
- },
10
- });
11
- };
@@ -1,30 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.useEntityReducers = void 0;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
- var _useConstant2 = require("../useConstant");
10
- var _usecases = require("@mic-rexjs/usecases");
11
- var _ahooks = require("ahooks");
12
- var _valueUseCase = require("../../usecases/valueUseCase");
13
- var useEntityReducers = exports.useEntityReducers = function useEntityReducers(initailEntity, usecase, options) {
14
- var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
15
- var _useConstant = (0, _useConstant2.useConstant)(function () {
16
- return (0, _usecases.createEntityReducers)(deps, _valueUseCase.valueUseCase);
17
- }),
18
- recordValueMatchWith = _useConstant.recordValueMatchWith;
19
- var _recordValueMatchWith = recordValueMatchWith(deps),
20
- _recordValueMatchWith2 = (0, _slicedToArray2["default"])(_recordValueMatchWith, 2),
21
- depsKey = _recordValueMatchWith2[1];
22
- var onCreate = (0, _ahooks.useMemoizedFn)(function () {
23
- return (0, _usecases.createEntityReducers)(initailEntity, usecase, options);
24
- });
25
- return (0, _ahooks.useCreation)(function () {
26
- void depsKey;
27
- void usecase;
28
- return onCreate();
29
- }, [depsKey, usecase, onCreate]);
30
- };
@@ -1,20 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useReducers = void 0;
7
- var _useDepsKey = require("../useDepsKey");
8
- var _ahooks = require("ahooks");
9
- var useReducers = exports.useReducers = function useReducers(usecase, options) {
10
- var deps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
11
- var depsKey = (0, _useDepsKey.useDepsKey)(deps);
12
- var onCreate = (0, _ahooks.useMemoizedFn)(function () {
13
- return usecase(options);
14
- });
15
- return (0, _ahooks.useCreation)(function () {
16
- void depsKey;
17
- void usecase;
18
- return onCreate();
19
- }, [depsKey, usecase, onCreate]);
20
- };
@@ -1,24 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.initEntityReducers = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
- var _usecases = require("@mic-rexjs/usecases");
11
- var _excluded = ["watch", "onChange", "options"];
12
- 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; }
13
- 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; }
14
- var initEntityReducers = exports.initEntityReducers = function initEntityReducers(usecase, store, options) {
15
- var watch = options.watch,
16
- onChange = options.onChange,
17
- usecaseOptions = options.options,
18
- restUseCaseOptions = (0, _objectWithoutProperties2["default"])(options, _excluded);
19
- return (0, _usecases.createEntityReducers)(store, usecase, _objectSpread(_objectSpread(_objectSpread({}, restUseCaseOptions), usecaseOptions), {}, {
20
- onGenerate: function onGenerate(newEntity, result) {
21
- return result;
22
- }
23
- }));
24
- };