react-in-viewport
Version:
Track React component in viewport using Intersection Observer API
55 lines (54 loc) • 2.8 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = void 0;
var _react = require("react");
var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
var _useInViewport2 = _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)(function (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 = function InViewport(_ref) {
var _ref$onEnterViewport = _ref.onEnterViewport,
onEnterViewport = _ref$onEnterViewport === void 0 ? _constants.noop : _ref$onEnterViewport,
_ref$onLeaveViewport = _ref.onLeaveViewport,
onLeaveViewport = _ref$onLeaveViewport === void 0 ? _constants.noop : _ref$onLeaveViewport,
restProps = _objectWithoutPropertiesLoose(_ref, _excluded);
var node = (0, _react.useRef)(null);
var _useInViewport = (0, _useInViewport2["default"])(node, options, config, {
onEnterViewport: onEnterViewport,
onLeaveViewport: onLeaveViewport
}),
inViewport = _useInViewport.inViewport,
enterCount = _useInViewport.enterCount,
leaveCount = _useInViewport.leaveCount;
var props = _extends({}, restProps, {
inViewport: inViewport,
enterCount: enterCount,
leaveCount: 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;