Rev 11350 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable react/prop-types */
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 states
const { unreadMessages, shouldAlertNewMessage } = props
// redux actions
const { setUnreadMessages, setShouldAlertNewMessage } = props
// refs
const unreads = useRef([])
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)