@dnanpm/styleguide
Version:
DNA Styleguide repository provides the set of components and theme object used in various DNA projects.
38 lines (33 loc) • 1.29 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
/**
* Hook to get element dimensions when layout changes
*/
const ResizeObserver = typeof window !== 'undefined' && window.ResizeObserver;
const useResizeObserver = (ref) => {
const [size, setSize] = React.useState({ width: 0, height: 0 });
const resizeObserver = React.useRef(null);
const onResize = React.useCallback(entries => {
const { inlineSize, blockSize } = entries[0].borderBoxSize[0];
setSize({ width: inlineSize, height: blockSize });
}, []);
React.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]);
React.useEffect(() => () => {
if (resizeObserver.current) {
resizeObserver.current.disconnect();
}
}, []);
return { ref, width: size.width, height: size.height };
};
exports.default = useResizeObserver;