UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

57 lines (56 loc) 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useEntity = void 0; var _react = require("react"); var _usecases = require("@mic-rexjs/usecases"); var _Statuses = require("../../enums/Statuses"); var _useContextualItem = require("../useContextualItem"); var _ahooks = require("ahooks"); var _triggerWatchers = require("../../methods/triggerWatchers"); var _useRuntimeEntity = require("../useRuntimeEntity"); var useEntity = exports.useEntity = function useEntity(statuses, entityArg, contextStore, options) { var update = (0, _ahooks.useUpdate)(); var optionsRef = (0, _ahooks.useLatest)(options); var contextEntity = contextStore ? contextStore.value : null; var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled; var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled; var store = (0, _useContextualItem.useContextualItem)(contextStore, statuses, function () { if (!entityRootEnabled) { return new _usecases.EntityStore(null); } var isFunction = typeof entityArg === 'function'; return new _usecases.EntityStore(isFunction ? entityArg() : entityArg); }); var runtimeEntity = (0, _useRuntimeEntity.useRuntimeEntity)(store, entityArg, contextEntity, statuses); var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) { var _optionsRef$current = optionsRef.current, onChange = _optionsRef$current.onChange, watch = _optionsRef$current.watch; if (watch) { (0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity); } onChange === null || onChange === void 0 || onChange(newEntity, oldEntity); if (!entityRootEnabled) { return; } update(); }); if (entityRootEnabled) { // 执行同步操作 store.value = runtimeEntity; } (0, _react.useEffect)(function () { if (!entityEnabled) { return; } store.watch(onEntityChange); return function () { store.unwatch(onEntityChange); }; }, [entityEnabled, store, onEntityChange]); return (0, _ahooks.useCreation)(function () { return [runtimeEntity, store]; }, [runtimeEntity, store]); };