Fix user-list sorting on phone users case

This commit is contained in:
Oswaldo Acauan 2016-06-07 13:46:24 -03:00
parent 23a5045cec
commit 9803f55fda

View File

@ -9,7 +9,10 @@ const EMOJI_STATUSES = ['raiseHand', 'happy', 'smile', 'neutral', 'sad', 'confus
const mapUser = (user) => ({ const mapUser = (user) => ({
id: user.userid, id: user.userid,
name: user.name, name: user.name,
emojiStatus: user.emoji_status, emoji: {
status: user.emoji_status,
changedAt: user.set_emoji_time,
},
isPresenter: user.presenter, isPresenter: user.presenter,
isModerator: user.role === ROLE_MODERATOR, isModerator: user.role === ROLE_MODERATOR,
isCurrent: user.userid === ath.getUser(), isCurrent: user.userid === ath.getUser(),
@ -20,11 +23,6 @@ const mapUser = (user) => ({
isPhoneUser: user.phone_user, isPhoneUser: user.phone_user,
}); });
/*
* Algorithm borrowed from the flash client
* Sort users based on their current status (emoji, roles, phone, name, id)
*/
const sortUsersByName = (a, b) => { const sortUsersByName = (a, b) => {
if (a.name.toLowerCase() < b.name.toLowerCase()) { if (a.name.toLowerCase() < b.name.toLowerCase()) {
return -1; return -1;
@ -40,12 +38,18 @@ const sortUsersByName = (a, b) => {
}; };
const sortUsersByEmoji = (a, b) => { const sortUsersByEmoji = (a, b) => {
if ((EMOJI_STATUSES.indexOf(a.emojiStatus) > -1) if ((EMOJI_STATUSES.indexOf(a.emoji.status) > -1)
&& (EMOJI_STATUSES.indexOf(b.emojiStatus) > -1)) { && (EMOJI_STATUSES.indexOf(b.emoji.status) > -1)) {
return sortUsersByName(a, b); if (a.emoji.changedAt < b.emoji.changedAt) {
} else if (EMOJI_STATUSES.indexOf(a.emojiStatus) > -1) {
return -1; return -1;
} else if (EMOJI_STATUSES.indexOf(b.emojiStatus) > -1) { } else if (a.emoji.changedAt > b.emoji.changedAt) {
return 1;
}
return sortUsersByName(a, b);
} else if (EMOJI_STATUSES.indexOf(a.emoji.status) > -1) {
return -1;
} else if (EMOJI_STATUSES.indexOf(b.emoji.status) > -1) {
return 1; return 1;
} }
@ -65,11 +69,11 @@ const sortUsersByModerator = (a, b) => {
}; };
const sortUsersByPhoneUser = (a, b) => { const sortUsersByPhoneUser = (a, b) => {
if (a.isPhoneUser && b.isPhoneUser) { if (!a.isPhoneUser && !b.isPhoneUser) {
return sortUsersByName(a, b); return sortUsersByName(a, b);
} else if (a.isPhoneUser) { } else if (!a.isPhoneUser) {
return -1; return -1;
} else if (b.isPhoneUser) { } else if (!b.isPhoneUser) {
return 1; return 1;
} }