mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-05-21 21:28:37 +00:00
249 lines
7 KiB
JavaScript
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
|
|
};
|