@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
84 lines (83 loc) • 4.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useUseCase = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _ahooks = require("ahooks");
var _react = require("react");
var _useConstantFn = require("../useConstantFn");
var _useProvider = require("../useProvider");
var _initEntityReducers = require("../../methods/initEntityReducers");
var _useContext = require("../useContext");
var _useIsRenderingRef = require("../useIsRenderingRef");
var _useArgumentTypes = require("../useArgumentTypes");
var _useStatuses = require("../useStatuses");
var _Statuses = require("../../enums/Statuses");
var _useEntity3 = require("../useEntity");
var _useContextualItem = require("../useContextualItem");
var _cacheCalls = require("../../methods/cacheCalls");
var _useCompareDeps = require("../useCompareDeps");
var _captureCalls = require("../../methods/captureCalls");
var _useFullArguments = require("../useFullArguments");
var useUseCase = exports.useUseCase = function useUseCase() {
var isRenderingRef = (0, _useIsRenderingRef.useIsRenderingRef)();
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var argumentTypes = (0, _useArgumentTypes.useArgumentTypes)(args);
var fullArguments = (0, _useFullArguments.useFullArguments)(args, argumentTypes);
var _fullArguments = (0, _slicedToArray2["default"])(fullArguments, 4),
unsafeEntity = _fullArguments[0],
unsafeUsecase = _fullArguments[1],
options = _fullArguments[2],
deps = _fullArguments[3];
var unkownUsecase = (0, _useConstantFn.useConstantFn)(unsafeUsecase);
var usecase = unkownUsecase;
var entityUseCase = unkownUsecase;
var context = (0, _useContext.useContext)(unkownUsecase, argumentTypes);
var contextValue = (0, _react.useContext)(context);
var entityContextValue = contextValue;
var statuses = (0, _useStatuses.useStatuses)(argumentTypes, contextValue);
var optionsRef = (0, _ahooks.useLatest)(options);
var depsKey = (0, _useCompareDeps.useCompareDeps)(deps);
var _ref = contextValue || {},
_ref$reducers = _ref.reducers,
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
var _ref2 = entityContextValue || {},
_ref2$store = _ref2.store,
contextStore = _ref2$store === void 0 ? null : _ref2$store;
var _useEntity = (0, _useEntity3.useEntity)(statuses, unsafeEntity, contextStore, options),
_useEntity2 = (0, _slicedToArray2["default"])(_useEntity, 2),
entity = _useEntity2[0],
store = _useEntity2[1];
var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
var opts = (0, _captureCalls.captureCalls)(options, function (key, callArgs) {
var _optionsRef$current$k, _optionsRef$current;
return (_optionsRef$current$k = (_optionsRef$current = optionsRef.current)[key]) === null || _optionsRef$current$k === void 0 ? void 0 : _optionsRef$current$k.call.apply(_optionsRef$current$k, [_optionsRef$current].concat((0, _toConsumableArray2["default"])(callArgs)));
});
if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
return usecase(opts);
}
var hookOptions = opts;
return (0, _initEntityReducers.initEntityReducers)(entityUseCase, store, hookOptions);
}, depsKey);
var Provider = (0, _useProvider.useProvider)(statuses, context, store, reducers);
return (0, _ahooks.useCreation)(function () {
if ((statuses & _Statuses.Statuses.EntityEnabled) !== _Statuses.Statuses.EntityEnabled) {
return reducers;
}
var rootEnabled = (statuses & _Statuses.Statuses.RootEnabled) === _Statuses.Statuses.RootEnabled;
var cachedReducers = (0, _cacheCalls.cacheCalls)(reducers, {
onShouldCache: function onShouldCache() {
return isRenderingRef.current;
}
});
if (rootEnabled) {
return [entity, cachedReducers, Provider];
}
return [entity, cachedReducers];
}, [statuses, entity, reducers, Provider, isRenderingRef]);
};