diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 14f85740a..a1ae43fb2 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -1039,11 +1039,22 @@ const RocketChat = { } return this.post('subscriptions.read', { rid: roomId }); }, - getRoomMembers(rid, allUsers, skip = 0, limit = 10) { + getRoomMembers({ rid, allUsers, roomType, type, filter, skip = 0, limit = 10 }) { + const serverVersion = reduxStore.getState().server.version; + if (compareServerVersion(serverVersion, '3.16.0', methods.greaterThanOrEqualTo)) { + const params = { + roomId: rid, + offset: skip, + count: limit, + ...(type !== 'all' && { 'status[]': type }), + ...(filter && { filter }) + }; + // RC 3.16.0 + return this.sdk.get(`${this.roomTypeToApiType(roomType)}.members`, params); + } // RC 0.42.0 return this.methodCallWrapper('getUsersOfRoom', rid, allUsers, { skip, limit }); }, - methodCallWrapper(method, ...params) { const { API_Use_REST_For_DDP_Calls } = reduxStore.getState().settings; if (API_Use_REST_For_DDP_Calls) { diff --git a/app/views/RoomMembersView/index.js b/app/views/RoomMembersView/index.js index f98b27739..c4a5ca7ab 100644 --- a/app/views/RoomMembersView/index.js +++ b/app/views/RoomMembersView/index.js @@ -70,6 +70,7 @@ class RoomMembersView extends React.Component { super(props); this.mounted = false; this.MUTE_INDEX = 0; + this.permissions = {}; const rid = props.route.params?.rid; const room = props.route.params?.room; this.state = { @@ -96,10 +97,14 @@ class RoomMembersView extends React.Component { } async componentDidMount() { + const { room } = this.state; this.mounted = true; this.fetchMembers(); - const { room } = this.state; + if (RocketChat.isGroupChat(room)) { + return; + } + const { muteUserPermission, setLeaderPermission, @@ -427,15 +432,24 @@ class RoomMembersView extends React.Component { }; fetchMembers = async () => { - const { rid, members, isLoading, allUsers, end } = this.state; + const { rid, members, isLoading, allUsers, end, room, filtering } = this.state; + const { t } = room; + let newMembers; if (isLoading || end) { return; } this.setState({ isLoading: true }); try { - const membersResult = await RocketChat.getRoomMembers(rid, allUsers, members.length, PAGE_SIZE); - const newMembers = membersResult.records; + const membersResult = await RocketChat.getRoomMembers({ + rid, + roomType: t, + type: allUsers ? 'all' : 'online', + filter: filtering, + skip: members.length, + limit: PAGE_SIZE + }); + newMembers = membersResult.members; this.setState({ members: members.concat(newMembers || []), isLoading: false,