All files / Rindu/hooks useOnScreen.ts

16.66% Statements 2/12
0% Branches 0/1
0% Functions 0/4
18.18% Lines 2/11

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 2313x   6x                                        
import { RefObject, useEffect, useState } from "react";
 
export function useOnScreen(
  ref: RefObject<HTMLElement>,
  rootMargin?: string
): boolean {
  const [isIntersecting, setIsIntersecting] = useState(false);
 
  useEffect(() => {
    Iif (!ref.current) return;
    const observer = new IntersectionObserver(
      ([entry]) => setIsIntersecting(entry.isIntersecting),
      { rootMargin }
    );
    observer.observe(ref.current);
    return () => {
      observer.disconnect();
    };
  }, [ref, rootMargin]);
 
  return isIntersecting;
}