diff --git a/.changeset/fix-reconnect-loop.md b/.changeset/fix-reconnect-loop.md new file mode 100644 index 0000000000000..cae0e895803ee --- /dev/null +++ b/.changeset/fix-reconnect-loop.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/meteor": patch +--- + +fix: Automatically reload client if permanently stuck in reconnect loop (#41405) diff --git a/apps/meteor/client/providers/ServerProvider.tsx b/apps/meteor/client/providers/ServerProvider.tsx index 7306bc831463c..a34b7f28b51b1 100644 --- a/apps/meteor/client/providers/ServerProvider.tsx +++ b/apps/meteor/client/providers/ServerProvider.tsx @@ -13,7 +13,7 @@ import type { UploadResult, ServerContextValue } from '@rocket.chat/ui-contexts' import { ServerContext } from '@rocket.chat/ui-contexts'; import { Meteor } from 'meteor/meteor'; import { compile } from 'path-to-regexp'; -import { useMemo, useSyncExternalStore, type ReactNode } from 'react'; +import { useMemo, useSyncExternalStore, useEffect, type ReactNode } from 'react'; import { sdk } from '../../app/utils/client/lib/SDKClient'; import { Info as info } from '../../app/utils/rocketchat.info'; @@ -179,6 +179,12 @@ export type ServerProviderProps = { children?: ReactNode }; const ServerProvider = ({ children }: ServerProviderProps) => { const { connected, status, retryCount, retryTime } = useSyncExternalStore(subscribeStatus, getStatusSnapshot); + useEffect(() => { + if (retryCount && retryCount >= 30 && navigator.onLine) { + window.location.reload(); + } + }, [retryCount]); + const value = useMemo( (): ServerContextValue => ({ connected,