From ff205b7675f9a8b3cc5cdf3287fc485ab7da275a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BAlia=20Jaeger=20Foresti?= <60678893+juliajforesti@users.noreply.github.com> Date: Tue, 27 May 2025 12:00:40 -0300 Subject: [PATCH] refactor: remove `reloadRoomAfterLogin` from meteor (#35936) --- .../providers/UserProvider/UserProvider.tsx | 2 + .../UserProvider/hooks/useReloadAfterLogin.ts | 37 +++++++++++++++++++ apps/meteor/client/startup/index.ts | 1 - .../client/startup/reloadRoomAfterLogin.ts | 28 -------------- 4 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts delete mode 100644 apps/meteor/client/startup/reloadRoomAfterLogin.ts diff --git a/apps/meteor/client/providers/UserProvider/UserProvider.tsx b/apps/meteor/client/providers/UserProvider/UserProvider.tsx index f2fa76732f1..d9915572b24 100644 --- a/apps/meteor/client/providers/UserProvider/UserProvider.tsx +++ b/apps/meteor/client/providers/UserProvider/UserProvider.tsx @@ -10,6 +10,7 @@ import { useEffect, useMemo, useRef } from 'react'; import { useClearRemovedRoomsHistory } from './hooks/useClearRemovedRoomsHistory'; import { useDeleteUser } from './hooks/useDeleteUser'; import { useEmailVerificationWarning } from './hooks/useEmailVerificationWarning'; +import { useReloadAfterLogin } from './hooks/useReloadAfterLogin'; import { useUpdateAvatar } from './hooks/useUpdateAvatar'; import { Subscriptions, Rooms } from '../../../app/models/client'; import { getUserPreference } from '../../../app/utils/client'; @@ -64,6 +65,7 @@ const UserProvider = ({ children }: UserProviderProps): ReactElement => { useDeleteUser(); useUpdateAvatar(); useIdleConnection(userId); + useReloadAfterLogin(user); const contextValue = useMemo( (): ContextType => ({ diff --git a/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts b/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts new file mode 100644 index 00000000000..eaf357577bd --- /dev/null +++ b/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts @@ -0,0 +1,37 @@ +import type { IUser } from '@rocket.chat/core-typings'; +import { useRouter } from '@rocket.chat/ui-contexts'; +import { useEffect, useRef } from 'react'; + +import { LegacyRoomManager } from '../../../../app/ui-utils/client'; +import { roomCoordinator } from '../../../lib/rooms/roomCoordinator'; + +export const useReloadAfterLogin = (user: IUser | null) => { + const usernameRef = useRef(); + const router = useRouter(); + + useEffect(() => { + const isNewUser = !usernameRef.current && user?.username; + const usernameChanged = user?.username && usernameRef.current !== user.username; + + if (isNewUser || usernameChanged) { + usernameRef.current = user.username; + + LegacyRoomManager.closeAllRooms(); + + const routeName = router.getRouteName(); + if (!routeName) { + return; + } + + const roomType = roomCoordinator.getRouteNameIdentifier(routeName); + if (roomType) { + router.navigate({ + name: routeName, + params: router.getRouteParameters(), + search: router.getSearchParameters(), + }); + } + } + // Purposely not cleaning up usernameRef - it needs to be persistent when logging out/in + }, [router, user?.username]); +}; diff --git a/apps/meteor/client/startup/index.ts b/apps/meteor/client/startup/index.ts index e013d5855d6..57ea02eef70 100644 --- a/apps/meteor/client/startup/index.ts +++ b/apps/meteor/client/startup/index.ts @@ -10,7 +10,6 @@ import './iframeCommands'; import './incomingMessages'; import './messageObserve'; import './messageTypes'; -import './reloadRoomAfterLogin'; import './roles'; import './routes'; import './slashCommands'; diff --git a/apps/meteor/client/startup/reloadRoomAfterLogin.ts b/apps/meteor/client/startup/reloadRoomAfterLogin.ts deleted file mode 100644 index a2788616d73..00000000000 --- a/apps/meteor/client/startup/reloadRoomAfterLogin.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import { Tracker } from 'meteor/tracker'; - -import { LegacyRoomManager } from '../../app/ui-utils/client'; -import { roomCoordinator } from '../lib/rooms/roomCoordinator'; -import { router } from '../providers/RouterProvider'; - -Meteor.startup(() => { - // Reload rooms after login - let currentUsername: string | undefined = undefined; - Tracker.autorun(() => { - const user = Meteor.user(); - if (currentUsername === undefined && (user ? user.username : undefined)) { - currentUsername = user?.username; - LegacyRoomManager.closeAllRooms(); - // Reload only if the current route is a channel route - const routeName = router.getRouteName(); - if (!routeName) { - return; - } - const roomType = roomCoordinator.getRouteNameIdentifier(routeName); - if (roomType) { - router; // TODO: fix this - // router.navigate(0); - } - } - }); -});