Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 11350 | | Comparar con el anterior | Ultima modificación | Ver Log |

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