From 2f0f67f3135028496a7894b81674985e58cb5a8c Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Tue, 4 Jul 2023 20:59:53 -0300 Subject: [PATCH] fix(meteor): `room-opened` event not dispatching when navigating cached rooms (#29718) --- .changeset/hip-hornets-fail.md | 5 +++++ apps/meteor/client/views/room/hooks/useOpenRoom.ts | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/hip-hornets-fail.md diff --git a/.changeset/hip-hornets-fail.md b/.changeset/hip-hornets-fail.md new file mode 100644 index 000000000000..5bd0c0d15199 --- /dev/null +++ b/.changeset/hip-hornets-fail.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fixed `room-opened` event not dispatching when navigating cached rooms diff --git a/apps/meteor/client/views/room/hooks/useOpenRoom.ts b/apps/meteor/client/views/room/hooks/useOpenRoom.ts index 8b9f5fcdf75a..288767ccde53 100644 --- a/apps/meteor/client/views/room/hooks/useOpenRoom.ts +++ b/apps/meteor/client/views/room/hooks/useOpenRoom.ts @@ -1,6 +1,7 @@ import type { IRoom, RoomType } from '@rocket.chat/core-typings'; import { useMethod, useRoute, useSetting, useUser } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; +import { useRef } from 'react'; import { ChatRoom, ChatSubscription } from '../../../../app/models/client'; import { LegacyRoomManager } from '../../../../app/ui-utils/client'; @@ -20,6 +21,8 @@ export function useOpenRoom({ type, reference }: { type: RoomType; reference: st const openRoom = useMethod('openRoom'); const directRoute = useRoute('direct'); + const unsubscribeFromRoomOpenedEvent = useRef<() => void>(() => undefined); + return useQuery( // we need to add uid and username here because `user` is not loaded all at once (see UserProvider -> Meteor.user()) ['rooms', { type, reference }, { uid: user?._id, username: user?.username }] as const, @@ -63,14 +66,15 @@ export function useOpenRoom({ type, reference }: { type: RoomType; reference: st throw new RoomNotFoundError(undefined, { rid: room._id }); } + unsubscribeFromRoomOpenedEvent.current(); + unsubscribeFromRoomOpenedEvent.current = RoomManager.once('opened', () => fireGlobalEvent('room-opened', omit(room, 'usernames'))); + LegacyRoomManager.open({ typeName: type + reference, rid: room._id }); if (room._id === RoomManager.opened) { return { rid: room._id }; } - fireGlobalEvent('room-opened', omit(room, 'usernames')); - // update user's room subscription const sub = ChatSubscription.findOne({ rid: room._id }); if (sub && !sub.open) {