UNPKG

rc-hooks

Version:
42 lines (41 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); var usePersistFn_1 = tslib_1.__importDefault(require("../usePersistFn")); var dom_1 = require("../utils/dom"); function getTarget(target) { if (typeof target === 'function') { // @ts-ignore return target(); } return target; } var useScrollToLower = function (_a) { var _b = _a === void 0 ? {} : _a, outTarget = _b.target, _c = _b.threshold, threshold = _c === void 0 ? 100 : _c, _d = _b.onScrollLower, onScrollLower = _d === void 0 ? function () { } : _d; var onScrollLowerPersist = (0, usePersistFn_1.default)(onScrollLower); var scrollMethod = (0, react_1.useCallback)(function () { if (!outTarget) { return; } var target = getTarget(outTarget); if (!target) { return; } if ((0, dom_1.getScrollHeight)(target) - (0, dom_1.getScrollTop)(target) <= (0, dom_1.getClientHeight)(target) + threshold) { onScrollLowerPersist(); } }, [onScrollLowerPersist, outTarget, threshold]); (0, react_1.useEffect)(function () { if (outTarget) { var target_1 = getTarget(outTarget); if (target_1) { target_1.addEventListener('scroll', scrollMethod); return function () { target_1.removeEventListener('scroll', scrollMethod); }; } } }, [outTarget, scrollMethod]); }; exports.default = useScrollToLower;