diff --git a/lib/permissions/special-roles.js b/lib/permissions/special-roles.js --- a/lib/permissions/special-roles.js +++ b/lib/permissions/special-roles.js @@ -3,7 +3,11 @@ import _mapValues from 'lodash/fp/mapValues.js'; import type { TRefinement } from 'tcomb'; -import { roleIsAdminRole, roleIsDefaultRole } from '../shared/thread-utils.js'; +import { + roleIsAdminRole, + roleIsDefaultRole, + roleIsInviteeRole, +} from '../shared/thread-utils.js'; import type { RawThreadInfo, RoleInfo, @@ -44,6 +48,11 @@ ...roleSansIsDefault, specialRole: specialRoles.ADMIN_ROLE, }; + } else if (roleIsInviteeRole(role)) { + return { + ...roleSansIsDefault, + specialRole: specialRoles.INVITEE_ROLE, + }; } else { return { ...roleSansIsDefault, 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 @@ -1574,6 +1574,8 @@ roleNamesToSpecialRole[role.name] = specialRoles.DEFAULT_ROLE; } else if (roleIsAdminRole(role)) { roleNamesToSpecialRole[role.name] = specialRoles.ADMIN_ROLE; + } else if (roleIsInviteeRole(role)) { + roleNamesToSpecialRole[role.name] = specialRoles.INVITEE_ROLE; } else { roleNamesToSpecialRole[role.name] = null; } diff --git a/lib/types/minimally-encoded-thread-permissions-types.js b/lib/types/minimally-encoded-thread-permissions-types.js --- a/lib/types/minimally-encoded-thread-permissions-types.js +++ b/lib/types/minimally-encoded-thread-permissions-types.js @@ -24,7 +24,11 @@ } from '../permissions/minimally-encoded-thread-permissions.js'; import type { SpecialRole } from '../permissions/special-roles.js'; import { specialRoles } from '../permissions/special-roles.js'; -import { roleIsAdminRole, roleIsDefaultRole } from '../shared/thread-utils.js'; +import { + roleIsAdminRole, + roleIsDefaultRole, + roleIsInviteeRole, +} from '../shared/thread-utils.js'; import type { ThreadEntity } from '../utils/entity-text.js'; type RoleInfoBase = $ReadOnly<{ @@ -49,6 +53,8 @@ specialRole = specialRoles.DEFAULT_ROLE; } else if (roleIsAdminRole(roleInfo)) { specialRole = specialRoles.ADMIN_ROLE; + } else if (roleIsInviteeRole(roleInfo)) { + specialRole = specialRoles.INVITEE_ROLE; } const { isDefault, ...rest } = roleInfo; return { diff --git a/web/roles/role-actions-menu.react.js b/web/roles/role-actions-menu.react.js --- a/web/roles/role-actions-menu.react.js +++ b/web/roles/role-actions-menu.react.js @@ -8,6 +8,7 @@ import { roleIsAdminRole, roleIsDefaultRole, + roleIsInviteeRole, useRoleUserSurfacedPermissions, } from 'lib/shared/thread-utils.js'; import type { @@ -78,7 +79,7 @@ const menuItems = React.useMemo(() => { const availableOptions = []; - if (!roleIsAdminRole(existingRole)) { + if (!roleIsAdminRole(existingRole) && !roleIsInviteeRole(existingRole)) { availableOptions.push(