From 1828502d5f32bf8e4b47dcad85b3509c85d4efb7 Mon Sep 17 00:00:00 2001 From: Aryan-Verma-999 Date: Thu, 4 Jun 2026 17:10:38 +0530 Subject: [PATCH] fix: resolve private channel race condition by resolving room type before fetching messages --- packages/react/src/hooks/useFetchChatData.js | 24 ++++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/react/src/hooks/useFetchChatData.js b/packages/react/src/hooks/useFetchChatData.js index 34917cc62..57a564a18 100644 --- a/packages/react/src/hooks/useFetchChatData.js +++ b/packages/react/src/hooks/useFetchChatData.js @@ -11,11 +11,10 @@ import { const useFetchChatData = (showRoles) => { const { RCInstance } = useContext(RCContext); - const setMemberRoles = useMemberStore((state) => state.setMemberRoles); - const isChannelPrivate = useChannelStore((state) => state.isChannelPrivate); const setMessages = useMessageStore((state) => state.setMessages); const setMessagesOffset = useMessageStore((state) => state.setMessagesOffset); const setAdmins = useMemberStore((state) => state.setAdmins); + const setMemberRoles = useMemberStore((state) => state.setMemberRoles); const permissionsRef = useRef(null); const setStarredMessages = useStarredMessageStore( (state) => state.setStarredMessages @@ -127,10 +126,26 @@ const useFetchChatData = (showRoles) => { return; } + let channelIsPrivate = false; + if (!anonymousMode) { + const { channelInfo, setChannelInfo, setIsChannelPrivate } = + useChannelStore.getState(); + if (channelInfo?._id) { + channelIsPrivate = channelInfo.t === 'p'; + } else { + const res = await RCInstance.channelInfo(); + if (res?.success) { + setChannelInfo(res.room); + channelIsPrivate = res.room.t === 'p'; + if (channelIsPrivate) setIsChannelPrivate(true); + } + } + } + const { messages, count } = await RCInstance.getMessages( anonymousMode, undefined, - anonymousMode ? false : isChannelPrivate + channelIsPrivate ); if (messages) { @@ -143,7 +158,7 @@ const useFetchChatData = (showRoles) => { } if (showRoles) { - const { roles } = await RCInstance.getChannelRoles(isChannelPrivate); + const { roles } = await RCInstance.getChannelRoles(channelIsPrivate); const fetchedRoles = await RCInstance.getUserRoles(); const fetchedAdmins = fetchedRoles?.result; @@ -167,7 +182,6 @@ const useFetchChatData = (showRoles) => { [ isUserAuthenticated, RCInstance, - isChannelPrivate, showRoles, setMessages, setAdmins,