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 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);