fixed some bugs, added roles update event.

This commit is contained in:
unknown 2019-12-25 10:26:27 +00:00
parent 229747949a
commit 58896f832c
7 changed files with 84 additions and 18 deletions

View file

@ -51,7 +51,7 @@ export default {
}, },
roleColor() { roleColor() {
if (!this.member || !this.member.roles) return undefined; if (!this.member || !this.member.roles) return undefined;
const roles = this.$store.getters["servers/roles"][this.serverID]; const roles = this.$store.getters["servers/selectedServerRoles"];
if (!roles) return undefined; if (!roles) return undefined;
const filter = roles.filter(r => this.member.roles.includes(r.id)); const filter = roles.filter(r => this.member.roles.includes(r.id));

View file

@ -101,7 +101,7 @@ export default {
return roleMembers; return roleMembers;
}, },
noneRoleOnlineMembers() { noneRoleOnlineMembers() {
const roles = this.$store.getters["servers/roles"][this.selectedServerID]; const roles = this.$store.getters["servers/selectedServerRoles"];
return this.onlineMembers.filter(sm => { return this.onlineMembers.filter(sm => {
if (!sm.roles || !sm.roles.length) { if (!sm.roles || !sm.roles.length) {
return sm; return sm;
@ -113,7 +113,7 @@ export default {
}); });
}, },
serverRoles() { serverRoles() {
const roles = this.$store.getters["servers/roles"][this.selectedServerID]; const roles = this.$store.getters["servers/selectedServerRoles"];
let newRolesWithMembers = []; let newRolesWithMembers = [];
if (!roles) return undefined; if (!roles) return undefined;

View file

@ -313,9 +313,7 @@ export default {
}; };
}, },
roles() { roles() {
return this.$store.getters["servers/roles"][ return this.$store.getters["servers/selectedServerRoles"];
this.$store.getters["servers/selectedServerID"]
];
}, },
serverMember() { serverMember() {
const serverMembers = this.$store.getters["servers/serverMembers"]; const serverMembers = this.$store.getters["servers/serverMembers"];

View file

@ -11,15 +11,25 @@
<div class="material-icons">add</div> <div class="material-icons">add</div>
<div>Add Role</div> <div>Add Role</div>
</div> </div>
<div <draggable
class="role" v-model="roles"
v-for="(role, index) in roles" :animation="200"
:key="role.id" :delay="mobile ? 400 : 0"
:class="{ selected: index === selectedRoleIndex }" ghost-class="ghost"
@click="roleClick($event, index)" @end="onEnd"
> >
<div class="name" :style="{ color: role.color }">{{ role.name }}</div> <div
</div> class="role"
v-for="(role, index) in roles"
:key="role.id"
:class="{ selected: index === selectedRoleIndex }"
@click="roleClick($event, index)"
>
<div class="name" :style="{ color: role.color }">
{{ role.name }}
</div>
</div>
</draggable>
</div> </div>
<div class="details" v-if="roles && roles[selectedRoleIndex]"> <div class="details" v-if="roles && roles[selectedRoleIndex]">
<div class="input role-input"> <div class="input role-input">
@ -86,20 +96,30 @@
<script> <script>
import ServerService from "@/services/ServerService"; import ServerService from "@/services/ServerService";
import ErrorsListTemplate from "@/components/app/errorsListTemplate"; import ErrorsListTemplate from "@/components/app/errorsListTemplate";
import { isMobile } from "@/utils/Mobile";
import draggable from "vuedraggable";
export default { export default {
components: { ErrorsListTemplate }, components: { ErrorsListTemplate, draggable },
data() { data() {
return { return {
deleteButtonConfirmed: false, deleteButtonConfirmed: false,
deleteClicked: false, deleteClicked: false,
selectedRoleIndex: 0, selectedRoleIndex: 0,
errors: null, errors: null,
mobile: isMobile(),
update: { update: {
name: null name: null
} }
}; };
}, },
methods: { methods: {
async onEnd(test) {
const newIndex = test.newIndex;
const role = this.roles[newIndex];
const sendObj = { roleID: role.id, order: newIndex };
await ServerService.updateRolesPosition(this.server.server_id, sendObj);
},
async addRole() { async addRole() {
await ServerService.createRole(this.server.server_id, {}); await ServerService.createRole(this.server.server_id, {});
}, },
@ -172,8 +192,23 @@ export default {
const serverID = this.$store.state.popoutsModule.serverSettings.serverID; const serverID = this.$store.state.popoutsModule.serverSettings.serverID;
return this.$store.getters["servers/servers"][serverID]; return this.$store.getters["servers/servers"][serverID];
}, },
roles() { roles: {
return this.$store.getters["servers/roles"][this.server.server_id]; get() {
const roles = this.$store.getters["servers/roles"][
this.server.server_id
];
return [...roles].sort((a, b) => {
return a.order - b.order;
});
},
set(value) {
this.$store.dispatch(
"servers/setServerRoles",
value.map((v, i) => {
return { ...v, ...{ order: i } };
})
);
}
}, },
channels() { channels() {
const serverID = this.$store.state.popoutsModule.serverSettings.serverID; const serverID = this.$store.state.popoutsModule.serverSettings.serverID;
@ -199,6 +234,18 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.sortable-drag {
opacity: 0;
}
.ghost::before {
content: "";
position: absolute;
background: white;
top: 0;
left: 0;
bottom: 0;
width: 3px;
}
.server-avatar { .server-avatar {
background: grey; background: grey;
height: 90px; height: 90px;
@ -218,10 +265,11 @@ export default {
overflow: auto; overflow: auto;
} }
.role { .role {
position: relative;
padding: 5px; padding: 5px;
user-select: none; user-select: none;
cursor: pointer; cursor: pointer;
transition: 0.3s; transition: background 0.3s;
display: flex; display: flex;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;

View file

@ -84,6 +84,9 @@ export default {
instance().patch(`/servers/${serverID}/roles/${roleID}`, data) instance().patch(`/servers/${serverID}/roles/${roleID}`, data)
); );
}, },
updateRolesPosition(serverID, data) {
return wrapper(instance().patch(`/servers/${serverID}/roles`, data));
},
applyRoleToMember(serverID, roleID, memberID) { applyRoleToMember(serverID, roleID, memberID) {
return wrapper( return wrapper(
instance().patch( instance().patch(

View file

@ -23,6 +23,13 @@ const getters = {
}, },
selectedServerID(state) { selectedServerID(state) {
return state.selectedServerID; return state.selectedServerID;
},
selectedServerRoles() {
const serverRoles = state.roles[state.selectedServerID];
if (!serverRoles) return [];
return serverRoles.sort((a, b) => {
return a.order - b.order;
});
} }
}; };
@ -62,6 +69,12 @@ const actions = {
server_id: role.server_id server_id: role.server_id
}); });
}, },
setServerRoles({ commit }, rolesArr) {
commit("UPDATE_SERVER_ROLES", {
roles: rolesArr,
server_id: rolesArr[0].server_id
});
},
deleteRole({ commit, state }, { server_id, role_id }) { deleteRole({ commit, state }, { server_id, role_id }) {
const serverRoles = [...state.roles[server_id]].filter( const serverRoles = [...state.roles[server_id]].filter(
r => r.id !== role_id r => r.id !== role_id

View file

@ -498,6 +498,10 @@ const actions = {
["socket_serverMember:removeRole"](context, { role_id, uniqueID, server_id }) { ["socket_serverMember:removeRole"](context, { role_id, uniqueID, server_id }) {
// eslint-disable-next-line prettier/prettier // eslint-disable-next-line prettier/prettier
context.dispatch("servers/removeMemberRole", { role_id, uniqueID, server_id }); context.dispatch("servers/removeMemberRole", { role_id, uniqueID, server_id });
},
["socket_server:updateRoles"](context, { roles }) {
// eslint-disable-next-line prettier/prettier
context.dispatch("servers/setServerRoles", roles);
} }
}; };