From 06d2189b264793174b7e5ce6f43fa626a26311d1 Mon Sep 17 00:00:00 2001 From: G30 <50341825+silentoplayz@users.noreply.github.com> Date: Fri, 24 Jul 2026 02:45:37 -0400 Subject: [PATCH] fix(chat): keep sidebar chat selection in sync with the active chat (#26977) When navigating from a chat to a non-chat route (e.g. the admin panel), the previously-viewed chat stayed selected in the sidebar and deleting/archiving it wrongly redirected back to the new-chat page. Cloning a chat also left the source chat highlighted alongside the new clone, so two chats appeared selected at once. Two independent sources kept the stale selection: - The chatId store was never cleared when the Chat component unmounted, so $chatId still pointed at the last-viewed chat (this drove the delete/archive redirect). Clear chatId/chatTitle in Chat's onDestroy. - The sidebar's optimistic selectedChatId highlight, set on click, was only cleared on window blur (hence it appeared to fix itself after a tab switch) and never followed programmatic navigation. Bind it to the chatId store so it tracks the active chat for leave, delete and clone. --- src/lib/components/chat/Chat.svelte | 7 +++++++ src/lib/components/layout/Sidebar.svelte | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index e623e5d9bf..4f0cfa9ee3 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -1362,6 +1362,13 @@ pageSubscribe(); showControlsSubscribe(); selectedFolderSubscribe(); + + // Clear the selected chat when leaving the chat surface (e.g. navigating + // to the admin panel), otherwise the previously-viewed chat stays selected + // in the sidebar and deleting/archiving it wrongly navigates away. + chatId.set(''); + chatTitle.set(''); + window.removeEventListener('message', onMessageHandler); $socket?.off('events', chatEventHandler); $socket?.off('connect', handleSocketConnect); diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index e4e004f461..63abd53729 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -90,6 +90,15 @@ let shiftKey = false; let selectedChatId = null; + + // Keep the optimistic sidebar highlight in sync with the active chat. Leaving the + // chat view (e.g. navigating to an admin page) clears chatId, and programmatic + // navigation such as cloning moves chatId to a different chat — in both cases the + // previously-selected item must not stay highlighted. The optimistic on-click + // highlight is preserved because a click sets selectedChatId without changing + // chatId, so this reactive only re-runs once chatId catches up to the same value. + $: selectedChatId = $chatId || null; + let showCreateChannel = false; // Pagination variables