From fc91a75acb48c85179c1387d50a05e8377ac390b Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Tue, 4 Jan 2022 13:37:19 +0000 Subject: [PATCH] fix(sidebar): don't keep refetching server members --- src/components/navigation/right/MemberSidebar.tsx | 14 ++++++++++++-- src/context/revoltjs/events.ts | 6 +++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/components/navigation/right/MemberSidebar.tsx b/src/components/navigation/right/MemberSidebar.tsx index 72dc9f3d..41a66144 100644 --- a/src/components/navigation/right/MemberSidebar.tsx +++ b/src/components/navigation/right/MemberSidebar.tsx @@ -179,14 +179,24 @@ export const GroupMemberSidebar = observer( }, ); +// ! FIXME: this is temporary code until we get lazy guilds like subscriptions +const FETCHED: Set = new Set(); + +export function resetMemberSidebarFetched() { + FETCHED.clear(); +} + export const ServerMemberSidebar = observer( ({ channel }: { channel: Channel }) => { const client = useClient(); const status = useContext(StatusContext); useEffect(() => { - if (status === ClientStatus.ONLINE) { - channel.server!.fetchMembers(); + const server_id = channel.server_id!; + if (status === ClientStatus.ONLINE && !FETCHED.has(server_id)) { + channel + .server!.fetchMembers() + .then(() => FETCHED.add(server_id)); } // eslint-disable-next-line }, [status, channel.server_id]); diff --git a/src/context/revoltjs/events.ts b/src/context/revoltjs/events.ts index 4a87dc65..c00fd4a7 100644 --- a/src/context/revoltjs/events.ts +++ b/src/context/revoltjs/events.ts @@ -4,6 +4,7 @@ import { StateUpdater } from "preact/hooks"; import Auth from "../../mobx/stores/Auth"; +import { resetMemberSidebarFetched } from "../../components/navigation/right/MemberSidebar"; import { ClientStatus } from "./RevoltClient"; export let preventReconnect = false; @@ -43,7 +44,10 @@ export function registerEvents( attemptReconnect(); }, - ready: () => setStatus(ClientStatus.ONLINE), + ready: () => { + resetMemberSidebarFetched(); + setStatus(ClientStatus.ONLINE); + }, logout: () => { auth.logout();