Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
3651 stevensc 1
/* eslint-disable react/prop-types */
1 www 2
import {axios} from "../../utils";
3
import React, { useEffect, useRef } from "react";
4
import { connect } from "react-redux";
5
import {
6
  setHaveNewMessage,
7
  setUnreadMessages,
8
  setShouldAlertNewMessage,
9
} from "../../redux/chat/chat.actions";
10
 
11
const notifyAudio = new Audio("/audio/chat.mp3");
12
 
13
const ChatHelper = (props) => {
3651 stevensc 14
 
1 www 15
  // redux states
16
  const { unreadMessages, shouldAlertNewMessage } = props;
17
  // redux actions
18
  const { setUnreadMessages, setShouldAlertNewMessage } = props;
19
  // refs
20
  const unreads = useRef([]);
21
 
22
  useEffect(() => {
23
    clearInterval(checkChatInterval);
24
    const checkChatInterval = setInterval(() => {
25
      axios.get("/chat/heart-beat").then((response) => {
26
        const resData = response.data;
27
        if (resData.success) {
28
          resData.data.map((entity) => {
29
            handleNewMessage(entity);
30
          });
31
        }
32
      });
33
    }, 1000);
34
    return () => {
35
      clearInterval(checkChatInterval);
36
    };
37
  }, [unreadMessages, setShouldAlertNewMessage]);
38
 
39
  const handleNewMessage = async (entity) => {
40
    const existingUnread = unreads.current.findIndex(
41
      (unread) => unread === entity.id
42
    );
43
    if (entity.not_received_messages) {
44
      const resData = (await axios.post(entity.url_mark_received)).data;
45
      notifyAudio.play();
46
    }
47
    if (entity.not_seen_messages) {
48
      if (existingUnread === -1) {
49
        unreads.current = [...unreads.current, entity.id];
50
      }
51
    } else {
52
      if (existingUnread !== -1) {
53
        unreads.current = unreads.current.filter(
54
          (unread) => unread !== entity.id
55
        );
56
      }
57
    }
58
    // redux new message
59
    if (JSON.stringify(unreadMessages) !== JSON.stringify(unreads.current)) {
60
      setUnreadMessages(unreads.current);
61
    }
62
  };
63
 
64
  return <div></div>;
65
};
66
 
67
const mapStateToProps = (state) => ({
68
  unreadMessages: state.chat.unreadMessages,
69
  shouldAlertNewMessage: state.chat.shouldAlertNewMessage,
70
});
71
 
72
const mapDispatchToProps = {
73
  setHaveNewMessage: (haveNewMessage) => setHaveNewMessage(haveNewMessage),
74
  setUnreadMessages: (unreadMessages) => setUnreadMessages(unreadMessages),
75
  setShouldAlertNewMessage: (shouldAlertNewMessage) =>
76
    setShouldAlertNewMessage(shouldAlertNewMessage),
77
};
78
 
79
export default connect(mapStateToProps, mapDispatchToProps)(ChatHelper);