Skip to content
Snippets Groups Projects
use-visibility.ts 836 B
Newer Older
import { useEffect, useState } from "react";

export const useVisibility = () => {
  const [visible, setVisible] = useState(true);

  useEffect(() => {
    const handleVisibilityChange = () => {
      setVisible(document.visibilityState === "visible");
    };

    const handleFocus = () => setVisible(true);
    const handleClick = () => setVisible(true);

    handleVisibilityChange();
    document.addEventListener("focus", handleFocus);
    document.addEventListener("pointerdown", handleClick);
    document.addEventListener("visibilitychange", handleVisibilityChange);

    return () => {
      document.removeEventListener("focus", handleFocus);
      document.removeEventListener("pointerdown", handleClick);
      document.removeEventListener("visibilitychange", handleVisibilityChange);
    };
  }, []);

  return visible;
};