UNPKG

@wordpress/block-editor

Version:
37 lines (33 loc) 1.03 kB
/** * 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;