diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js --- a/lib/shared/thread-utils.js +++ b/lib/shared/thread-utils.js @@ -189,9 +189,26 @@ ): $ReadOnlyArray { const loggedInUserInfo = useLoggedInUserInfo(); const userInfos = useSelector(state => state.userStore.userInfos); + const allThreadInfos = useSelector(state => state.threadStore.threadInfos); + const allThreadInfosArray = React.useMemo( + () => values(allThreadInfos), + [allThreadInfos], + ); + + const communityRootMembersToRole = + useCommunityRootMembersToRole(allThreadInfosArray); return React.useMemo(() => { return threadInfos.filter((threadInfo: ThreadInfo) => { + const membersToRole = communityRootMembersToRole[threadInfo.id]; + const memberHasAdminRole = threadMembersWithoutAddedAdmin( + threadInfo, + ).some(member => roleIsAdminRole(membersToRole[member.id])); + + if (memberHasAdminRole) { + return hasPermission(threadInfo.currentUser.permissions, permission); + } + const permissions = threadFrozenDueToBlock( threadInfo, loggedInUserInfo?.id, @@ -202,7 +219,13 @@ return hasPermission(permissions, permission); }); - }, [loggedInUserInfo?.id, permission, threadInfos, userInfos]); + }, [ + loggedInUserInfo?.id, + permission, + threadInfos, + userInfos, + communityRootMembersToRole, + ]); } function useThreadHasPermission(