@redocly/theme
Version:
Shared UI components lib
47 lines • 1.8 kB
JavaScript
;
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