@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
34 lines (33 loc) • 1.51 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useProvider = void 0;
var _useConstantFn = require("../useConstantFn");
var _ahooks = require("ahooks");
var _react = _interopRequireDefault(require("react"));
var _contextUseCase2 = require("../../usecases/contextUseCase");
var useProvider = exports.useProvider = function useProvider(statuses, context, store, reducers) {
var entity = store.value;
var contextValue = (0, _ahooks.useCreation)(function () {
var _contextUseCase = (0, _contextUseCase2.contextUseCase)(),
createContextValue = _contextUseCase.createContextValue;
void entity;
return createContextValue(store, reducers, statuses);
}, [statuses, entity, store, reducers]);
var contextValueRef = (0, _ahooks.useLatest)(contextValue);
return (0, _useConstantFn.useConstantFn)(function (_ref) {
var children = _ref.children,
_ref$with = _ref["with"],
withProviders = _ref$with === void 0 ? [] : _ref$with;
var ContextProvider = context.Provider;
var value = contextValueRef.current;
var providers = Array.isArray(withProviders) ? withProviders : [withProviders];
return _react["default"].createElement(ContextProvider, {
value: value
}, providers.reduceRight(function (currentChildren, withProvider) {
return _react["default"].createElement(withProvider, {}, currentChildren);
}, children));
});
};