diff --git a/web/app.react.js b/web/app.react.js
--- a/web/app.react.js
+++ b/web/app.react.js
@@ -48,6 +48,7 @@
import Chat from './chat/chat.react.js';
import { EditModalProvider } from './chat/edit-message-provider.js';
import { MemberListSidebarProvider } from './chat/member-list-sidebar/member-list-sidebar-provider.react.js';
+import CommunitiesRefresher from './components/communities-refresher.react.js';
import { DBOpsHandler } from './components/db-ops-handler.react.js';
import LogOutIfMissingCSATHandler from './components/log-out-if-missing-csat-handler.react.js';
import NavigationArrows from './components/navigation-arrows.react.js';
@@ -234,6 +235,7 @@
+
diff --git a/web/components/communities-refresher.react.js b/web/components/communities-refresher.react.js
new file mode 100644
--- /dev/null
+++ b/web/components/communities-refresher.react.js
@@ -0,0 +1,33 @@
+// @flow
+
+import * as React from 'react';
+
+import {
+ fetchCommunityInfosActionTypes,
+ useFetchCommunityInfos,
+} from 'lib/actions/community-actions.js';
+import { isLoggedIn } from 'lib/selectors/user-selectors.js';
+import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js';
+
+import { useSelector } from '../redux/redux-utils.js';
+
+function CommunitiesRefresher(): React.Node {
+ const isActive = useSelector(state => state.windowActive);
+ const loggedIn = useSelector(isLoggedIn);
+ const callFetchCommunityInfos = useFetchCommunityInfos();
+ const dispatchActionPromise = useDispatchActionPromise();
+
+ React.useEffect(() => {
+ if (!isActive || !loggedIn) {
+ return;
+ }
+ void dispatchActionPromise(
+ fetchCommunityInfosActionTypes,
+ callFetchCommunityInfos(),
+ );
+ }, [callFetchCommunityInfos, dispatchActionPromise, isActive, loggedIn]);
+
+ return null;
+}
+
+export default CommunitiesRefresher;