keanu-weblite/src/components/roomTypeMixin.js
2023-08-07 14:13:35 +00:00

65 lines
1.9 KiB
JavaScript

import { ROOM_TYPE_VOICE_MODE, ROOM_TYPE_FILE_MODE, ROOM_TYPE_DEFAULT, STATE_EVENT_ROOM_TYPE } from "../plugins/utils";
export default {
data() {
return {
roomDisplayType: ROOM_TYPE_DEFAULT,
};
},
mounted() {
this.$matrix.on("Room.timeline", this.onRoomTypeMixinEvent);
},
destroyed() {
this.$matrix.off("Room.timeline", this.onRoomTypeMixinEvent);
},
watch: {
room: {
immediate: true,
handler(newVal) {
if (newVal) {
this.onRoomTypeMixinTypeEvent(newVal.currentState.getStateEvents(STATE_EVENT_ROOM_TYPE, "") || newVal.currentState.getStateEvents("m.room.create", ""));
} else {
this.roomDisplayType = ROOM_TYPE_DEFAULT;
}
},
},
},
methods: {
onRoomTypeMixinEvent(e) {
if (this.room && this.room.roomId == e.getRoomId() && e && e.getType() == STATE_EVENT_ROOM_TYPE) {
this.onRoomTypeMixinTypeEvent(e);
}
},
onRoomTypeMixinTypeEvent(e) {
if (e) {
const roomType = e.getContent().type;
// Validate value, or return default
if ([ROOM_TYPE_FILE_MODE, ROOM_TYPE_VOICE_MODE].includes(roomType)) {
this.roomDisplayType = roomType;
} else {
this.roomDisplayType = ROOM_TYPE_DEFAULT;
}
}
},
},
computed: {
availableRoomTypes() {
let types = [{ title: this.$t("room_info.room_type_default"), description: "", value: ROOM_TYPE_DEFAULT }];
if (this.$config.experimental_voice_mode) {
types.push({
title: this.$t("room_info.voice_mode"),
description: this.$t("room_info.voice_mode_info"),
value: ROOM_TYPE_VOICE_MODE,
});
}
if (this.$config.experimental_file_mode) {
types.push({
title: this.$t("room_info.file_mode"),
description: this.$t("room_info.file_mode_info"),
value: ROOM_TYPE_FILE_MODE,
});
}
return types;
},
},
};