Show invites in room list

Also, sort lists on name.
This commit is contained in:
N-Pex 2021-07-19 09:45:34 +02:00
parent d0f929a03c
commit 87a8096694
3 changed files with 57 additions and 43 deletions

View file

@ -15,6 +15,8 @@
"logout": "Logout",
"new_room": "New Room",
"undo": "Undo",
"join": "Join",
"ignore": "Ignore",
"loading": "Loading {appName}"
},
"message": {

View file

@ -62,12 +62,12 @@
<v-checkbox class="mt-0" v-model="sharedComputer" :label="$t('join.shared_computer')" />
<v-btn
:disabled="!isValid || loading"
primary
large
color="black"
depressed
block
@click.stop="handleLogin"
:loading="loading"
class="mt-8"
class="filled-button mt-8"
>{{ $t("login.login") }}</v-btn
>
</v-form>

View file

@ -1,40 +1,5 @@
<template>
<v-list dense class="room-list">
<div v-if="showInvites && $matrix.invites.length > 0" class="h4">
{{ invitesTitle }}
</div>
<v-list-item-group
v-if="showInvites"
v-model="currentRoomId"
color="primary"
>
<v-slide-y-transition group>
<v-list-item
:disabled="roomsProcessing[room.roomId]"
v-for="room in $matrix.invites"
:key="room.roomId"
:value="room.roomId"
>
<v-list-item-avatar size="40" color="#e0e0e0">
<v-img :src="room.avatar" />
</v-list-item-avatar>
<v-list-item-content>
<v-list-item-title>{{
room.name || room.summary.info.title
}}</v-list-item-title>
<v-list-item-subtitle>{{ room.topic }}</v-list-item-subtitle>
</v-list-item-content>
<v-list-item-action>
<v-btn @click.stop="acceptInvitation(room)" icon
><v-icon>check_circle</v-icon></v-btn
>
<v-btn @click.stop="rejectInvitation(room)" icon
><v-icon>cancel</v-icon></v-btn
>
</v-list-item-action>
</v-list-item>
</v-slide-y-transition>
</v-list-item-group>
<div class="h4">{{ title }}</div>
<v-list-item-group v-model="currentRoomId" color="primary">
<v-list-item v-if="showCreate" @click.stop="$emit('newroom')">
@ -45,8 +10,34 @@
</v-list-item-content>
</v-list-item>
<!-- invites -->
<v-list-item
v-for="room in $matrix.joinedRooms"
:disabled="roomsProcessing[room.roomId]"
v-for="room in invitedRooms"
:key="room.roomId"
:value="room.roomId"
>
<v-list-item-avatar size="40" color="#e0e0e0">
<v-img :src="room.avatar" />
</v-list-item-avatar>
<v-list-item-content>
<v-list-item-title>{{
room.name || room.summary.info.title
}}</v-list-item-title>
<v-list-item-subtitle>{{ room.topic }}</v-list-item-subtitle>
</v-list-item-content>
<v-list-item-action>
<v-btn class="filled-button" depressed color="black" @click.stop="acceptInvitation(room)"
>{{$t('menu.join')}}</v-btn
>
<v-btn class="filled-button" color="black" @click.stop="rejectInvitation(room)" text
>{{$t('menu.ignore')}}</v-btn
>
</v-list-item-action>
</v-list-item>
<v-list-item
v-for="room in joinedRooms"
:key="room.roomId"
:value="room.roomId"
style="position: relative"
@ -78,10 +69,6 @@ export default {
type: String,
default: "Rooms",
},
invitesTitle: {
type: String,
default: "Invites",
},
showInvites: {
type: Boolean,
default: false,
@ -98,7 +85,32 @@ export default {
roomsProcessing: {},
}),
computed: {
invitedRooms() {
return this.sortItemsOnName(this.$matrix.invites);
},
joinedRooms() {
return this.sortItemsOnName(this.$matrix.joinedRooms);
},
},
methods: {
sortItemsOnName(items) {
if (items == null) {
return [];
}
return items.sort(function(a, b) {
const titleA = a.name || a.summary.info.title;
const titleB = b.name || b.summary.info.title
if (titleA == null) {
return 1;
} else if (titleB == null) {
return -1;
}
return titleA.localeCompare(titleB);
});
},
notificationCount(room) {
return room.getUnreadNotificationCount("total") || 0;
},