Rev 3651 | 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 statesconst { unreadMessages, shouldAlertNewMessage } = props// redux actionsconst { setUnreadMessages, setShouldAlertNewMessage } = props// refsconst unreads = useRef([])useEffect(() => {clearInterval(checkChatInterval)const checkChatInterval = setInterval(() => {axios.get('/chat/heart-beat').then((response) => {const resData = response.dataif (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)).datanotifyAudio.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 messageif (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)