keanu-weblite/src/components/messages/RoomPowerLevelsChanged.vue
2021-05-21 14:51:30 +02:00

86 lines
No EOL
2.3 KiB
Vue

<template>
<div class="messageJoin">
<div>
{{ allChanges }}
</div>
</div>
</template>
<script>
import messageMixin from "./messageMixin";
export default {
mixins: [messageMixin],
computed: {
allChanges() {
const content = this.event.getContent();
const prevContent = this.event.getPrevContent();
if (!prevContent || !prevContent.users || !content || !content.users) {
return "";
}
const userDefault = this.event.getContent().users_default || 0;
// Construct set of userIds
const users = [];
Object.keys(content.users).forEach((userId) => {
if (users.indexOf(userId) === -1) users.push(userId);
});
Object.keys(prevContent.users).forEach((userId) => {
if (users.indexOf(userId) === -1) users.push(userId);
});
const diff = [];
users.forEach((userId) => {
// Previous power level
const from = prevContent.users[userId];
// Current power level
const to = content.users[userId];
if (to !== from) {
diff.push(
this.$t("message.user_powerlevel_change_from_to", {
user: userId,
powerOld: this.powerLevelString(from, userDefault),
powerNew: this.powerLevelString(to, userDefault),
})
);
}
});
if (!diff.length) {
return "";
}
return this.$t("message.room_powerlevel_change", {
user: this.changer,
changes: diff.join(", "),
});
},
changer() {
if (this.event.getSender() == this.$matrix.currentUserId) {
return this.$t("message.you");
}
return this.event.sender
? this.event.sender.name
: this.event.getSender();
},
},
methods: {
powerLevelString(level, defaultUserLevel) {
const map = {
undefined: this.$t("power_level.default"),
0: this.$t("power_level.restricted"),
[defaultUserLevel]: this.$t("power_level.default"),
50: this.$t("power_level.moderator"),
100: this.$t("power_level.admin"),
};
if (map[level]) {
return map[level];
} else {
return this.$t("power_level.custom", { level: level });
}
},
},
};
</script>
<style lang="scss">
@import "@/assets/css/chat.scss";
</style>