UNPKG

@dnanpm/styleguide

Version:

DNA Styleguide repository provides the set of components and theme object used in various DNA projects.

34 lines (31 loc) 1.22 kB
import { useState, useRef, useCallback, useEffect } from 'react'; /** * Hook to get element dimensions when layout changes */ const ResizeObserver = typeof window !== 'undefined' && window.ResizeObserver; const useResizeObserver = (ref) => { const [size, setSize] = useState({ width: 0, height: 0 }); const resizeObserver = useRef(null); const onResize = useCallback(entries => { const { inlineSize, blockSize } = entries[0].borderBoxSize[0]; setSize({ width: inlineSize, height: blockSize }); }, []); useEffect(() => { if ((ref === null || ref === void 0 ? void 0 : ref.current) && ResizeObserver) { if (resizeObserver.current) { resizeObserver.current.disconnect(); } resizeObserver.current = new ResizeObserver(onResize); if (resizeObserver.current) { resizeObserver.current.observe(ref.current); } } }, [ref, onResize]); useEffect(() => () => { if (resizeObserver.current) { resizeObserver.current.disconnect(); } }, []); return { ref, width: size.width, height: size.height }; }; export { useResizeObserver as default };