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 @@ -2,6 +2,8 @@ import invariant from 'invariant'; import _find from 'lodash/fp/find.js'; +import _mapValues from 'lodash/fp/mapValues.js'; +import _omitBy from 'lodash/fp/omitBy.js'; import * as React from 'react'; import { generatePendingThreadColor } from './color-utils.js'; @@ -710,6 +712,15 @@ const filterDetailedThreadEditPermissions = options?.filterDetailedThreadEditPermissions; + const filterThreadPermissions = _omitBy( + (v, k) => + filterDetailedThreadEditPermissions && + [ + threadPermissions.EDIT_THREAD_COLOR, + threadPermissions.EDIT_THREAD_DESCRIPTION, + ].includes(k), + ); + const members = []; let currentUser; for (const serverMember of serverThreadInfo.members) { @@ -728,10 +739,9 @@ ) { continue; } - const memberPermissions = filterThreadEditDetailedPermissions( - serverMember.permissions, - filterDetailedThreadEditPermissions, - ); + + const memberPermissions = filterThreadPermissions(serverMember.permissions); + members.push({ id: serverMember.id, role: serverMember.role, @@ -752,9 +762,8 @@ if (currentUser) { currentUserPermissions = currentUser.permissions; } else { - currentUserPermissions = filterThreadEditDetailedPermissions( + currentUserPermissions = filterThreadPermissions( getAllThreadPermissions(null, serverThreadInfo.id), - filterDetailedThreadEditPermissions, ); currentUser = { role: null, @@ -779,6 +788,11 @@ type = shimThreadTypes[type]; } + const rolesWithFilteredThreadPermissions = _mapValues(role => ({ + ...role, + permissions: filterThreadPermissions(role.permissions), + }))(serverThreadInfo.roles); + let rawThreadInfo: any = { id: serverThreadInfo.id, type, @@ -788,7 +802,7 @@ creationTime: serverThreadInfo.creationTime, parentThreadID: serverThreadInfo.parentThreadID, members, - roles: serverThreadInfo.roles, + roles: rolesWithFilteredThreadPermissions, currentUser, repliesCount: serverThreadInfo.repliesCount, }; @@ -815,18 +829,6 @@ return rawThreadInfo; } -function filterThreadEditDetailedPermissions( - permissions: ThreadPermissionsInfo, - shouldFilter: ?boolean, -): ThreadPermissionsInfo { - if (!shouldFilter) { - return permissions; - } - const { edit_thread_color, edit_thread_description, ...newPermissions } = - permissions; - return newPermissions; -} - function threadUIName(threadInfo: ThreadInfo): string | ThreadEntity { if (threadInfo.name) { return firstLine(threadInfo.name); @@ -1571,7 +1573,6 @@ threadFrozenDueToBlock, threadFrozenDueToViewerBlock, rawThreadInfoFromServerThreadInfo, - filterThreadEditDetailedPermissions, threadUIName, threadInfoFromRawThreadInfo, threadTypeDescriptions,