Page MenuHomePhabricator

D13886.id45689.diff
No OneTemporary

D13886.id45689.diff

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
@@ -175,29 +175,36 @@
return communityRootMembersToRole;
}
+// This function returns true for all thick threads, as well as all channels
+// inside GENESIS. Channels inside GENESIS were used in place of thick threads
+// before thick threads were launched, and as such we mirror "freezing" behavior
+// between them and thick threads. "Freezing" a thread can occur when a user
+// blocks another user, and those two users are the only members of a given
+// chat. Note that we exclude the GENESIS community root here, as the root
+// itself has never been used in place of thick threads. Also note that
+// grandchild channels of GENESIS get this behavior too, even though we don't
+// currently support channels inside thick threads.
+function threadIsThickOrChannelInsideGenesis(threadInfo: ThreadInfo): boolean {
+ if (threadTypeIsThick(threadInfo.type)) {
+ return true;
+ }
+ if (getCommunity(threadInfo) !== genesis().id) {
+ return false;
+ }
+ return threadInfo.id !== genesis().id;
+}
+
function useThreadsWithPermission(
threadInfos: $ReadOnlyArray<ThreadInfo>,
permission: ThreadPermission,
): $ReadOnlyArray<ThreadInfo> {
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 || !loggedInUserInfo) {
+ const isGroupChat = threadIsThickOrChannelInsideGenesis(threadInfo);
+ if (!isGroupChat || !loggedInUserInfo) {
return hasPermission(threadInfo.currentUser.permissions, permission);
}
@@ -214,13 +221,7 @@
return hasPermission(permissions, permission);
});
- }, [
- threadInfos,
- communityRootMembersToRole,
- loggedInUserInfo,
- userInfos,
- permission,
- ]);
+ }, [threadInfos, loggedInUserInfo, userInfos, permission]);
}
function useThreadHasPermission(

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 22, 8:56 AM (17 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2559944
Default Alt Text
D13886.id45689.diff (2 KB)

Event Timeline