Proyectos de Subversion LeadersLinked - Backend

Rev

Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import {axios} from "../../utils";
import React, { useEffect, useRef } from "react";
import { connect } from "react-redux";
import {
  setHaveNewMessage,
  setUnreadMessages,
  setShouldAlertNewMessage,
} from "../../redux/chat/chat.actions";

const notifyAudio = new Audio("/audio/chat.mp3");

const ChatHelper = (props) => {
  // redux destructuring
  // redux states
  const { unreadMessages, shouldAlertNewMessage } = props;
  // redux actions
  const { setUnreadMessages, setShouldAlertNewMessage } = props;
  // refs
  const unreads = useRef([]);
  const shouldNotify = useRef(false);

  useEffect(() => {
    clearInterval(checkChatInterval);
    const checkChatInterval = setInterval(() => {
      axios.get("/chat/heart-beat").then((response) => {
        const resData = response.data;
        if (resData.success) {
          resData.data.map((entity) => {
            handleNewMessage(entity);
          });
        }
      });
    }, 1000);
    return () => {
      clearInterval(checkChatInterval);
    };
  }, [unreadMessages, setShouldAlertNewMessage]);

  const handleNewMessage = async (entity) => {
    const existingUnread = unreads.current.findIndex(
      (unread) => unread === entity.id
    );
    if (entity.not_received_messages) {
      const resData = (await axios.post(entity.url_mark_received)).data;
      notifyAudio.play();
    }
    if (entity.not_seen_messages) {
      if (existingUnread === -1) {
        unreads.current = [...unreads.current, entity.id];
      }
    } else {
      if (existingUnread !== -1) {
        unreads.current = unreads.current.filter(
          (unread) => unread !== entity.id
        );
      }
    }
    // redux new message
    if (JSON.stringify(unreadMessages) !== JSON.stringify(unreads.current)) {
      setUnreadMessages(unreads.current);
    }
  };

  return <div></div>;
};

const mapStateToProps = (state) => ({
  unreadMessages: state.chat.unreadMessages,
  shouldAlertNewMessage: state.chat.shouldAlertNewMessage,
});

const mapDispatchToProps = {
  setHaveNewMessage: (haveNewMessage) => setHaveNewMessage(haveNewMessage),
  setUnreadMessages: (unreadMessages) => setUnreadMessages(unreadMessages),
  setShouldAlertNewMessage: (shouldAlertNewMessage) =>
    setShouldAlertNewMessage(shouldAlertNewMessage),
};

export default connect(mapStateToProps, mapDispatchToProps)(ChatHelper);