diff --git a/apps/meteor/client/views/room/providers/RoomProvider.tsx b/apps/meteor/client/views/room/providers/RoomProvider.tsx index d4fb329c54885..125de7e0b7ffe 100644 --- a/apps/meteor/client/views/room/providers/RoomProvider.tsx +++ b/apps/meteor/client/views/room/providers/RoomProvider.tsx @@ -1,6 +1,6 @@ import type { IRoom } from '@rocket.chat/core-typings'; import type { ReactNode, ContextType, ReactElement } from 'react'; -import { useMemo, memo, useEffect } from 'react'; +import { useRef, useMemo, memo, useEffect } from 'react'; import ComposerPopupProvider from './ComposerPopupProvider'; import RoomToolboxProvider from './RoomToolboxProvider'; @@ -27,9 +27,10 @@ type RoomProviderProps = { const RoomProvider = ({ rid, children }: RoomProviderProps): ReactElement => { const room = Rooms.use((state) => state.get(rid)); - const subscritionFromLocal = Subscriptions.use((state) => state.find((record) => record.rid === rid)); + const loadedRoomId = useRef(null); + useRedirectOnSettingsChanged(subscritionFromLocal); useUsersNameChanged(); @@ -68,6 +69,12 @@ const RoomProvider = ({ rid, children }: RoomProviderProps): ReactElement => { const { mutate: fireRoomOpenedEvent } = useFireGlobalEvent('room-opened', rid); + useEffect(() => { + if (pseudoRoom) { + loadedRoomId.current = rid; + } + }, [pseudoRoom, rid]); + useEffect(() => { if (room) { fireRoomOpenedEvent(omit(room, 'usernames')); @@ -92,7 +99,11 @@ const RoomProvider = ({ rid, children }: RoomProviderProps): ReactElement => { }, [rid, subscribed]); if (!pseudoRoom) { - return !room ? : ; + if (loadedRoomId.current !== rid) { + return ; + } + + return ; } return (