import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect"; import { collectScroller, getWin } from "../util"; export default function useWatch(open, target, popup, onAlign, onScroll) { useLayoutEffect(function () { if (open && target && popup) { var targetElement = target; var popupElement = popup; var targetScrollList = collectScroller(targetElement); var popupScrollList = collectScroller(popupElement); var win = getWin(popupElement); var mergedList = new Set([win].concat(_toConsumableArray(targetScrollList), _toConsumableArray(popupScrollList))); function notifyScroll() { onAlign(); onScroll(); } mergedList.forEach(function (scroller) { scroller.addEventListener('scroll', notifyScroll, { passive: true }); }); win.addEventListener('resize', notifyScroll, { passive: true }); // First time always do align onAlign(); return function () { mergedList.forEach(function (scroller) { scroller.removeEventListener('scroll', notifyScroll); win.removeEventListener('resize', notifyScroll); }); }; } }, [open, target, popup]); }