Nertivia-Client/src/store/modules/serversModule.js
2019-12-19 16:32:04 +00:00

249 lines
7 KiB
JavaScript

import Vue from "vue";
const state = {
selectedServerID: null,
servers: {},
channelsIDs: {},
serverMembers: [],
roles: {}
};
const getters = {
servers(state) {
return state.servers;
},
roles(state) {
return state.roles;
},
channelsIDs(state) {
return state.channelsIDs;
},
serverMembers(state) {
return state.serverMembers;
},
selectedServerID(state) {
return state.selectedServerID;
}
};
const actions = {
setChannelIDs(context, { serverID, channelIDs }) {
context.commit("SET_CHANNEL_IDs", { serverID, channelIDs });
},
AddChannelsIDs(context, { serverID, channelsIDs }) {
context.commit("ADD_CHANNELS_IDS", { serverID, channelsIDs });
},
setServers(context, servers) {
context.commit("SET_SERVERS", servers);
},
setServer(context, server) {
context.commit("SET_SERVER", server);
},
updateServer(context, { server_id, server }) {
const update = Object.assign({}, context.state.servers[server_id], server);
context.commit("SET_SERVER", update);
},
removeServer(context, serverID) {
context.commit("REMOVE_SERVER", serverID);
},
addServerMembers(context, serverMembersArr) {
context.commit("ADD_SERVER_MEMBERS", serverMembersArr);
},
// Roles
addRole({ commit, state }, role) {
const serverRoles = [...state.roles[role.server_id]];
serverRoles.push(role);
commit("UPDATE_SERVER_ROLES", {
roles: serverRoles,
server_id: role.server_id
});
},
deleteRole({ commit, state }, { server_id, role_id }) {
const serverRoles = [...state.roles[server_id]].filter(
r => r.id !== role_id
);
commit("UPDATE_SERVER_ROLES", {
roles: serverRoles,
server_id: server_id
});
},
updateRole({ commit, state }, roleUpdates) {
const updatedRoles = state.roles[roleUpdates.server_id].map(r => {
if (r.id === roleUpdates.id) {
return Object.assign({}, r, roleUpdates);
} else {
return r;
}
});
commit("UPDATE_SERVER_ROLES", {
roles: updatedRoles,
server_id: roleUpdates.server_id
});
},
setAllRoles(context, rolesArr) {
context.commit("SET_ALL_ROLES", rolesArr);
},
addMemberRole({ commit, state }, { role_id, uniqueID, server_id }) {
const serverMemberIndex = state.serverMembers.findIndex(
sm => sm.uniqueID === uniqueID && sm.server_id === server_id
);
if (!serverMemberIndex) return;
const serverMemberNew = { ...state.serverMembers[serverMemberIndex] };
if (!serverMemberNew.roles) {
serverMemberNew.roles = [role_id];
} else {
if (serverMemberNew.roles.includes(role_id)) {
return;
}
serverMemberNew.roles.push(role_id);
}
commit("SET_MEMBER", {
serverMember: serverMemberNew,
index: serverMemberIndex
});
},
removeMemberRole({ commit, state }, { role_id, uniqueID, server_id }) {
const serverMemberIndex = state.serverMembers.findIndex(
sm => sm.uniqueID === uniqueID && sm.server_id === server_id
);
if (!serverMemberIndex) return;
let serverMemberNew = { ...state.serverMembers[serverMemberIndex] };
if (!serverMemberNew.roles || !serverMemberNew.roles.includes(role_id))
return;
serverMemberNew.roles = serverMemberNew.roles.filter(r => r != role_id);
commit("SET_MEMBER", {
serverMember: serverMemberNew,
index: serverMemberIndex
});
},
removeServerMember(context, { uniqueID, server_id }) {
context.commit("REMOVE_SERVER_MEMBER", { uniqueID, server_id });
},
setSelectedServerID(context, serverID) {
context.commit("SET_SELECTED_SERVER_ID", serverID);
},
addServerMember(context, serverMember) {
context.commit("ADD_SERVER_MEMBER", serverMember);
},
removePresences(context, server_id) {
const members = context.getters.serverMembers.filter(
m => m.server_id === server_id
);
const friends = context.rootGetters.user.friends;
for (let member of members) {
if (!friends[member.uniqueID]) {
context.dispatch(
"members/updatePresence",
{ uniqueID: member.uniqueID, status: null },
{ root: true }
);
}
context.commit("REMOVE_SERVER_MEMBER", {
uniqueID: member.uniqueID,
server_id
});
}
},
removeServerChannel(context, { server_id, channelID }) {
const filter = context.state.channelsIDs[server_id].filter(
c => c !== channelID
);
context.commit("SET_CHANNEL_IDs", {
serverID: server_id,
channelIDs: filter
});
},
removeAllServerChannels(context, server_id) {
const serverChannels = context.state.channelsIDs[server_id];
context.dispatch("removeChannels", serverChannels, { root: true });
context.commit("DELETE_CHANNELS", server_id);
},
removeNotifications(context, server_id) {
const serverChannels = context.state.channelsIDs[server_id];
const filteredNotifications = context.rootState.notificationsModule.notifications.filter(
n => !serverChannels.includes(n.channelID)
);
context.dispatch("addAllNotifications", filteredNotifications, {
root: true
});
}
};
const mutations = {
SET_MEMBER(state, { serverMember, index }) {
Vue.set(state.serverMembers, index, serverMember);
},
SET_CHANNEL_IDs(state, { serverID, channelIDs }) {
Vue.set(state.channelsIDs, serverID, channelIDs);
},
DELETE_CHANNELS(state, server_id) {
Vue.delete(state.channelsIDs, server_id);
},
ADD_CHANNELS_IDS(state, { serverID, channelsIDs }) {
const previousChannels = state.channelsIDs[serverID] || [];
Vue.set(state.channelsIDs, serverID, [
...new Set([...previousChannels, ...channelsIDs])
]);
},
SET_SERVERS(state, servers) {
state.servers = servers;
},
SET_SERVER(state, server) {
Vue.set(state.servers, server.server_id, server);
},
REMOVE_SERVER(state, serverID) {
Vue.delete(state.servers, serverID);
},
ADD_SERVER_MEMBERS(state, serverMembersArr) {
for (let members of serverMembersArr) {
if (
!state.serverMembers.find(
sm =>
sm.uniqueID === members.uniqueID &&
sm.server_id === members.server_id
)
) {
state.serverMembers.push(members);
}
}
},
ADD_SERVER_MEMBER(state, serverMember) {
const exists = state.serverMembers.find(
sm =>
sm.uniqueID === serverMember.uniqueID &&
sm.server_id === serverMember.server_id
);
if (exists) return;
state.serverMembers.push(serverMember);
},
SET_ALL_ROLES(state, rolesArr) {
Vue.set(state, "roles", rolesArr);
},
UPDATE_SERVER_ROLES(state, { roles, server_id }) {
Vue.set(state.roles, server_id, roles);
},
REMOVE_SERVER_MEMBER(state, { uniqueID, server_id }) {
state.serverMembers = state.serverMembers.filter(
m => m.uniqueID !== uniqueID || m.server_id !== server_id
);
},
SET_SELECTED_SERVER_ID(state, serverID) {
state.selectedServerID = serverID;
}
};
export default {
namespaced: true,
state,
actions,
mutations,
getters
};