@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
38 lines (37 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useContextualItem = void 0;
var _useConstantReducers2 = require("../useConstantReducers");
var _useDepsKey = require("../useDepsKey");
var _ahooks = require("ahooks");
var _Statuses = require("../../enums/Statuses");
var _methodUseCase = require("../../usecases/methodUseCase");
var useContextualItem = exports.useContextualItem = function useContextualItem(contextItem, statuses, createFactory) {
var deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var depsKey = (0, _useDepsKey.useDepsKey)(deps);
var factoryRef = (0, _ahooks.useLatest)(createFactory);
var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
cacheCall = _useConstantReducers.cacheCall;
var onCache = (0, _ahooks.useMemoizedFn)(function () {
var currentFactory = factoryRef.current;
// 防止在以下 `onCreate()` 多次调用实际 `factory`
return cacheCall(currentFactory, {
onCompare: function onCompare() {
return true;
}
});
});
var onCreate = (0, _ahooks.useCreation)(function () {
void depsKey;
return onCache();
}, [depsKey, onCache]);
return (0, _ahooks.useCreation)(function () {
var rootEnabled = (statuses & _Statuses.Statuses.RootEnabled) === _Statuses.Statuses.RootEnabled;
if (!rootEnabled && contextItem) {
return contextItem;
}
return onCreate();
}, [statuses, contextItem, onCreate]);
};