From b6dfe2298e68aebf71ce265dceb494ed983365a3 Mon Sep 17 00:00:00 2001 From: N Pex Date: Mon, 23 Jan 2023 12:09:15 +0000 Subject: [PATCH] Sort member list in room info --- src/components/RoomInfo.vue | 63 +++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/components/RoomInfo.vue b/src/components/RoomInfo.vue index 93e9557..1461443 100644 --- a/src/components/RoomInfo.vue +++ b/src/components/RoomInfo.vue @@ -168,12 +168,12 @@ {{ $t("room_info.members") }} -
{{ memberCount }}
{{ members.length }}
-
+
{{ showAllMembers ? $t("room_info.hide_all") : $t("room_info.show_all") }} @@ -294,7 +294,7 @@ export default { }, data() { return { - memberCount: null, + members: [], user: null, displayName: "", showAllMembers: false, @@ -323,7 +323,7 @@ export default { }, mounted() { this.$matrix.on("Room.timeline", this.onEvent); - this.updateMemberCount(); + this.updateMembers(); this.user = this.$matrix.matrixClient.getUser(this.$matrix.currentUserId); this.displayName = this.user.displayName; @@ -362,30 +362,13 @@ export default { } return ""; }, - - joinedMembers() { - if (!this.room) { - return []; - } - const myUserId = this.$matrix.currentUserId; - return this.room.getJoinedMembers().sort((a, b) => { - if (a.userId == myUserId) { - return -1; - } else if (b.userId == myUserId) { - return 1; - } - const aName = a.user ? a.user.displayName : a.name; - const bName = b.user ? b.user.displayName : b.name; - return aName.localeCompare(bName); - }); - }, }, watch: { room: { handler(ignoredNewVal, ignoredOldVal) { console.log("RoomInfo: Current room changed"); - this.updateMemberCount(); + this.updateMembers(); this.updateQRCode(); }, }, @@ -393,19 +376,39 @@ export default { methods: { onEvent(event) { - if (event.getRoomId() !== this.roomId) { - return; // Not for this room + if (this.room && this.room.roomId == event.getRoomId()) { + // For this room + if (event.getType() == "m.room.member") { + this.updateMembers(); } - if (event.getType() == "m.room.member") { - this.updateMemberCount(); } }, - updateMemberCount() { + updateMembers() { if (this.room) { - this.memberCount = this.room.getJoinedMemberCount(); + const myUserId = this.$matrix.currentUserId; + this.members = this.room.getJoinedMembers().sort((a, b) => { + // Place ourselves at the top! + if (a.userId == myUserId) { + return -1; + } else if (b.userId == myUserId) { + return 1; + } + + // Then sort by power level + if (a.powerLevel > b.powerLevel) { + return -1; + } else if (b.powerLevel > a.powerLevel) { + return 1; + } + + // Then by name + const aName = a.user ? a.user.displayName : a.name; + const bName = b.user ? b.user.displayName : b.name; + return aName.localeCompare(bName); + }); } else { - this.memberCount = null; + this.members = []; } },