Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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