@mic-rexjs/usecases-react 2.12.2 → 2.13.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 (42) hide show
  1. package/README.md +3 -12
  2. package/dist/index.min.js +1 -1
  3. package/es/hooks/useContext/index.d.ts +2 -2
  4. package/es/hooks/useContextualItem/index.js +0 -1
  5. package/es/hooks/useEntity/index.d.ts +2 -3
  6. package/es/hooks/useEntity/index.js +19 -72
  7. package/es/hooks/useFullArguments/types.d.ts +3 -3
  8. package/es/hooks/useIsRenderingRef/index.d.ts +1 -1
  9. package/es/hooks/useProvider/index.d.ts +2 -2
  10. package/es/hooks/useReducers/index.d.ts +6 -0
  11. package/es/hooks/useReducers/index.js +40 -0
  12. package/es/hooks/useStatuses/index.d.ts +2 -2
  13. package/es/hooks/useStatuses/index.js +3 -1
  14. package/es/hooks/useStore/index.d.ts +6 -0
  15. package/es/hooks/useStore/index.js +68 -0
  16. package/es/hooks/useUseCase/index.js +11 -47
  17. package/es/hooks/useUseCase/index.test.js +222 -107
  18. package/es/hooks/useUseCase/types.d.ts +3 -4
  19. package/es/methods/initStore/index.d.ts +3 -0
  20. package/es/methods/initStore/index.js +23 -0
  21. package/es/types.d.ts +5 -1
  22. package/es/usecases/contextUseCase/types.d.ts +12 -12
  23. package/es/usecases/entityRuntimeUseCase/index.d.ts +2 -0
  24. package/es/usecases/entityRuntimeUseCase/index.js +16 -0
  25. package/es/usecases/entityRuntimeUseCase/types.d.ts +8 -0
  26. package/es/usecases/entityRuntimeUseCase/types.js +1 -0
  27. package/es/usecases/valueUseCase/index.js +1 -1
  28. package/lib/hooks/useContextualItem/index.js +0 -1
  29. package/lib/hooks/useEntity/index.js +19 -73
  30. package/lib/hooks/useReducers/index.js +50 -0
  31. package/lib/hooks/useStatuses/index.js +3 -1
  32. package/lib/hooks/useStore/index.js +75 -0
  33. package/lib/hooks/useUseCase/index.js +12 -48
  34. package/lib/hooks/useUseCase/index.test.js +283 -126
  35. package/lib/methods/initStore/index.js +29 -0
  36. package/lib/usecases/entityRuntimeUseCase/index.js +25 -0
  37. package/lib/usecases/entityRuntimeUseCase/types.js +5 -0
  38. package/lib/usecases/valueUseCase/index.js +1 -1
  39. package/package.json +3 -3
  40. package/es/hooks/useRuntimeEntity/index.d.ts +0 -5
  41. package/es/hooks/useRuntimeEntity/index.js +0 -22
  42. package/lib/hooks/useRuntimeEntity/index.js +0 -28
@@ -2,7 +2,7 @@ import { UseCaseProvider } from '../useProvider/types';
2
2
  import { UseCase } from '@mic-rexjs/usecases';
3
3
  import { EntityReducerMap, EntityReducers, InferableEntityUseCase, ReducerMap, RestArguments, SymbolSet, SymbolSetTarget } from '@mic-rexjs/usecases/es/types';
4
4
  import { MatchPropertyFailedResult } from '../../entities/matchPropertyFailedResult/types';
5
- import { Dependencies } from '../../types';
5
+ import { Dependencies, EntityInitializer } from '../../types';
6
6
  import { ContextualEntityReducers } from '../../usecases/contextUseCase/types';
7
7
  export interface NonEntitySymbolSet extends SymbolSet {
8
8
  entity?: never;
@@ -20,8 +20,7 @@ export type RootCoreCollection<T, TEntityReducers extends EntityReducerMap<T>> =
20
20
  * @deprecated 请用 `CoreCollection` 代替
21
21
  */
22
22
  export type ContextualCoreCollection<T, TEntityReducers extends EntityReducerMap<T>> = CoreCollection<T, TEntityReducers>;
23
- export interface EntityGetter<T, TDependencies extends Dependencies = Dependencies> {
24
- (entity: T | undefined, changedDeps: Partial<TDependencies>): T;
23
+ export interface EntityGetter<T, TDependencies extends Dependencies = Dependencies> extends EntityInitializer<T, TDependencies> {
25
24
  }
26
25
  export interface EntityWatchEvent<T, TValue = unknown> extends MatchPropertyFailedResult<T, TValue> {
27
26
  }
@@ -57,7 +56,7 @@ export interface ContextualCoreCollectionHook {
57
56
  <T, TEntityReducers extends EntityReducerMap<T>>(usecase: InferableEntityUseCase<T, TEntityReducers>, options?: UseCaseHookContextualOptions<T>, deps?: Dependencies): CoreCollection<T, TEntityReducers>;
58
57
  }
59
58
  export interface RootCoreCollectionHook {
60
- <T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object, TDependencies extends Dependencies = Dependencies>(entity: T | EntityGetter<T, TDependencies>, usecase: InferableEntityUseCase<T, TEntityReducers & EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: TDependencies): CoreCollection<T, EntityReducers<T, TEntityReducers>>;
59
+ <T, TEntityReducers extends EntityReducerMap<T>, TUseCaseOptions extends object = object, TDependencies extends Dependencies = Dependencies>(entity: T | EntityInitializer<T, TDependencies>, usecase: InferableEntityUseCase<T, TEntityReducers & EntityReducers<T>, TUseCaseOptions>, options?: UseCaseHookOptions<T, TUseCaseOptions>, deps?: TDependencies): CoreCollection<T, EntityReducers<T, TEntityReducers>>;
61
60
  }
62
61
  export interface CoreCollectionHook extends ContextualCoreCollectionHook, RootCoreCollectionHook {
63
62
  }
@@ -0,0 +1,3 @@
1
+ import { EntityStore } from '@mic-rexjs/usecases';
2
+ import { Dependencies, EntityInitializer } from '../../types';
3
+ export declare const initStore: <T, TDependencies extends Dependencies = Dependencies>(entity: T | EntityInitializer<T>, prevStore: EntityStore<T> | null, changedDeps: Partial<TDependencies>) => EntityStore<T>;
@@ -0,0 +1,23 @@
1
+ import { createEntityReducers, EntityStore } from '@mic-rexjs/usecases';
2
+ import { entityRuntimeUseCase } from '../../usecases/entityRuntimeUseCase';
3
+ export const initStore = (entity, prevStore, changedDeps) => {
4
+ const isFunction = typeof entity === 'function';
5
+ if (!isFunction) {
6
+ return new EntityStore(entity);
7
+ }
8
+ const _ref = prevStore || {},
9
+ value = _ref.value;
10
+ const store = new EntityStore(value);
11
+ const _createEntityReducers = createEntityReducers(store, entityRuntimeUseCase, {
12
+ onInit(currentValue) {
13
+ return entity(currentValue, changedDeps);
14
+ },
15
+ onReturn(result) {
16
+ store.setValue(result);
17
+ return result;
18
+ }
19
+ }),
20
+ initEntity = _createEntityReducers.initEntity;
21
+ initEntity();
22
+ return store;
23
+ };
package/es/types.d.ts CHANGED
@@ -1,3 +1,7 @@
1
- import { RestArguments } from '@mic-rexjs/usecases/es/types';
1
+ import { AsyncEntityCallbackGenerator, EntityGenerator, RestArguments } from '@mic-rexjs/usecases/es/types';
2
2
  export interface Dependencies extends RestArguments {
3
3
  }
4
+ export type InitEntityResult<T> = T | EntityGenerator<T, void> | AsyncEntityCallbackGenerator<T, void>;
5
+ export interface EntityInitializer<T, TDependencies extends Dependencies = Dependencies> {
6
+ (entity: T | undefined, changedDeps: Partial<TDependencies>): InitEntityResult<T>;
7
+ }
@@ -2,27 +2,27 @@ import { AsyncEntityGenerator, EntityGenerator, EntityReducer, EntityStore, Redu
2
2
  import { EntityReducerMap, InferableUseCase, ReducerMap } from '@mic-rexjs/usecases/es/types';
3
3
  import { ArgumentTypes } from '../../enums/ArgumentTypes';
4
4
  import { Statuses } from '../../enums/Statuses';
5
- export type ContextualEntityReducer<T, TEntityReducer extends EntityReducer<T>> = TEntityReducer extends (entity: infer TEntity, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn extends AsyncEntityGenerator<TEntity, infer TResult> ? Promise<TResult> : TReturn extends EntityGenerator<TEntity, infer TResult> ? TResult : TReturn : never;
6
- export type ContextualEntityReducers<T, TEntityReducers extends EntityReducerMap<T>> = {
7
- [K in ReducerKeys<TEntityReducers>]: ContextualEntityReducer<T, TEntityReducers[K]>;
8
- };
9
- export interface ContextValue<T extends ReducerMap> {
5
+ export interface UseCaseContextValue<T extends ReducerMap> {
10
6
  reducers: T;
11
7
  statuses: Statuses;
12
8
  }
13
- export interface EntityContextValue<T, TEntityReducers extends EntityReducerMap<T>> extends ContextValue<ContextualEntityReducers<T, TEntityReducers>> {
9
+ export interface EntityUseCaseContextValue<T, TEntityReducers extends EntityReducerMap<T>> extends UseCaseContextValue<ContextualEntityReducers<T, TEntityReducers>> {
14
10
  store: EntityStore<T>;
15
11
  }
16
- export interface Context<T> extends React.Context<T | null> {
12
+ export interface UseCaseContext<T> extends React.Context<T | null> {
17
13
  }
18
- export interface ContextReference<T> {
19
- value: Context<T>;
14
+ export interface UseCaseContextReference<T> {
15
+ value: UseCaseContext<T>;
20
16
  times: number;
21
17
  }
18
+ export type ContextualEntityReducer<T, TEntityReducer extends EntityReducer<T>> = TEntityReducer extends (entity: infer TEntity, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn extends AsyncEntityGenerator<TEntity, infer TResult> ? Promise<TResult> : TReturn extends EntityGenerator<TEntity, infer TResult> ? TResult : TReturn : never;
19
+ export type ContextualEntityReducers<T, TEntityReducers extends EntityReducerMap<T>> = {
20
+ [K in ReducerKeys<TEntityReducers>]: ContextualEntityReducer<T, TEntityReducers[K]>;
21
+ };
22
22
  export type ContextReducers = Reducers<{
23
- createContextValue<T, TReducers extends ReducerMap>(store: EntityStore<T>, reducers: TReducers, statuses: Statuses): ContextValue<TReducers>;
24
- getUseCaseContext<T extends ReducerMap, TUseCaseOptions extends object>(usecase: InferableUseCase<T, TUseCaseOptions>): Context<ContextValue<T>>;
25
- registerUseCase<T extends ReducerMap, TUseCaseOptions extends object>(usecase: InferableUseCase<T, TUseCaseOptions>, argumentTypes: ArgumentTypes): Context<ContextValue<T>>;
23
+ createContextValue<T, TReducers extends ReducerMap>(store: EntityStore<T>, reducers: TReducers, statuses: Statuses): UseCaseContextValue<TReducers>;
24
+ getUseCaseContext<T extends ReducerMap, TUseCaseOptions extends object>(usecase: InferableUseCase<T, TUseCaseOptions>): UseCaseContext<UseCaseContextValue<T>>;
25
+ registerUseCase<T extends ReducerMap, TUseCaseOptions extends object>(usecase: InferableUseCase<T, TUseCaseOptions>, argumentTypes: ArgumentTypes): UseCaseContext<UseCaseContextValue<T>>;
26
26
  unregisterUseCase<T extends ReducerMap, TUseCaseOptions extends object>(usecase: InferableUseCase<T, TUseCaseOptions>, argumentTypes: ArgumentTypes): boolean;
27
27
  }>;
28
28
  export interface ContextUseCase {
@@ -0,0 +1,2 @@
1
+ import { EntityRuntimeReducers, EntityRuntimeUseCaseOptions } from './types';
2
+ export declare const entityRuntimeUseCase: <T>(options?: EntityRuntimeUseCaseOptions<T>) => EntityRuntimeReducers<T>;
@@ -0,0 +1,16 @@
1
+ import { entityUseCase } from '@mic-rexjs/usecases';
2
+ export const entityRuntimeUseCase = function () {
3
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4
+ const entityReducers = entityUseCase();
5
+ const onInit = options.onInit;
6
+ const initEntity = entity => {
7
+ if (typeof onInit !== 'function') {
8
+ return entity;
9
+ }
10
+ return onInit(entity);
11
+ };
12
+ return {
13
+ ...entityReducers,
14
+ initEntity
15
+ };
16
+ };
@@ -0,0 +1,8 @@
1
+ import { EntityReducers } from '@mic-rexjs/usecases';
2
+ import { InitEntityResult } from '../../types';
3
+ export interface EntityRuntimeUseCaseOptions<T> {
4
+ onInit?(entity: T): InitEntityResult<T>;
5
+ }
6
+ export type EntityRuntimeReducers<T> = EntityReducers<T, {
7
+ initEntity<S extends T>(entity: S): InitEntityResult<S>;
8
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -2,10 +2,10 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { createUseCase, entityUseCase, utilsUseCase } from '@mic-rexjs/usecases';
3
3
  export const valueUseCase = createUseCase(() => {
4
4
  return () => {
5
+ const entityReducers = entityUseCase();
5
6
  const _utilsUseCase = utilsUseCase(),
6
7
  createKey = _utilsUseCase.createKey;
7
8
  let prevKeyIndex = createKey();
8
- const entityReducers = entityUseCase();
9
9
  const hasField = (entity, field) => {
10
10
  if (typeof entity !== 'object' || entity === null) {
11
11
  return false;
@@ -17,7 +17,6 @@ var useContextualItem = exports.useContextualItem = function useContextualItem(c
17
17
  cacheCall = _useConstantReducers.cacheCall;
18
18
  var onCache = (0, _ahooks.useMemoizedFn)(function () {
19
19
  var currentFactory = factoryRef.current;
20
- void depsKey;
21
20
  // 防止在以下 `onCreate()` 多次调用实际 `factory`
22
21
  return cacheCall(currentFactory, {
23
22
  onCompare: function onCompare() {
@@ -1,84 +1,30 @@
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.useEntity = void 0;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
7
  var _useConstantEntityReducers = require("../useConstantEntityReducers");
10
- var _useContextualItem = require("../useContextualItem");
11
- var _useRuntimeEntity = require("../useRuntimeEntity");
12
- var _usecases = require("@mic-rexjs/usecases");
13
- var _ahooks = require("ahooks");
14
- var _react = require("react");
15
8
  var _Statuses = require("../../enums/Statuses");
16
- var _triggerWatchers = require("../../methods/triggerWatchers");
17
9
  var _valueUseCase = require("../../usecases/valueUseCase");
18
- var useEntity = exports.useEntity = function useEntity(statuses, entityArg, contextStore, options, deps) {
19
- var update = (0, _ahooks.useUpdate)();
20
- var storeRef = (0, _react.useRef)(null);
21
- var optionsRef = (0, _ahooks.useLatest)(options);
22
- var contextEntity = contextStore ? contextStore.value : null;
23
- var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
24
- var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
25
- var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(deps, _valueUseCase.valueUseCase),
26
- recordValueDiff = _useConstantEntityRed.recordValueDiff;
27
- var store = (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
28
- var newStore;
29
- if (entityRootEnabled) {
30
- var isFunction = typeof entityArg === 'function';
31
- var current = storeRef.current;
32
- var _ref = current || {},
33
- value = _ref.value;
34
- var _recordValueDiff = recordValueDiff(deps),
35
- _recordValueDiff2 = (0, _slicedToArray2["default"])(_recordValueDiff, 2),
36
- depsDiff = _recordValueDiff2[1];
37
- var initailEntity = isFunction ? entityArg(value, depsDiff) : entityArg;
38
- newStore = new _usecases.EntityStore(initailEntity);
39
- } else {
40
- newStore = new _usecases.EntityStore(null);
41
- }
42
- storeRef.current = newStore;
43
- return newStore;
44
- }, deps);
45
- var runtimeEntity = (0, _useRuntimeEntity.useRuntimeEntity)(store, entityArg, contextEntity, statuses);
46
- var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
47
- var _optionsRef$current = optionsRef.current,
48
- onChange = _optionsRef$current.onChange,
49
- watch = _optionsRef$current.watch;
50
- if (watch) {
51
- (0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
52
- }
53
- onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
54
- if (!entityRootEnabled) {
55
- return;
56
- }
57
- update();
58
- });
59
- if (entityRootEnabled) {
60
- // 执行同步操作
61
- store.setValue(runtimeEntity, true);
10
+ var useEntity = exports.useEntity = function useEntity(store, entityArg, statuses) {
11
+ var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(entityArg, _valueUseCase.valueUseCase),
12
+ isValueChanged = _useConstantEntityRed.isValueChanged,
13
+ recordValue = _useConstantEntityRed.recordValue;
14
+ var changed = isValueChanged(entityArg);
15
+ var entityRootDisabled = (statuses & _Statuses.Statuses.EntityRootEnabled) !== _Statuses.Statuses.EntityRootEnabled;
16
+ var isFunction = typeof entityArg === 'function';
17
+ var value = store.value;
18
+ switch (true) {
19
+ case entityRootDisabled:
20
+ case isFunction:
21
+ case !changed:
22
+ return value;
62
23
  }
63
- /**
64
- * 需要马上 `watch`,因为 `useEffect` 在子组件内优先执行,
65
- * 如果使用了 `setEntity` 则无法监控到变化
66
- */
67
- (0, _ahooks.useCreation)(function () {
68
- if (!entityEnabled) {
69
- return;
70
- }
71
- store.watch(onEntityChange);
72
- }, [entityEnabled, store, onEntityChange]);
73
- /**
74
- * 在变化时候,组件更新前,使用 `unwatch`
75
- */
76
- (0, _react.useEffect)(function () {
77
- return function () {
78
- store.unwatch(onEntityChange);
79
- };
80
- }, [entityEnabled, store, onEntityChange]);
81
- return (0, _ahooks.useCreation)(function () {
82
- return [runtimeEntity, store];
83
- }, [runtimeEntity, store]);
24
+ recordValue(entityArg);
25
+ store.disableWatchers();
26
+ // 执行同步操作
27
+ store.setValue(entityArg);
28
+ store.enableWatchers();
29
+ return entityArg;
84
30
  };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useReducers = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _useConstantReducers2 = require("../useConstantReducers");
12
+ var _useContextualItem = require("../useContextualItem");
13
+ var _usecases = require("@mic-rexjs/usecases");
14
+ var _ahooks = require("ahooks");
15
+ var _react = require("react");
16
+ var _Statuses = require("../../enums/Statuses");
17
+ var _methodUseCase = require("../../usecases/methodUseCase");
18
+ 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
+ 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
+ var _excluded = ["watch", "onChange", "options"];
21
+ var useReducers = exports.useReducers = function useReducers(usecase, context, store, statuses, options) {
22
+ var deps = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
23
+ var optionsRef = (0, _ahooks.useLatest)(options);
24
+ var contextValue = (0, _react.useContext)(context);
25
+ var _ref = contextValue || {},
26
+ _ref$reducers = _ref.reducers,
27
+ contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
28
+ var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
29
+ captureCalls = _useConstantReducers.captureCalls;
30
+ return (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
31
+ var opts = captureCalls(options, function (key, callArgs) {
32
+ var _optionsRef$current$k2;
33
+ var _optionsRef$current$k, _optionsRef$current;
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
+ });
36
+ if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
37
+ return usecase(opts);
38
+ }
39
+ var hookOptions = opts;
40
+ var watch = hookOptions.watch,
41
+ onChange = hookOptions.onChange,
42
+ usecaseOptions = hookOptions.options,
43
+ restUseCaseOptions = (0, _objectWithoutProperties2["default"])(hookOptions, _excluded);
44
+ return (0, _usecases.createEntityReducers)(store, usecase, _objectSpread(_objectSpread(_objectSpread({}, restUseCaseOptions), usecaseOptions), {}, {
45
+ onGenerate: function onGenerate(newEntity, result) {
46
+ return result;
47
+ }
48
+ }));
49
+ }, deps);
50
+ };
@@ -5,9 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useStatuses = void 0;
7
7
  var _ahooks = require("ahooks");
8
+ var _react = require("react");
8
9
  var _ArgumentTypes = require("../../enums/ArgumentTypes");
9
10
  var _Statuses = require("../../enums/Statuses");
10
- var useStatuses = exports.useStatuses = function useStatuses(argumentTypes, contextValue) {
11
+ var useStatuses = exports.useStatuses = function useStatuses(context, argumentTypes) {
12
+ var contextValue = (0, _react.useContext)(context);
11
13
  return (0, _ahooks.useCreation)(function () {
12
14
  var statuses = _Statuses.Statuses.None;
13
15
  var _ref = contextValue || {},
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useStore = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _useConstantEntityReducers = require("../useConstantEntityReducers");
10
+ var _useContextualItem = require("../useContextualItem");
11
+ var _usecases = require("@mic-rexjs/usecases");
12
+ var _ahooks = require("ahooks");
13
+ var _react = require("react");
14
+ var _Statuses = require("../../enums/Statuses");
15
+ var _initStore = require("../../methods/initStore");
16
+ var _triggerWatchers = require("../../methods/triggerWatchers");
17
+ var _valueUseCase = require("../../usecases/valueUseCase");
18
+ var useStore = exports.useStore = function useStore(context, entity, statuses, options) {
19
+ var deps = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
20
+ var update = (0, _ahooks.useUpdate)();
21
+ var optionsRef = (0, _ahooks.useLatest)(options);
22
+ var storeRef = (0, _react.useRef)(null);
23
+ var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
24
+ var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
25
+ var contextValue = (0, _react.useContext)(context);
26
+ var _ref = contextValue || {},
27
+ _ref$store = _ref.store,
28
+ contextStore = _ref$store === void 0 ? null : _ref$store;
29
+ var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(deps, _valueUseCase.valueUseCase),
30
+ recordValueDiff = _useConstantEntityRed.recordValueDiff;
31
+ var store = (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () {
32
+ if (!entityRootEnabled) {
33
+ return new _usecases.EntityStore(null);
34
+ }
35
+ var current = storeRef.current;
36
+ var _recordValueDiff = recordValueDiff(deps),
37
+ _recordValueDiff2 = (0, _slicedToArray2["default"])(_recordValueDiff, 2),
38
+ changedDeps = _recordValueDiff2[1];
39
+ var newStore = (0, _initStore.initStore)(entity, current, changedDeps);
40
+ storeRef.current = newStore;
41
+ return newStore;
42
+ }, deps);
43
+ var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
44
+ var _optionsRef$current = optionsRef.current,
45
+ onChange = _optionsRef$current.onChange,
46
+ watch = _optionsRef$current.watch;
47
+ if (watch) {
48
+ (0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
49
+ }
50
+ onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
51
+ if (!entityRootEnabled) {
52
+ return;
53
+ }
54
+ update();
55
+ });
56
+ /**
57
+ * 需要马上 `watch`,因为 `useEffect` 在子组件内优先执行,
58
+ * 如果使用了 `setEntity` 则无法监控到变化
59
+ */
60
+ (0, _ahooks.useCreation)(function () {
61
+ if (!entityEnabled) {
62
+ return;
63
+ }
64
+ store.watch(onEntityChange);
65
+ }, [entityEnabled, store, onEntityChange]);
66
+ /**
67
+ * 在变化时候,组件更新前,使用 `unwatch`
68
+ */
69
+ (0, _react.useEffect)(function () {
70
+ return function () {
71
+ store.unwatch(onEntityChange);
72
+ };
73
+ }, [entityEnabled, store, onEntityChange]);
74
+ return store;
75
+ };
@@ -5,29 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useUseCase = void 0;
8
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
12
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
11
  var _useArgumentTypes = require("../useArgumentTypes");
14
12
  var _useConstantFn = require("../useConstantFn");
15
13
  var _useConstantReducers2 = require("../useConstantReducers");
16
14
  var _useContext = require("../useContext");
17
- var _useContextualItem = require("../useContextualItem");
18
- var _useEntity3 = require("../useEntity");
15
+ var _useEntity = require("../useEntity");
19
16
  var _useFullArguments = require("../useFullArguments");
20
17
  var _useIsRenderingRef = require("../useIsRenderingRef");
21
18
  var _useProvider = require("../useProvider");
19
+ var _useReducers = require("../useReducers");
22
20
  var _useStatuses = require("../useStatuses");
23
- var _usecases = require("@mic-rexjs/usecases");
21
+ var _useStore = require("../useStore");
24
22
  var _ahooks = require("ahooks");
25
- var _react = require("react");
26
23
  var _Statuses = require("../../enums/Statuses");
27
24
  var _methodUseCase = require("../../usecases/methodUseCase");
28
25
  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; }
29
26
  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; }
30
- var _excluded = ["watch", "onChange", "options"];
31
27
  var useUseCase = exports.useUseCase = function useUseCase() {
32
28
  var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
33
29
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -40,47 +36,15 @@ var useUseCase = exports.useUseCase = function useUseCase() {
40
36
  unsafeUsecase = _fullArguments[1],
41
37
  options = _fullArguments[2],
42
38
  deps = _fullArguments[3];
43
- var unkownUsecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
44
- var usecase = unkownUsecase;
45
- var entityUseCase = unkownUsecase;
46
- var context = (0, _useContext.useContext)(unkownUsecase, argumentTypes);
47
- var contextValue = (0, _react.useContext)(context);
48
- var entityContextValue = contextValue;
49
- var statuses = (0, _useStatuses.useStatuses)(argumentTypes, contextValue);
50
- var optionsRef = (0, _ahooks.useLatest)(options);
51
- var _ref = contextValue || {},
52
- _ref$reducers = _ref.reducers,
53
- contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
54
- var _ref2 = entityContextValue || {},
55
- _ref2$store = _ref2.store,
56
- contextStore = _ref2$store === void 0 ? null : _ref2$store;
57
- var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options, deps),
58
- _useEntity2 = (0, _slicedToArray2["default"])(_useEntity, 2),
59
- entity = _useEntity2[0],
60
- store = _useEntity2[1];
61
39
  var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
62
- cacheCalls = _useConstantReducers.cacheCalls,
63
- captureCalls = _useConstantReducers.captureCalls;
64
- var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
65
- var opts = captureCalls(options, function (key, callArgs) {
66
- var _optionsRef$current$k2;
67
- var _optionsRef$current$k, _optionsRef$current;
68
- 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)));
69
- });
70
- if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
71
- return usecase(opts);
72
- }
73
- var hookOptions = opts;
74
- var watch = hookOptions.watch,
75
- onChange = hookOptions.onChange,
76
- usecaseOptions = hookOptions.options,
77
- restUseCaseOptions = (0, _objectWithoutProperties2["default"])(hookOptions, _excluded);
78
- return (0, _usecases.createEntityReducers)(store, entityUseCase, _objectSpread(_objectSpread(_objectSpread({}, restUseCaseOptions), usecaseOptions), {}, {
79
- onGenerate: function onGenerate(newEntity, result) {
80
- return result;
81
- }
82
- }));
83
- }, deps);
40
+ cacheCalls = _useConstantReducers.cacheCalls;
41
+ var usecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
42
+ var context = (0, _useContext.useContext)(usecase, argumentTypes);
43
+ var entityContext = context;
44
+ var statuses = (0, _useStatuses.useStatuses)(context, argumentTypes);
45
+ var store = (0, _useStore.useStore)(entityContext, unsafeEntity, statuses, options, deps);
46
+ var entity = (0, _useEntity.useEntity)(store, unsafeEntity, statuses);
47
+ var reducers = (0, _useReducers.useReducers)(usecase, context, store, statuses, options, deps);
84
48
  var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
85
49
  return (0, _ahooks.useCreation)(function () {
86
50
  if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {