react-entities
Version:
React Entities - the simplest app state management for React
46 lines (37 loc) • 1.29 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = exports.useUnscopedEntity = void 0;
var _react = require("react");
var _utils = require("./utils");
var useUnscopedEntity = function useUnscopedEntity(entity, selector, equalityFn) {
if (selector === void 0) {
selector = _utils.selectAll;
}
if (equalityFn === void 0) {
equalityFn = _utils.strictEqual;
}
var selected = selector(entity.state);
var _useState = (0, _react.useState)(selected),
state = _useState[0],
setState = _useState[1];
var subscriberFn = (0, _react.useCallback)(function (newState) {
var newSelected = selector(newState);
var hasChanged = !equalityFn(state, newSelected);
if (hasChanged) setState(newSelected);
}, [selector, equalityFn, state]);
(0, _react.useEffect)(function () {
entity.subscribers.push(subscriberFn);
return function () {
for (var i = 0, c = entity.subscribers.length; i < c; i++) {
if (entity.subscribers[i] === subscriberFn) {
entity.subscribers[i] = null;
break;
}
}
};
}, [subscriberFn, entity.subscribers]);
return [selected, entity.actions];
};
exports.useUnscopedEntity = useUnscopedEntity;
var _default = useUnscopedEntity;
exports["default"] = _default;