Skip to content
20 changes: 20 additions & 0 deletions app/lib/rocketchat.js
Original file line number Diff line number Diff line change
Expand Up @@ -1032,7 +1032,27 @@ const RocketChat = {
// RC 0.42.0
return this.methodCallWrapper('getUsersOfRoom', rid, allUsers, { skip, limit });
},
getMembers(rid, roomType, type, debouncedText, start = 0, end = 10) {
Comment thread
gerzonc marked this conversation as resolved.
Outdated
const params = {
roomId: rid,
offset: start,
count: end,
...(type !== 'all' && { 'status[]': type }),
...(debouncedText && { filter: debouncedText })
Comment thread
gerzonc marked this conversation as resolved.
Outdated
};
// RC 3.16.0
if (roomType === 'd') {
return this.sdk.get('im.members', params);
}

if (roomType === 'p') {
return this.sdk.get('groups.members', params);
}

if (roomType === 'c') {
return this.sdk.get('channels.members', params);
}
Comment thread
gerzonc marked this conversation as resolved.
Outdated
},
methodCallWrapper(method, ...params) {
const { API_Use_REST_For_DDP_Calls } = reduxStore.getState().settings;
if (API_Use_REST_For_DDP_Calls) {
Expand Down
17 changes: 14 additions & 3 deletions app/views/RoomMembersView/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { showConfirmationAlert, showErrorAlert } from '../../utils/info';
import SafeAreaView from '../../containers/SafeAreaView';
import { goRoom } from '../../utils/goRoom';
import { CustomIcon } from '../../lib/Icons';
import { compareServerVersion, methods } from '../../lib/utils';

const PAGE_SIZE = 25;

Expand Down Expand Up @@ -56,6 +57,7 @@ class RoomMembersView extends React.Component {
theme: PropTypes.string,
isMasterDetail: PropTypes.bool,
useRealName: PropTypes.bool,
serverVersion: PropTypes.string,
muteUserPermission: PropTypes.array,
setLeaderPermission: PropTypes.array,
setOwnerPermission: PropTypes.array,
Expand Down Expand Up @@ -389,16 +391,24 @@ class RoomMembersView extends React.Component {

fetchMembers = async() => {
const {
rid, members, isLoading, allUsers, end
rid, members, isLoading, allUsers, end, room, filtering
} = this.state;
const { serverVersion } = this.props;
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;
if (compareServerVersion(serverVersion, '3.16.0', methods.greaterThanOrEqualTo)) {
const membersResult = await RocketChat.getMembers(rid, t, allUsers ? 'all' : 'online', filtering, members.length, PAGE_SIZE);
newMembers = membersResult.members;
} else {
const membersResult = await RocketChat.getRoomMembers(rid, allUsers, members.length, PAGE_SIZE);
newMembers = membersResult.records;
}
this.setState({
members: members.concat(newMembers || []),
isLoading: false,
Expand Down Expand Up @@ -579,6 +589,7 @@ const mapStateToProps = state => ({
user: getUserSelector(state),
isMasterDetail: state.app.isMasterDetail,
useRealName: state.settings.UI_Use_Real_Name,
serverVersion: state.server.version,
muteUserPermission: state.permissions[PERMISSION_MUTE_USER],
setLeaderPermission: state.permissions[PERMISSION_SET_LEADER],
setOwnerPermission: state.permissions[PERMISSION_SET_OWNER],
Expand Down