mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-06-17 21:41:16 +00:00
89 lines
2.2 KiB
Vue
89 lines
2.2 KiB
Vue
<template>
|
|
<div class="channels-list">
|
|
<spinner
|
|
v-if="channels === undefined"
|
|
size="40"
|
|
/>
|
|
<div
|
|
v-if="channels"
|
|
class="wrapper"
|
|
>
|
|
<ChannelTemplate
|
|
v-for="channel in channels"
|
|
:key="channel.channelID"
|
|
:channel-data="channel"
|
|
@click.native="openChannel(channel)"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import Spinner from "@/components/Spinner.vue";
|
|
import ChannelTemplate from "@/components/app/ServerTemplate/ChannelTemplate.vue";
|
|
import ServerService from "@/services/ServerService.js";
|
|
import {bus} from '@/main.js'
|
|
|
|
export default {
|
|
components: { ChannelTemplate, Spinner },
|
|
props: ["serverID"],
|
|
computed: {
|
|
channels() {
|
|
const channelsIds = this.$store.getters["servers/channelsIDs"][this.serverID];
|
|
if (channelsIds) {
|
|
let channels = [];
|
|
for ( let channelID of channelsIds ){
|
|
channels.push(this.$store.getters.channels[channelID])
|
|
}
|
|
return channels;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
},
|
|
|
|
async beforeMount() {
|
|
if (this.channels !== undefined) return;
|
|
const { ok, error, result } = await ServerService.getChannels(
|
|
this.serverID
|
|
);
|
|
if (!ok) {
|
|
console.log(error);
|
|
} else {
|
|
const channelsIDs = [];
|
|
for (let index = 0; index < result.data.length; index++) {
|
|
const element = result.data[index];
|
|
element.server = undefined;
|
|
element.server_id = this.serverID
|
|
this.$store.dispatch('channel', element)
|
|
channelsIDs.push(element.channelID)
|
|
}
|
|
this.$store.dispatch("servers/setChannelsIDs", {
|
|
serverID: this.serverID,
|
|
channelsIDs: channelsIDs
|
|
});
|
|
}
|
|
},
|
|
methods: {
|
|
openChannel(channel) {
|
|
const notificationExists = this.$store.getters.notifications.find(n => n.channelID === channel.channelID)
|
|
|
|
if (notificationExists && document.hasFocus()) {
|
|
this.$socket.emit('notification:dismiss', {channelID: channel.channelID});
|
|
}
|
|
|
|
bus.$emit('closeLeftMenu');
|
|
this.$store.dispatch('openChannel', channel)
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style scoped>
|
|
.channel-list {
|
|
background: rgba(0, 0, 0, 0.288);
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
</style>
|
|
|
|
|