react-in-viewport
Version:
Track React component in viewport using Intersection Observer API
56 lines (55 loc) • 2.4 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _react = require("react");
var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
var _useInViewport = _interopRequireDefault(require("./useInViewport"));
var _constants = require("./constants");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["onEnterViewport", "onLeaveViewport"];
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function handleViewport(TargetComponent, options, config) {
if (options === void 0) {
options = _constants.defaultOptions;
}
if (config === void 0) {
config = _constants.defaultConfig;
}
var ForwardedRefComponent = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
var refProps = {
forwardedRef: ref
// pass both ref/forwardedRef for class component for backward compatibility
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)(TargetComponent, _extends({}, props, refProps));
});
var InViewport = _ref => {
var {
onEnterViewport = _constants.noop,
onLeaveViewport = _constants.noop
} = _ref,
restProps = _objectWithoutPropertiesLoose(_ref, _excluded);
var node = (0, _react.useRef)(null);
var {
inViewport,
enterCount,
leaveCount
} = (0, _useInViewport.default)(node, options, config, {
onEnterViewport,
onLeaveViewport
});
var props = _extends({}, restProps, {
inViewport,
enterCount,
leaveCount
});
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ForwardedRefComponent, _extends({}, props, {
ref: node
}));
};
var name = TargetComponent.displayName || TargetComponent.name || 'Component';
InViewport.displayName = "handleViewport(" + name + ")";
return (0, _hoistNonReactStatics.default)(InViewport, ForwardedRefComponent);
}
var _default = exports.default = handleViewport;