refun
Version:
A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:
58 lines (44 loc) • 1.97 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ReduxStateFactory = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _tsfn = require("tsfn");
var _utils = require("./utils");
var ReduxStateFactory = function ReduxStateFactory(context) {
return function (mapStateToProps, stateKeysToWatch) {
return function (props) {
var _useState = (0, _react.useState)(_tsfn.EMPTY_OBJECT),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
rerender = _useState2[1];
var prevStateRef = (0, _react.useRef)(_tsfn.EMPTY_OBJECT);
var prevStatePropsRef = (0, _react.useRef)(_tsfn.EMPTY_OBJECT);
var store = (0, _react.useContext)(context);
var onMountRef = (0, _react.useRef)(_tsfn.NOOP);
if (prevStatePropsRef.current === _tsfn.EMPTY_OBJECT) {
var newState = store.getState();
prevStateRef.current = newState;
prevStatePropsRef.current = mapStateToProps(newState);
}
if (onMountRef.current === _tsfn.NOOP) {
onMountRef.current = function () {
return store.subscribe(function () {
var newState = store.getState();
if (!(0, _utils.shallowEqualByKeys)(prevStateRef.current, newState, stateKeysToWatch)) {
prevStatePropsRef.current = mapStateToProps(newState);
rerender({});
}
prevStateRef.current = newState;
});
};
}
(0, _react.useEffect)(onMountRef.current, _tsfn.EMPTY_ARRAY);
return (0, _extends2.default)({}, props, prevStatePropsRef.current);
};
};
};
exports.ReduxStateFactory = ReduxStateFactory;
//# sourceMappingURL=redux-state-factory.js.map