1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/packages/pdf-viewer/hooks/useIsVisible.ts

39 lines
885 B
TypeScript
Raw Normal View History

import { useEffect, useState, MutableRefObject } from 'react';
const useIsVisible = (elementRef: MutableRefObject<HTMLElement>, rootRef: MutableRefObject<HTMLElement>) => {
const [isVisible, setIsVisible] = useState(false);
useEffect(() => {
let observer: IntersectionObserver = null;
if (elementRef.current) {
observer = new IntersectionObserver((entries, _observer) => {
let visible = false;
entries.forEach((entry) => {
if (entry.isIntersecting) {
visible = true;
setIsVisible(true);
}
});
if (!visible) {
setIsVisible(false);
}
}, {
root: rootRef.current,
rootMargin: '0px 0px 0px 0px',
threshold: 0,
});
observer.observe(elementRef.current);
}
return () => {
if (observer) {
observer.disconnect();
}
};
}, [elementRef, rootRef]);
return isVisible;
};
export default useIsVisible;