@modern-kit/react
Version:
43 lines (39 loc) • 1.09 kB
JavaScript
;
var utils = require('@modern-kit/utils');
var hooksUsePreservedCallback = require('../usePreservedCallback/index.cjs');
var React = require('react');
const initialState = {
bottom: 0,
height: 0,
left: 0,
right: 0,
top: 0,
width: 0,
x: 0,
y: 0
};
function useResizeObserver(action = utils.noop) {
const [contentRect, setContentRect] = React.useState(initialState);
const targetRef = React.useRef(null);
const preservedCallbackAction = hooksUsePreservedCallback.usePreservedCallback(
([entry]) => {
if (!entry) return;
action(entry);
setContentRect(entry.contentRect);
}
);
React.useEffect(() => {
if (!targetRef.current) {
return;
}
const targetElement = targetRef.current;
const observer = new ResizeObserver(preservedCallbackAction);
observer.observe(targetElement);
return () => {
observer.unobserve(targetElement);
};
}, [preservedCallbackAction]);
return { ref: targetRef, contentRect };
}
exports.useResizeObserver = useResizeObserver;
//# sourceMappingURL=index.cjs.map