UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

84 lines (83 loc) 4.3 kB
"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]); };