mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-06-24 17:11:43 +00:00
implimented recyclerview to members and recents
This commit is contained in:
parent
a2cf7a91bb
commit
ea58dbd7b6
7 changed files with 87 additions and 75 deletions
28
package-lock.json
generated
28
package-lock.json
generated
|
|
@ -5886,9 +5886,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globule": {
|
"globule": {
|
||||||
"version": "1.2.1",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz",
|
||||||
"integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
|
"integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"glob": "~7.1.1",
|
"glob": "~7.1.1",
|
||||||
|
|
@ -6724,13 +6724,10 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"is-finite": {
|
"is-finite": {
|
||||||
"version": "1.0.2",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
|
||||||
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
|
"integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"requires": {
|
|
||||||
"number-is-nan": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"is-fullwidth-code-point": {
|
"is-fullwidth-code-point": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
|
@ -7935,9 +7932,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-sass": {
|
"node-sass": {
|
||||||
"version": "4.13.0",
|
"version": "4.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
|
||||||
"integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==",
|
"integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"async-foreach": "^0.1.3",
|
"async-foreach": "^0.1.3",
|
||||||
|
|
@ -12000,6 +11997,11 @@
|
||||||
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
|
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"vue-virtual-scroll-list": {
|
||||||
|
"version": "1.4.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.4.4.tgz",
|
||||||
|
"integrity": "sha512-wU7FDpd9Xy4f62pf8SBg/ak21jMI/pdx4s4JPah+z/zuhmeAafQgp8BjtZvvt+b0BZOsOS1FJuCfUH7azTkivQ=="
|
||||||
|
},
|
||||||
"vuedraggable": {
|
"vuedraggable": {
|
||||||
"version": "2.23.2",
|
"version": "2.23.2",
|
||||||
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz",
|
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz",
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
"vue-recaptcha": "^1.3.0",
|
"vue-recaptcha": "^1.3.0",
|
||||||
"vue-router": "^3.1.3",
|
"vue-router": "^3.1.3",
|
||||||
"vue-socket.io-extended": "^4.0.1",
|
"vue-socket.io-extended": "^4.0.1",
|
||||||
|
"vue-virtual-scroll-list": "^1.4.4",
|
||||||
"vuedraggable": "^2.23.2",
|
"vuedraggable": "^2.23.2",
|
||||||
"vuex": "^3.1.2"
|
"vuex": "^3.1.2"
|
||||||
},
|
},
|
||||||
|
|
@ -37,7 +38,7 @@
|
||||||
"eslint": "^5.16.0",
|
"eslint": "^5.16.0",
|
||||||
"eslint-plugin-prettier": "^3.1.1",
|
"eslint-plugin-prettier": "^3.1.1",
|
||||||
"eslint-plugin-vue": "^5.0.0",
|
"eslint-plugin-vue": "^5.0.0",
|
||||||
"node-sass": "^4.12.0",
|
"node-sass": "^4.13.1",
|
||||||
"prettier": "^1.19.1",
|
"prettier": "^1.19.1",
|
||||||
"sass-loader": "^8.0.0",
|
"sass-loader": "^8.0.0",
|
||||||
"vue-template-compiler": "^2.6.10"
|
"vue-template-compiler": "^2.6.10"
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,6 @@ export default {
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.member {
|
.member {
|
||||||
display: flex;
|
display: flex;
|
||||||
padding: 3px;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
transition: 0.2s;
|
transition: 0.2s;
|
||||||
|
|
@ -154,7 +153,6 @@ export default {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
height: 100%;
|
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
background: rgb(255, 71, 71);
|
background: rgb(255, 71, 71);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,59 +4,69 @@
|
||||||
<div class="title">Members ({{ members.length }})</div>
|
<div class="title">Members ({{ members.length }})</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="members">
|
<div class="members">
|
||||||
<div class="roles" v-for="role in serverRoles" :key="role.id">
|
<virtual-list :size="49" :remain="20" :variable="true">
|
||||||
|
<div class="roles" v-for="role in serverRoles" :key="role.id">
|
||||||
|
<div
|
||||||
|
class="tab"
|
||||||
|
v-if="serverRoles.length"
|
||||||
|
:style="{ color: role.color, height: '29' + 'px' }"
|
||||||
|
>
|
||||||
|
{{ role.name }} ({{ role.members.length }})
|
||||||
|
</div>
|
||||||
|
<member-template
|
||||||
|
v-for="member in role.members"
|
||||||
|
:key="member.member.uniqueID"
|
||||||
|
:type="member.type"
|
||||||
|
:avatar="member.member.avatar"
|
||||||
|
:user="member.member"
|
||||||
|
:member="member"
|
||||||
|
:style="{ height: '48' + 'px' }"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="tab"
|
class="tab"
|
||||||
v-if="serverRoles.length"
|
v-if="noneRoleOnlineMembers.length"
|
||||||
:style="{ color: role.color }"
|
:style="{ color: defaultRole.color, height: '29' + 'px' }"
|
||||||
>
|
>
|
||||||
{{ role.name }} ({{ role.members.length }})
|
{{ defaultRole.name }} ({{ noneRoleOnlineMembers.length }})
|
||||||
</div>
|
</div>
|
||||||
<member-template
|
<member-template
|
||||||
v-for="member in role.members"
|
v-for="member in noneRoleOnlineMembers"
|
||||||
:key="member.member.uniqueID"
|
:key="member.member.uniqueID"
|
||||||
:type="member.type"
|
:type="member.type"
|
||||||
:avatar="member.member.avatar"
|
:avatar="member.member.avatar"
|
||||||
:user="member.member"
|
:user="member.member"
|
||||||
:member="member"
|
:member="member"
|
||||||
|
:style="{ height: '48' + 'px' }"
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="tab"
|
class="tab"
|
||||||
v-if="noneRoleOnlineMembers.length"
|
v-if="offlineMembers.length"
|
||||||
:style="{ color: defaultRole.color }"
|
:style="{ height: '29' + 'px' }"
|
||||||
>
|
>
|
||||||
{{ defaultRole.name }} ({{ noneRoleOnlineMembers.length }})
|
Offline ({{ offlineMembers.length }})
|
||||||
</div>
|
</div>
|
||||||
<member-template
|
<member-template
|
||||||
v-for="member in noneRoleOnlineMembers"
|
v-for="member in offlineMembers"
|
||||||
:key="member.member.uniqueID"
|
:key="member.member.uniqueID"
|
||||||
:type="member.type"
|
:type="member.type"
|
||||||
:avatar="member.member.avatar"
|
:avatar="member.member.avatar"
|
||||||
:user="member.member"
|
:user="member.member"
|
||||||
:member="member"
|
:member="member"
|
||||||
/>
|
:style="{ height: '48' + 'px' }"
|
||||||
|
/>
|
||||||
<div class="tab" v-if="offlineMembers.length">
|
</virtual-list>
|
||||||
Offline ({{ offlineMembers.length }})
|
|
||||||
</div>
|
|
||||||
<member-template
|
|
||||||
v-for="member in offlineMembers"
|
|
||||||
:key="member.member.uniqueID"
|
|
||||||
:type="member.type"
|
|
||||||
:avatar="member.member.avatar"
|
|
||||||
:user="member.member"
|
|
||||||
:member="member"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import VirtualList from "vue-virtual-scroll-list";
|
||||||
import MemberTemplate from "@/components/app/MemberTemplate";
|
import MemberTemplate from "@/components/app/MemberTemplate";
|
||||||
export default {
|
export default {
|
||||||
components: { MemberTemplate },
|
components: { MemberTemplate, VirtualList },
|
||||||
computed: {
|
computed: {
|
||||||
selectedServerID() {
|
selectedServerID() {
|
||||||
return this.$store.getters["servers/selectedServerID"];
|
return this.$store.getters["servers/selectedServerID"];
|
||||||
|
|
@ -172,10 +182,13 @@ export default {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
}
|
}
|
||||||
.members {
|
.members {
|
||||||
overflow: auto;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
flex-shrink: 0;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.tab {
|
.tab {
|
||||||
padding: 5px;
|
|
||||||
user-select: none;
|
user-select: none;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
color: #b5c4ca;
|
color: #b5c4ca;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showLeftPanel: true
|
showLeftPanel: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,7 @@ export default {
|
||||||
color: white;
|
color: white;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
height: 34px;
|
||||||
transition: 0.3s;
|
transition: 0.3s;
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,24 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="recents">
|
<div class="recents">
|
||||||
<transition name="list">
|
<virtual-list :size="49" :remain="20">
|
||||||
<div class="list">
|
<FriendsTemplate
|
||||||
<FriendsTemplate
|
v-for="(channel, key) of channels"
|
||||||
v-for="(channel, key) of channels"
|
:key="key"
|
||||||
:key="key"
|
:recents="true"
|
||||||
:recents="true"
|
:channel-i-d="channel.channelID"
|
||||||
:channel-i-d="channel.channelID"
|
:recipient="channel.recipients[0]"
|
||||||
:recipient="channel.recipients[0]"
|
/>
|
||||||
/>
|
</virtual-list>
|
||||||
</div>
|
|
||||||
</transition>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import VirtualList from "vue-virtual-scroll-list";
|
||||||
import FriendsTemplate from "./FriendsTemplate.vue";
|
import FriendsTemplate from "./FriendsTemplate.vue";
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
FriendsTemplate
|
FriendsTemplate,
|
||||||
|
VirtualList
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
user() {
|
user() {
|
||||||
|
|
@ -78,21 +78,18 @@ export default {
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.list-enter-active,
|
|
||||||
.list-leave-active {
|
|
||||||
transition: 0.3s;
|
|
||||||
}
|
|
||||||
.list-enter, .list-leave-to /* .fade-leave-active below version 2.1.8 */ {
|
|
||||||
transform: translateY(-20px);
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.recents {
|
.recents {
|
||||||
background-color: rgba(0, 0, 0, 0);
|
background-color: rgba(0, 0, 0, 0);
|
||||||
user-select: none;
|
user-select: none;
|
||||||
padding-bottom: 3px;
|
|
||||||
border-radius: 5px;
|
|
||||||
transition: 0.3s;
|
transition: 0.3s;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
flex-shrink: 0;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.tab {
|
.tab {
|
||||||
transition: 0.3s;
|
transition: 0.3s;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue