All files / src/components/ui/hooks use-on-screen.ts

0% Statements 0/13
0% Branches 0/1
0% Functions 0/5
0% Lines 0/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                                 
import { useState, useEffect, useMemo } from "react";
 
const useOnScreen = (ref: React.MutableRefObject<Element | null>) => {
  const [isIntersecting, setIntersecting] = useState(false);
  const observer = useMemo(() => {
    return new IntersectionObserver(([entry]) =>
      setIntersecting(entry.isIntersecting)
    );
  }, []);
 
  useEffect(() => {
    Iif (ref.current) {
      observer.observe(ref.current);
    }
    // Remove the observer as soon as the component is unmounted
    return () => {
      observer.disconnect();
    };
  }, [observer, ref]);
 
  return isIntersecting;
};
 
export default useOnScreen;