react-in-viewport
Version:
Track React component in viewport using Intersection Observer API
66 lines (65 loc) • 3.58 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "react", "hoist-non-react-statics", "./useInViewport", "./constants", "react/jsx-runtime"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("react"), require("hoist-non-react-statics"), require("./useInViewport"), require("./constants"), require("react/jsx-runtime"));
} else {
var mod = {
exports: {}
};
factory(mod.exports, global.react, global.hoistNonReactStatics, global.useInViewport, global.constants, global.jsxRuntime);
global.handleViewport = mod.exports;
}
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _react, _hoistNonReactStatics, _useInViewport2, _constants, _jsxRuntime) {
"use strict";
_exports.__esModule = true;
_exports["default"] = void 0;
_hoistNonReactStatics = _interopRequireDefault(_hoistNonReactStatics);
_useInViewport2 = _interopRequireDefault(_useInViewport2);
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;
});