diff --git a/lib/selectors/chat-selectors.js b/lib/selectors/chat-selectors.js --- a/lib/selectors/chat-selectors.js +++ b/lib/selectors/chat-selectors.js @@ -26,6 +26,8 @@ threadInChatList, threadIsPending, threadIsTopLevel, + threadIsSidebar, + threadIsInHome, } from '../shared/thread-utils.js'; import { messageTypes } from '../types/message-types-enum.js'; import { @@ -55,6 +57,7 @@ import { threeDays } from '../utils/date-utils.js'; import type { EntityText } from '../utils/entity-text.js'; import memoize2 from '../utils/memoize.js'; +import { entries } from '../utils/objects.js'; import { useSelector } from '../utils/redux-utils.js'; export type SidebarItem = @@ -259,8 +262,25 @@ sidebarInfos: { +[id: string]: $ReadOnlyArray }, filterFunction: (threadInfo: ?(ThreadInfo | RawThreadInfo)) => boolean, ): $ReadOnlyArray { + const threadHomeSubscriptions = Object.fromEntries( + entries(threadInfos).map(([id, threadInfo]) => [ + id, + threadIsInHome(threadInfo), + ]), + ); return _flow( - _filter(filterFunction), + _filter((threadInfo: ?(ThreadInfo | RawThreadInfo)) => { + const parentThreadID = threadInfo?.parentThreadID; + const isThreadInHome = threadIsInHome(threadInfo); + + if (threadIsSidebar(threadInfo) && parentThreadID) { + const isParentInHome = threadHomeSubscriptions[parentThreadID]; + if (isThreadInHome !== undefined && isParentInHome === isThreadInHome) { + return false; + } + } + return filterFunction(threadInfo); + }), _map((threadInfo: ThreadInfo): ChatThreadItem => createChatThreadItem( threadInfo, diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js --- a/lib/shared/thread-utils.js +++ b/lib/shared/thread-utils.js @@ -1427,7 +1427,7 @@ if (!searchText) { return chatListData.filter( item => - threadIsTopLevel(item.threadInfo) && threadFilter(item.threadInfo), + threadInChatList(item.threadInfo) && threadFilter(item.threadInfo), ); }