UNPKG

@ui5/webcomponents-react

Version:

React Wrapper for UI5 Web Components and additional components

35 lines (33 loc) 1.09 kB
import { useCallback, useEffect, useRef } from 'react'; const isScrollEndAvailable = typeof document !== 'undefined' && 'onscrollend' in document.createElement('div'); export function useOnScrollEnd(props) { const { objectPageRef, setTabSelectId } = props; const scrollEndTimeout = useRef(null); // Native scrollend listener useEffect(() => { const objectPage = objectPageRef.current; if (!objectPage || !isScrollEndAvailable) return; const onNativeScrollEnd = () => { setTabSelectId(null); }; objectPage.addEventListener('scrollend', onNativeScrollEnd); return () => { objectPage.removeEventListener('scrollend', onNativeScrollEnd); }; }, [objectPageRef, setTabSelectId]); // Fallback in onScroll const onObjectPageScroll = useCallback(() => { if (!isScrollEndAvailable) { if (scrollEndTimeout.current) { clearTimeout(scrollEndTimeout.current); } scrollEndTimeout.current = setTimeout(() => { setTabSelectId(null); }, 100); } }, [setTabSelectId]); return onObjectPageScroll; }