visuddhinanda 2 лет назад
Родитель
Сommit
cd61cee4f2
1 измененных файлов с 36 добавлено и 0 удалено
  1. 36 0
      dashboard/src/components/general/VisibleObserver.tsx

+ 36 - 0
dashboard/src/components/general/VisibleObserver.tsx

@@ -0,0 +1,36 @@
+import { useEffect, useRef, useState } from "react";
+
+const useOnScreen = (ref: any) => {
+  const [isIntersecting, setIntersecting] = useState(false);
+  const observer = new IntersectionObserver(([entry]) =>
+    setIntersecting(entry.isIntersecting)
+  );
+  useEffect(() => {
+    observer.observe(ref.current);
+    return () => {
+      observer.disconnect();
+    };
+  }, []);
+
+  return isIntersecting;
+};
+interface IWidget {
+  onVisible?: Function;
+}
+const VisibleObserverWidget = ({ onVisible }: IWidget) => {
+  const ref = useRef<HTMLDivElement>(null);
+  const isVisible = useOnScreen(ref);
+
+  useEffect(() => {
+    if (typeof onVisible !== "undefined") {
+      onVisible(isVisible);
+    }
+  }, [isVisible]);
+  return (
+    <div ref={ref} style={{ height: 20 }}>
+      {" "}
+    </div>
+  );
+};
+
+export default VisibleObserverWidget;