Newer
Older
taehui / qwilight-fe / src / site / useSiteComponent.tsx
@Taehui Taehui on 6 Nov 1 KB 2023-11-06 오후 10:13
import { MutableRefObject, useEffect } from "react";
import { useTranslation } from "react-i18next";
import useSound from "use-sound";
import { useSiteStore } from "src/Stores";
import Notify from "src/assets/Notify.ogg";
import SiteComponent from "src/site/SiteComponent";

export default function useSiteComponent(
  siteYellsView: MutableRefObject<HTMLDivElement | null>
) {
  const {
    targetSiteID,
    getSiteView,
    setVisible,
    setEventHandler,
    setEventCloseHandler,
  } = useSiteStore();
  const { t } = useTranslation();
  const [play] = useSound(Notify);

  useEffect(() => {
    const onVisibilityModified = () => {
      if (setVisible()) {
        const siteView = getSiteView(targetSiteID);
        if (siteView) {
          siteView.wasNotify = false;
        }
      }
    };

    document.addEventListener("visibilitychange", onVisibilityModified);

    return () => {
      document.removeEventListener("visibilitychange", onVisibilityModified);
    };
  }, [getSiteView, setVisible, targetSiteID]);

  useEffect(() => {
    setVisible();
    setEventHandler(siteYellsView, t, play);
    setEventCloseHandler(siteYellsView);
  }, [
    play,
    setEventCloseHandler,
    setEventHandler,
    setVisible,
    siteYellsView,
    t,
  ]);

  useEffect(() => {
    SiteComponent.connect();

    return () => {
      SiteComponent.disconnect();
    };
  }, []);
}