added filter to prevent display same message multiple times, fixed ui

This commit is contained in:
slawk0
2024-10-19 12:17:23 +02:00
parent dff81dc1ef
commit ba4c07ea30
2 changed files with 16 additions and 10 deletions

View File

@@ -14,7 +14,13 @@ function MessagesArea() {
useEffect(() => {
const messageHandler = (msg: ChatMessages) => {
setMessages((prevMessages) => [...prevMessages, msg]);
setMessages((prevMessages) => {
// Check if the message already exists in the state
if (!prevMessages.some((m) => m.message_id === msg.message_id)) {
return [...prevMessages, msg];
}
return prevMessages;
});
};
socket.on("chat message", (msg: ChatMessages) => {
@@ -23,16 +29,18 @@ function MessagesArea() {
});
socket.on("historical", (msg: ChatMessages[]) => {
console.log("Received historical messages: ", msg);
msg.forEach((historicalMsg) => {
messageHandler(historicalMsg);
});
});
return () => {
socket.off("chat message");
socket.off("historical");
};
}, []);
const messageList = messages.map((msg, index) => (
<li key={index}>
const messageList = messages.map((msg) => (
<li key={msg.message_id}>
{msg.message_id} {msg.sender}: {msg.message}
</li>
));

View File

@@ -32,19 +32,17 @@ function Chat() {
</div>
{/*Chat area */}
<div className="text-white bg-[#121212] flex flex-col h-screen w-full">
<div className="flex">
<div className="flex-shrink-0">
<ContactProfile contact={contact} />
</div>
<hr />
<div className="m-2 overflow-x-hidden overflow-y-scroll">
<hr className="flex-shrink-0" />
<div className="flex-grow overflow-x-hidden overflow-y-auto m-2">
<MessagesArea />
</div>
<div className="mb-2 bottom-0 flex">
<div className="flex-shrink-0 mb-2">
{contact && contact.length >= 4 ? (
<MessageForm contact={contact} />
) : (
<></>
)}
) : null}
</div>
</div>
</div>