@wordpress/block-editor
Version:
37 lines (33 loc) • 1.03 kB
JavaScript
/**
* WordPress dependencies
*/
import { useRefEffect } from '@wordpress/compose';
/**
* Allow scrolling "through" popovers over the canvas. This is only called for
* as long as the pointer is over a popover. Do not use React events because it
* will bubble through portals.
*
* @param {Object} scrollableRef
*/
function usePopoverScroll( scrollableRef ) {
return useRefEffect(
( node ) => {
if ( ! scrollableRef ) {
return;
}
function onWheel( event ) {
const { deltaX, deltaY } = event;
scrollableRef.current.scrollBy( deltaX, deltaY );
}
// Tell the browser that we do not call event.preventDefault
// See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners
const options = { passive: true };
node.addEventListener( 'wheel', onWheel, options );
return () => {
node.removeEventListener( 'wheel', onWheel, options );
};
},
[ scrollableRef ]
);
}
export default usePopoverScroll;