From d4f6aa18959bc48010ad8736b9f1653a76b579a5 Mon Sep 17 00:00:00 2001
From: Aleksander Nicacio da Silva <aleksander.silva@rocket.chat>
Date: Mon, 17 Feb 2025 18:36:19 -0300
Subject: [PATCH] fix: Livechat conversation not closing due to cross-tab
 interference (#35168)

---
 .changeset/rude-llamas-pay.md                  | 5 +++++
 packages/livechat/src/lib/room.js              | 7 +------
 packages/livechat/src/routes/Chat/container.js | 5 ++---
 3 files changed, 8 insertions(+), 9 deletions(-)
 create mode 100644 .changeset/rude-llamas-pay.md

diff --git a/.changeset/rude-llamas-pay.md b/.changeset/rude-llamas-pay.md
new file mode 100644
index 00000000000..c58da7f2204
--- /dev/null
+++ b/.changeset/rude-llamas-pay.md
@@ -0,0 +1,5 @@
+---
+"@rocket.chat/livechat": patch
+---
+
+Fixes Livechat conversation not closing in a few scenarios due to cross-tab interference
diff --git a/packages/livechat/src/lib/room.js b/packages/livechat/src/lib/room.js
index f7e7e97df5f..ba272169278 100644
--- a/packages/livechat/src/lib/room.js
+++ b/packages/livechat/src/lib/room.js
@@ -24,12 +24,7 @@ export const closeChat = async ({ transcriptRequested } = {}) => {
 		await handleTranscript();
 	}
 
-	const { room, department, config: { settings: { clearLocalStorageWhenChatEnded } = {} } = {} } = store.state;
-
-	if (!room) {
-		console.warn('closeChat called without a room');
-		return;
-	}
+	const { department, config: { settings: { clearLocalStorageWhenChatEnded } = {} } = {} } = store.state;
 
 	await store.setState({ room: null, renderedTriggers: [] });
 
diff --git a/packages/livechat/src/routes/Chat/container.js b/packages/livechat/src/routes/Chat/container.js
index e38a53a7db6..fddda874980 100644
--- a/packages/livechat/src/routes/Chat/container.js
+++ b/packages/livechat/src/routes/Chat/container.js
@@ -2,6 +2,7 @@ import { Component } from 'preact';
 import { route } from 'preact-router';
 import { withTranslation } from 'react-i18next';
 
+import Chat from './component';
 import { Livechat } from '../../api';
 import { ModalManager } from '../../components/Modal';
 import { getAvatarUrl } from '../../helpers/baseUrl';
@@ -22,9 +23,8 @@ import constants from '../../lib/constants';
 import { getLastReadMessage, loadConfig, processUnread, shouldMarkAsUnread } from '../../lib/main';
 import { parentCall, runCallbackEventEmitter } from '../../lib/parentCall';
 import { createToken } from '../../lib/random';
-import { initRoom, closeChat, loadMessages, loadMoreMessages, defaultRoomParams, getGreetingMessages } from '../../lib/room';
+import { initRoom, loadMessages, loadMoreMessages, defaultRoomParams, getGreetingMessages } from '../../lib/room';
 import store from '../../store';
-import Chat from './component';
 
 const ChatWrapper = ({ children, rid }) => {
 	useRoomMessagesSubscription(rid);
@@ -254,7 +254,6 @@ class ChatContainer extends Component {
 			await dispatch({ alerts: (alerts.push(alert), alerts) });
 		} finally {
 			await dispatch({ loading: false });
-			await closeChat();
 		}
 	};
 
-- 
GitLab