Page MenuHomePhabricator

D12657.id41984.diff
No OneTemporary

D12657.id41984.diff

diff --git a/lib/permissions/thread-permissions.js b/lib/permissions/thread-permissions.js
--- a/lib/permissions/thread-permissions.js
+++ b/lib/permissions/thread-permissions.js
@@ -23,8 +23,13 @@
} from '../types/thread-permission-types.js';
import {
type ThreadType,
+ type ThinThreadType,
+ type ThickThreadType,
threadTypes,
threadTypeIsAnnouncementThread,
+ threadTypeIsThick,
+ assertThickThreadType,
+ assertThinThreadType,
} from '../types/thread-types-enum.js';
function permissionLookup(
@@ -188,7 +193,7 @@
function getThreadPermissionBlobFromUserSurfacedPermissions(
communityUserSurfacedPermissions: $ReadOnlyArray<UserSurfacedPermission>,
- threadType: ThreadType,
+ threadType: ThinThreadType,
): ThreadRolePermissionsBlob {
const mappedUserSurfacedPermissions = communityUserSurfacedPermissions
.map(permission => [...configurableCommunityPermissions[permission]])
@@ -230,7 +235,7 @@
];
function getRolePermissionBlobsForCommunityRoot(
- threadType: ThreadType,
+ threadType: ThinThreadType,
): RolePermissionBlobs {
let memberUserSurfacedPermissions;
if (threadType === threadTypes.GENESIS) {
@@ -350,7 +355,17 @@
};
function getRolePermissionBlobs(threadType: ThreadType): RolePermissionBlobs {
- if (threadType === threadTypes.SIDEBAR) {
+ if (threadTypeIsThick(threadType)) {
+ const thickThreadType = assertThickThreadType(threadType);
+ const memberPermissions =
+ getThickThreadRolePermissionsBlob(thickThreadType);
+ return {
+ Members: memberPermissions,
+ };
+ }
+ const thinThreadType = assertThinThreadType(threadType);
+
+ if (thinThreadType === threadTypes.SIDEBAR) {
const memberPermissions = {
[threadPermissions.VOICED]: true,
[threadPermissions.REACT_TO_MESSAGE]: true,
@@ -373,7 +388,7 @@
const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE;
const openChildJoinThread = OPEN_CHILD + threadPermissions.JOIN_THREAD;
- if (threadType === threadTypes.GENESIS_PRIVATE) {
+ if (thinThreadType === threadTypes.GENESIS_PRIVATE) {
const memberPermissions = {
[threadPermissions.KNOW_OF]: true,
[threadPermissions.VISIBLE]: true,
@@ -393,7 +408,7 @@
};
}
- if (threadType === threadTypes.GENESIS_PERSONAL) {
+ if (thinThreadType === threadTypes.GENESIS_PERSONAL) {
return {
Members: {
[threadPermissions.KNOW_OF]: true,
@@ -430,8 +445,8 @@
};
if (
- threadType === threadTypes.COMMUNITY_OPEN_SUBTHREAD ||
- threadType === threadTypes.COMMUNITY_SECRET_SUBTHREAD
+ thinThreadType === threadTypes.COMMUNITY_OPEN_SUBTHREAD ||
+ thinThreadType === threadTypes.COMMUNITY_SECRET_SUBTHREAD
) {
const memberPermissions = {
[threadPermissions.REMOVE_MEMBERS]: true,
@@ -445,21 +460,21 @@
}
if (
- threadType === threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD ||
- threadType === threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD
+ thinThreadType === threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD ||
+ thinThreadType === threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD
) {
return {
Members: subthreadBasePermissions,
};
}
- return getRolePermissionBlobsForCommunityRoot(threadType);
+ return getRolePermissionBlobsForCommunityRoot(thinThreadType);
}
// ESLint doesn't recognize that invariant always throws
// eslint-disable-next-line consistent-return
function getUniversalCommunityRootPermissionsBlob(
- threadType: ThreadType,
+ threadType: ThinThreadType,
): ThreadRolePermissionsBlob {
const openDescendantKnowOf = OPEN_DESCENDANT + threadPermissions.KNOW_OF;
const openDescendantVisible = OPEN_DESCENDANT + threadPermissions.VISIBLE;
@@ -496,6 +511,36 @@
invariant(false, 'invalid threadType parameter');
}
+function getThickThreadRolePermissionsBlob(
+ threadType: ThickThreadType,
+): ThreadRolePermissionsBlob {
+ invariant(threadTypeIsThick(threadType), 'ThreadType should be thick');
+ const basePermissions = {
+ [threadPermissions.KNOW_OF]: true,
+ [threadPermissions.VISIBLE]: true,
+ [threadPermissions.VOICED]: true,
+ [threadPermissions.REACT_TO_MESSAGE]: true,
+ [threadPermissions.EDIT_MESSAGE]: true,
+ [threadPermissions.EDIT_THREAD_NAME]: true,
+ [threadPermissions.EDIT_THREAD_COLOR]: true,
+ [threadPermissions.EDIT_THREAD_DESCRIPTION]: true,
+ [threadPermissions.EDIT_THREAD_AVATAR]: true,
+ [threadPermissions.ADD_MEMBERS]: true,
+ [threadPermissions.LEAVE_THREAD]: true,
+ };
+ if (threadType === threadTypes.THICK_SIDEBAR) {
+ return {
+ ...basePermissions,
+ [threadPermissions.JOIN_THREAD]: true,
+ };
+ }
+ return {
+ ...basePermissions,
+ [threadPermissions.EDIT_ENTRIES]: true,
+ [threadPermissions.CREATE_SIDEBARS]: true,
+ };
+}
+
export {
permissionLookup,
getAllThreadPermissions,
@@ -505,4 +550,5 @@
getThreadPermissionBlobFromUserSurfacedPermissions,
getRolePermissionBlobs,
getUniversalCommunityRootPermissionsBlob,
+ getThickThreadRolePermissionsBlob,
};

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 28, 1:10 AM (21 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2592261
Default Alt Text
D12657.id41984.diff (4 KB)

Event Timeline