@mic-rexjs/usecases-react 1.5.0 → 1.6.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/es/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { UseCaseFragment } from './components/UseCaseFragment';
2
- export { useReducer } from './hooks/useReducer';
3
2
  export { useUseCase } from './hooks/useUseCase';
4
3
  export type { CoreCollection } from './hooks/useUseCase/types';
5
4
  export type { UseCaseHookOptions } from './hooks/useUseCase/types';
package/es/index.js CHANGED
@@ -1,3 +1,2 @@
1
1
  export { UseCaseFragment } from './components/UseCaseFragment';
2
- export { useReducer } from './hooks/useReducer';
3
2
  export { useUseCase } from './hooks/useUseCase';
@@ -0,0 +1,3 @@
1
+ import { Reducers } from '@mic-rexjs/usecases';
2
+ import { ShouldCacheReducerCallback } from './types';
3
+ export declare const cacheReducerCalls: <T extends Reducers>(reducers: T, shouldCache: ShouldCacheReducerCallback) => T;
@@ -0,0 +1,26 @@
1
+ import { isSameArray } from '../isSameArray';
2
+ export const cacheReducerCalls = (reducers, shouldCache) => {
3
+ const cacheMap = {};
4
+ const newReducers = {};
5
+ for (const [key, reducer] of Object.entries(reducers)) {
6
+ newReducers[key] = ((...args) => {
7
+ const cache = cacheMap[key];
8
+ const cacheable = shouldCache();
9
+ if (cache && cacheable) {
10
+ const { parameters, returnValue } = cache;
11
+ if (isSameArray(parameters, args)) {
12
+ return returnValue;
13
+ }
14
+ }
15
+ const returnValue = reducer(...args);
16
+ if (cacheable) {
17
+ cacheMap[key] = {
18
+ parameters: args,
19
+ returnValue,
20
+ };
21
+ }
22
+ return returnValue;
23
+ });
24
+ }
25
+ return newReducers;
26
+ };
@@ -0,0 +1,11 @@
1
+ import { Reducer, Reducers } from '@mic-rexjs/usecases';
2
+ export interface ReducerCallCache<T extends Reducer> {
3
+ parameters: Parameters<T>;
4
+ returnValue: ReturnType<T>;
5
+ }
6
+ export interface ShouldCacheReducerCallback {
7
+ (): boolean;
8
+ }
9
+ export type ReducerCallCacheMap<T extends Reducers> = {
10
+ [K in keyof T]?: ReducerCallCache<T[K]>;
11
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useIsRenderingRef = void 0;
7
+ var _react = require("react");
8
+ var useIsRenderingRef = function useIsRenderingRef() {
9
+ var ref = (0, _react.useRef)(true);
10
+ ref.current = true;
11
+ (0, _react.useEffect)(function () {
12
+ ref.current = false;
13
+ });
14
+ return ref;
15
+ };
16
+ exports.useIsRenderingRef = useIsRenderingRef;
@@ -19,6 +19,8 @@ var _triggerCallbacks = require("../../methods/triggerCallbacks");
19
19
  var _getRootEntity = require("../../methods/getRootEntity");
20
20
  var _useUseCaseContext = require("../useUseCaseContext");
21
21
  var _defaultUseCaseContext = require("../../configs/defaultUseCaseContext");
22
+ var _useIsRenderingRef = require("../useIsRenderingRef");
23
+ var _cacheReducerCalls = require("../../methods/cacheReducerCalls");
22
24
  var useUseCase = function useUseCase(arg1, arg2, arg3, arg4) {
23
25
  var hasInitialEntity = (0, _useConstant.useConstant)(typeof arg2 === 'function');
24
26
  var options = (hasInitialEntity ? arg3 : arg2) || {};
@@ -29,6 +31,7 @@ var useUseCase = function useUseCase(arg1, arg2, arg3, arg4) {
29
31
  setEntityState = _useState2[1];
30
32
  var deps = (hasInitialEntity ? arg4 : arg3) || [];
31
33
  var depsKey = (0, _useCompareDeps.useCompareDeps)(deps);
34
+ var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
32
35
  var usecase = (0, _useConstantFn.useConstantFn)(hasInitialEntity ? arg2 : arg1);
33
36
  var entityUseCase = usecase;
34
37
  var defaultContext = _defaultUseCaseContext.defaultUseCaseContext;
@@ -80,14 +83,19 @@ var useUseCase = function useUseCase(arg1, arg2, arg3, arg4) {
80
83
  reducers = _useCreation2[0],
81
84
  entityReducers = _useCreation2[1];
82
85
  var Provider = (0, _useProvider.useProvider)(context, entity, entityReducers, optionsRefCollection);
86
+ var enableCache = (0, _ahooks.useMemoizedFn)(function (cacheableReducers) {
87
+ return (0, _cacheReducerCalls.cacheReducerCalls)(cacheableReducers, function () {
88
+ return isRenderingRef.current;
89
+ });
90
+ });
83
91
  var coreCollection = (0, _ahooks.useCreation)(function () {
84
- return [entity, entityReducers, hasInitialEntity ? Provider : null];
85
- }, [hasInitialEntity, entity, entityReducers, Provider]);
92
+ return [entity, enableCache(entityReducers), hasInitialEntity ? Provider : null];
93
+ }, [hasInitialEntity, entity, entityReducers, Provider, enableCache]);
86
94
  return (0, _ahooks.useCreation)(function () {
87
95
  if (isContextMode) {
88
96
  return coreCollection;
89
97
  }
90
- return reducers;
91
- }, [isContextMode, reducers, coreCollection]);
98
+ return enableCache(reducers);
99
+ }, [isContextMode, reducers, coreCollection, enableCache]);
92
100
  };
93
101
  exports.useUseCase = useUseCase;