Rev 1 | Ir a la última revisión | 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.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 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);