@wordpress/compose
Version:
WordPress higher-order components (HOCs).
43 lines (39 loc) • 1.4 kB
JavaScript
/**
* WordPress dependencies
*/
import { useRef } from '@wordpress/element';
/**
* Internal dependencies
*/
import useEvent from '../use-event';
// This is the current implementation of `useResizeObserver`.
//
// The legacy implementation is still supported for backwards compatibility.
// This is achieved by overloading the exported function with both signatures,
// and detecting which API is being used at runtime.
export function useResizeObserver(callback, resizeObserverOptions = {}) {
const callbackEvent = useEvent(callback);
const observedElementRef = useRef();
const resizeObserverRef = useRef();
return useEvent(element => {
var _resizeObserverRef$cu;
if (element === observedElementRef.current) {
return;
}
// Set up `ResizeObserver`.
(_resizeObserverRef$cu = resizeObserverRef.current) !== null && _resizeObserverRef$cu !== void 0 ? _resizeObserverRef$cu : resizeObserverRef.current = new ResizeObserver(callbackEvent);
const {
current: resizeObserver
} = resizeObserverRef;
// Unobserve previous element.
if (observedElementRef.current) {
resizeObserver.unobserve(observedElementRef.current);
}
// Observe new element.
observedElementRef.current = element;
if (element) {
resizeObserver.observe(element, resizeObserverOptions);
}
});
}
//# sourceMappingURL=use-resize-observer.js.map