parent
b037dbea6d
commit
bcde25336f
2 changed files with 112 additions and 0 deletions
98
src/components/DeviceList.vue
Normal file
98
src/components/DeviceList.vue
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
<template>
|
||||||
|
<v-list dense @click.native.stop="nullEvent">
|
||||||
|
<v-subheader>DEVICES</v-subheader>
|
||||||
|
<v-list-item-group color="primary">
|
||||||
|
<v-list-item
|
||||||
|
v-for="device in devices"
|
||||||
|
:key="device.deviceId"
|
||||||
|
:value="device.deviceId"
|
||||||
|
>
|
||||||
|
<template v-slot:default="{ active }">
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title>{{ displayName(device) }}</v-list-item-title>
|
||||||
|
<v-list-item-subtitle>{{
|
||||||
|
verificationStatus(device)
|
||||||
|
}}</v-list-item-subtitle>
|
||||||
|
</v-list-item-content>
|
||||||
|
<v-list-item-action v-if="active">
|
||||||
|
<v-btn icon>
|
||||||
|
<v-icon
|
||||||
|
:color="
|
||||||
|
device.isBlocked()
|
||||||
|
? 'red'
|
||||||
|
: device.isVerified()
|
||||||
|
? 'green'
|
||||||
|
: 'grey lighten-1'
|
||||||
|
"
|
||||||
|
>verified_user</v-icon
|
||||||
|
>
|
||||||
|
</v-btn>
|
||||||
|
</v-list-item-action>
|
||||||
|
</template>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list-item-group>
|
||||||
|
</v-list>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "DeviceList",
|
||||||
|
props: {
|
||||||
|
member: {
|
||||||
|
type: Object,
|
||||||
|
default: function () {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
devices: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
member: {
|
||||||
|
immediate: true,
|
||||||
|
handler(member, ignoredOldVal) {
|
||||||
|
this.updateDevices();
|
||||||
|
if (member) {
|
||||||
|
this.$matrix.matrixClient.downloadKeys([member.userId]).then(() => {
|
||||||
|
this.updateDevices();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
updateDevices() {
|
||||||
|
if (!this.member) {
|
||||||
|
this.devices = [];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.devices = this.$matrix.matrixClient.getStoredDevicesForUser(
|
||||||
|
this.member.userId
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
displayName(device) {
|
||||||
|
var name = device.deviceId;
|
||||||
|
if (device.getDisplayName()) {
|
||||||
|
name += " - " + device.getDisplayName();
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
},
|
||||||
|
|
||||||
|
verificationStatus(device) {
|
||||||
|
if (device.isBlocked()) {
|
||||||
|
return "Blocked";
|
||||||
|
} else if (device.isVerified()) {
|
||||||
|
return "Verified";
|
||||||
|
} else {
|
||||||
|
return "Not verified";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
nullEvent() {},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
@ -59,6 +59,7 @@
|
||||||
v-for="(member, index) in joinedMembers"
|
v-for="(member, index) in joinedMembers"
|
||||||
:key="member.userId"
|
:key="member.userId"
|
||||||
v-show="showAllMembers || index < 5"
|
v-show="showAllMembers || index < 5"
|
||||||
|
@click="toggleMemberExpanded(member)"
|
||||||
>
|
>
|
||||||
<v-avatar class="avatar" size="32" color="grey">
|
<v-avatar class="avatar" size="32" color="grey">
|
||||||
<img v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
<img v-if="memberAvatar(member)" :src="memberAvatar(member)" />
|
||||||
|
|
@ -68,6 +69,7 @@
|
||||||
</v-avatar>
|
</v-avatar>
|
||||||
{{ member.user ? member.user.displayName : member.name
|
{{ member.user ? member.user.displayName : member.name
|
||||||
}}{{ member.userId == $matrix.currentUserId ? " (you)" : "" }}
|
}}{{ member.userId == $matrix.currentUserId ? " (you)" : "" }}
|
||||||
|
<DeviceList v-if="expandedMembers.includes(member)" :member="member" />
|
||||||
</div>
|
</div>
|
||||||
<div class="show-all" @click="showAllMembers = !showAllMembers">
|
<div class="show-all" @click="showAllMembers = !showAllMembers">
|
||||||
{{ showAllMembers ? "Hide" : "Show all" }}
|
{{ showAllMembers ? "Hide" : "Show all" }}
|
||||||
|
|
@ -118,12 +120,14 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import LeaveRoomDialog from "../components/LeaveRoomDialog";
|
import LeaveRoomDialog from "../components/LeaveRoomDialog";
|
||||||
|
import DeviceList from "../components/DeviceList";
|
||||||
import QRCode from "qrcode";
|
import QRCode from "qrcode";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "RoomInfo",
|
name: "RoomInfo",
|
||||||
components: {
|
components: {
|
||||||
LeaveRoomDialog,
|
LeaveRoomDialog,
|
||||||
|
DeviceList
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -132,6 +136,7 @@ export default {
|
||||||
displayName: "",
|
displayName: "",
|
||||||
showAllMembers: false,
|
showAllMembers: false,
|
||||||
showLeaveConfirmation: false,
|
showLeaveConfirmation: false,
|
||||||
|
expandedMembers: [],
|
||||||
buildVersion: "",
|
buildVersion: "",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
@ -309,6 +314,15 @@ export default {
|
||||||
}, function (e) {
|
}, function (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleMemberExpanded(member) {
|
||||||
|
const index = this.expandedMembers.indexOf(member);
|
||||||
|
if (index > -1) {
|
||||||
|
this.expandedMembers.splice(index, 1);
|
||||||
|
} else {
|
||||||
|
this.expandedMembers.push(member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue