import React from 'react'; export default function useBodyScroll() { const scrollHeight = React.useRef(0); const scrollerState = React.useRef({}); const bodyScroller = React.useRef(null); const instanceRef = React.useRef(null); const timer = React.useRef(null); const int = () => { bodyScroller.current = window.__GPUSTACK_BODY_SCROLLER__?.elements()?.scrollEventElement; instanceRef.current = window.__GPUSTACK_BODY_SCROLLER__; }; const saveScrollHeight = React.useCallback(() => { if (!bodyScroller.current) { int(); } scrollerState.current = instanceRef.current?.state(); const scrollTop = scrollerState.current?.overflowAmount?.y; scrollHeight.current = scrollTop; instanceRef.current?.options?.({ overflow: { x: 'hidden', y: 'visible' } }); }, []); const restoreScrollHeight = React.useCallback(() => { if (timer.current) { clearTimeout(timer.current); } timer.current = setTimeout(() => { instanceRef.current?.options?.({ overflow: { x: 'hidden', y: 'scroll' } }); }, 500); }, []); React.useEffect(() => { int(); return () => { bodyScroller.current = null; instanceRef.current = null; }; }, []); return { saveScrollHeight, restoreScrollHeight, bodyScroller: bodyScroller.current }; }