UNPKG

@redocly/theme

Version:

Shared UI components lib

47 lines 1.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useFullHeight = useFullHeight; const react_1 = require("react"); const lodash_throttle_1 = __importDefault(require("lodash.throttle")); function useFullHeight(element) { const handler = (0, react_1.useCallback)(() => { if (!element.current) { return; } const footer = document.querySelector('footer'); if (!footer) { return; } const elementTop = element.current.getBoundingClientRect().top; const footerOffset = footer.offsetTop - window.scrollY - elementTop; if (footerOffset > window.innerHeight) { element.current.style.maxHeight = `${window.innerHeight - elementTop}px`; } else { element.current.style.maxHeight = `${footerOffset}px`; } }, [element]); const throttledHandler = (0, react_1.useMemo)(() => (0, lodash_throttle_1.default)(handler, 150), [handler]); (0, react_1.useEffect)(() => { if (typeof window === 'undefined' || !element.current) { return () => { // nope }; } window.addEventListener('scroll', throttledHandler, { capture: false, }); window.addEventListener('resize', throttledHandler, { capture: false, }); handler(); return () => { window.removeEventListener('scroll', throttledHandler); window.removeEventListener('resize', throttledHandler); }; }, [throttledHandler, element, handler]); } //# sourceMappingURL=use-full-height.js.map