From adae0f20620acba41991bdd190e4484a3968c714 Mon Sep 17 00:00:00 2001
From: Ramon Souza <contato@ramonsouza.com>
Date: Fri, 23 Apr 2021 09:29:13 -0300
Subject: [PATCH] keep read state of removed messages

---
 .../ui/components/components-data/chat-context/context.jsx | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx b/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx
index 08449297ad..9378431ee7 100644
--- a/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx
+++ b/bigbluebutton-html5/imports/ui/components/components-data/chat-context/context.jsx
@@ -49,6 +49,8 @@ const generateTimeWindow = (timestamp) => {
 
 export const ChatContext = createContext();
 
+const removedMessagesReadState = {};
+
 const generateStateWithNewMessage = (msg, state, msgType = MESSAGE_TYPES.HISTORY) => {
   
   const timeWindow = generateTimeWindow(msg.timestamp);
@@ -70,7 +72,7 @@ const generateStateWithNewMessage = (msg, state, msgType = MESSAGE_TYPES.HISTORY
         ...restMsg,
         key: messageKey,
         lastTimestamp: msg.timestamp,
-        read: msg.chatId === PUBLIC_CHAT_KEY && msg.timestamp <= getLoginTime() ? true : false,
+        read: msg.chatId === PUBLIC_CHAT_KEY && msg.timestamp <= getLoginTime() ? true : !!removedMessagesReadState[msg.id],
         content: [
           { id: msg.id, text: msg.message, time: msg.timestamp },
         ],
@@ -129,7 +131,7 @@ const generateStateWithNewMessage = (msg, state, msgType = MESSAGE_TYPES.HISTORY
       const message = tempGroupMessage[key];
       message.messageType = msgType;
       const previousMessage = message.timestamp <= getLoginTime();
-      if (!previousMessage && message.sender !== Auth.userID && !message.id.startsWith(SYSTEM_CHAT_TYPE)) {
+      if (!previousMessage && message.sender !== Auth.userID && !message.id.startsWith(SYSTEM_CHAT_TYPE) && !message.read) {
         stateMessages.unreadTimeWindows.add(key);
       }
     });
@@ -329,6 +331,7 @@ const reducer = (state, action) => {
               const timeWindow = messages[timeWindowId];
               if (timeWindow.messageType === MESSAGE_TYPES.STREAM) {
                 chat.unreadTimeWindows.delete(timeWindowId);
+                removedMessagesReadState[newState[chatId][group][timeWindowId].id] = newState[chatId][group][timeWindowId].read;
                 delete newState[chatId][group][timeWindowId];
               }
             });
-- 
GitLab