@wordpress/block-editor
Version:
50 lines (47 loc) • 1.57 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _compose = require("@wordpress/compose");
var _dom = require("@wordpress/dom");
/**
* WordPress dependencies
*/
const scrollContainerCache = new WeakMap();
/**
* 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} contentRef
*/
function usePopoverScroll(contentRef) {
const effect = (0, _compose.useRefEffect)(node => {
function onWheel(event) {
const {
deltaX,
deltaY
} = event;
const contentEl = contentRef.current;
let scrollContainer = scrollContainerCache.get(contentEl);
if (!scrollContainer) {
scrollContainer = (0, _dom.getScrollContainer)(contentEl);
scrollContainerCache.set(contentEl, scrollContainer);
}
scrollContainer.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);
};
}, [contentRef]);
return contentRef ? effect : null;
}
var _default = exports.default = usePopoverScroll;
//# sourceMappingURL=use-popover-scroll.js.map
;