UNPKG

@redocly/theme

Version:

Shared UI components lib

50 lines (40 loc) 1.36 kB
import { useCallback, useEffect, useMemo } from 'react'; import throttle from 'lodash.throttle'; import type { RefObject } from 'react'; export function useFullHeight(element: RefObject<HTMLElement | null>): void { const handler = 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 = useMemo(() => throttle(handler, 150), [handler]); 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]); }