From d758ca6985b7c08300519095fe461268a4869e19 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 24 Oct 2017 17:48:43 -0200 Subject: [PATCH] Merge pull request #8635 from RocketChat/hotfix/channel-members-sort [FIX] API channel/group.members not sorting --- packages/rocketchat-api/server/v1/channels.js | 14 ++++++++++---- packages/rocketchat-api/server/v1/groups.js | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/rocketchat-api/server/v1/channels.js b/packages/rocketchat-api/server/v1/channels.js index 5952837facff..d38032849803 100644 --- a/packages/rocketchat-api/server/v1/channels.js +++ b/packages/rocketchat-api/server/v1/channels.js @@ -424,14 +424,20 @@ RocketChat.API.v1.addRoute('channels.members', { authRequired: true }, { const { offset, count } = this.getPaginationItems(); const { sort } = this.parseJsonQuery(); - const members = RocketChat.models.Rooms.processQueryOptionsOnResult(Array.from(findResult.usernames), { - sort: sort ? sort : -1, + let sortFn = (a, b) => a > b; + if (Match.test(sort, Object) && Match.test(sort.username, Number) && sort.username === -1) { + sortFn = (a, b) => b < a; + } + + const members = RocketChat.models.Rooms.processQueryOptionsOnResult(Array.from(findResult.usernames).sort(sortFn), { skip: offset, limit: count }); - const users = RocketChat.models.Users.find({ username: { $in: members } }, - { fields: { _id: 1, username: 1, name: 1, status: 1, utcOffset: 1 } }).fetch(); + const users = RocketChat.models.Users.find({ username: { $in: members } }, { + fields: { _id: 1, username: 1, name: 1, status: 1, utcOffset: 1 }, + sort: sort ? sort : { username: 1 } + }).fetch(); return RocketChat.API.v1.success({ members: users, diff --git a/packages/rocketchat-api/server/v1/groups.js b/packages/rocketchat-api/server/v1/groups.js index 29d5bdb4b7a3..4a98d11e9be6 100644 --- a/packages/rocketchat-api/server/v1/groups.js +++ b/packages/rocketchat-api/server/v1/groups.js @@ -368,14 +368,20 @@ RocketChat.API.v1.addRoute('groups.members', { authRequired: true }, { const { offset, count } = this.getPaginationItems(); const { sort } = this.parseJsonQuery(); - const members = RocketChat.models.Rooms.processQueryOptionsOnResult(Array.from(findResult._room.usernames), { - sort: sort ? sort : -1, + let sortFn = (a, b) => a > b; + if (Match.test(sort, Object) && Match.test(sort.username, Number) && sort.username === -1) { + sortFn = (a, b) => b < a; + } + + const members = RocketChat.models.Rooms.processQueryOptionsOnResult(Array.from(findResult._room.usernames).sort(sortFn), { skip: offset, limit: count }); - const users = RocketChat.models.Users.find({ username: { $in: members } }, - { fields: { _id: 1, username: 1, name: 1, status: 1, utcOffset: 1 } }).fetch(); + const users = RocketChat.models.Users.find({ username: { $in: members } }, { + fields: { _id: 1, username: 1, name: 1, status: 1, utcOffset: 1 }, + sort: sort ? sort : { username: 1 } + }).fetch(); return RocketChat.API.v1.success({ members: users,