@@ -17,14 +17,24 @@ function usePopoverScroll( contentRef ) {
1717 const effect = useRefEffect (
1818 ( node ) => {
1919 function onWheel ( event ) {
20- const { deltaX, deltaY } = event ;
20+ const { deltaX, deltaY, target } = event ;
2121 const contentEl = contentRef . current ;
2222 let scrollContainer = scrollContainerCache . get ( contentEl ) ;
2323 if ( ! scrollContainer ) {
2424 scrollContainer = getScrollContainer ( contentEl ) ;
2525 scrollContainerCache . set ( contentEl , scrollContainer ) ;
2626 }
27- scrollContainer . scrollBy ( deltaX , deltaY ) ;
27+ let eventScrollContainer = getScrollContainer ( target ) ;
28+ if ( ! eventScrollContainer ) {
29+ eventScrollContainer = getScrollContainer ( contentEl ) ;
30+ scrollContainerCache . set ( contentEl , eventScrollContainer ) ;
31+ }
32+ const { scrollHeight, offsetHeight } = eventScrollContainer ;
33+ // Scrolls “through” the popover only if the event target wasn’t within
34+ // a scrollable container and thereby avoids scrolling both containers.
35+ if ( scrollHeight === offsetHeight ) {
36+ scrollContainer . scrollBy ( deltaX , deltaY ) ;
37+ }
2838 }
2939 // Tell the browser that we do not call event.preventDefault
3040 // See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners
0 commit comments