storing members in a single module.

This commit is contained in:
supertiger1234 2019-06-28 20:10:45 +01:00
parent cfb8627600
commit b8f04df568
11 changed files with 184 additions and 43 deletions

View file

@ -16,10 +16,17 @@ export default {
components: { MemberTemplate }, components: { MemberTemplate },
computed: { computed: {
members() { members() {
const members = this.$store.getters['members/members'];
const serverMembers = this.$store.getters['servers/serverMembers'] const serverMembers = this.$store.getters['servers/serverMembers']
const selectedServerID = this.$store.getters['servers/selectedServerID']; const selectedServerID = this.$store.getters['servers/selectedServerID'];
return serverMembers.filter(sm => sm.server_id === selectedServerID).sort((a, b) => { let filteredSM = serverMembers.filter(sm => sm.server_id === selectedServerID);
let getMember = filteredSM.map(sm => {
sm.member = members[sm.uniqueID];
return sm;
})
const sort = getMember.sort((a, b) => {
var nameA = a.member.username.toUpperCase(); var nameA = a.member.username.toUpperCase();
var nameB = b.member.username.toUpperCase(); var nameB = b.member.username.toUpperCase();
if (nameA < nameB) { if (nameA < nameB) {
@ -30,6 +37,7 @@ export default {
} }
return 0; return 0;
}) })
return sort;
} }
} }

View file

@ -350,6 +350,5 @@ img.emoji {
height: 1.7em; height: 1.7em;
width: auto; width: auto;
margin: 0 0.05em 0 0.1em; margin: 0 0.05em 0 0.1em;
vertical-align: -0.1em;
} }
</style> </style>

View file

@ -59,9 +59,10 @@ export default {
return config.domain + "/avatars/" + this.recipient.avatar return config.domain + "/avatars/" + this.recipient.avatar
}, },
status() { status() {
const presences = this.$store.getters['members/presences'];
let status = 0; let status = 0;
if (this.$store.getters.user.friends[this.recipient.uniqueID]) { if (presences[this.recipient.uniqueID]) {
status = this.$store.getters.user.friends[this.recipient.uniqueID].recipient.status || 0 status = presences[this.recipient.uniqueID] || 0
} }
return { return {

View file

@ -27,10 +27,13 @@ export default {
computed: { computed: {
friends() { friends() {
const allFriend = this.$store.getters.user.friends; const allFriend = this.$store.getters.user.friends;
const members = this.$store.getters['members/members'];
const presences = this.$store.getters['members/presences'];
const result = Object.keys(allFriend).map(function(key) { const result = Object.keys(allFriend).map(function(key) {
allFriend[key].recipient = members[allFriend[key].uniqueID];
return allFriend[key]; return allFriend[key];
}); });
return result.filter(friend => friend.status == 2 && (friend.recipient.status === undefined || friend.recipient.status == 0 )); return result.filter(friend => friend.status == 2 && (!presences[friend.uniqueID] || presences[friend.uniqueID] == 0 ));
} }
} }
} }

View file

@ -30,10 +30,14 @@ export default {
computed: { computed: {
friends() { friends() {
const allFriend = this.$store.getters.user.friends; const allFriend = this.$store.getters.user.friends;
const members = this.$store.getters['members/members'];
const presences = this.$store.getters['members/presences'];
const notifications = this.$store.getters.notifications; const notifications = this.$store.getters.notifications;
const channels = this.$store.getters.channels; const channels = this.$store.getters.channels;
const result = Object.keys(allFriend).map(function(key) { const result = Object.keys(allFriend).map(function(key) {
const friend = allFriend[key]; const friend = allFriend[key];
friend.recipient = members[friend.uniqueID];
const findNotification = notifications.find( e => { const findNotification = notifications.find( e => {
return e.sender.uniqueID === friend.recipient.uniqueID && !channels[e.channelID].server_id return e.sender.uniqueID === friend.recipient.uniqueID && !channels[e.channelID].server_id
@ -45,7 +49,7 @@ export default {
return friend return friend
}); });
return result.filter(friend => friend.status == 2 && (friend.recipient.status !== undefined && friend.recipient.status > 0 )); return result.filter(friend => friend.status == 2 && (presences[friend.uniqueID] && presences[friend.uniqueID] > 0 ));
} }
} }
} }

View file

@ -27,7 +27,9 @@ export default {
computed: { computed: {
friends() { friends() {
const allFriend = this.$store.getters.user.friends; const allFriend = this.$store.getters.user.friends;
const members = this.$store.getters['members/members'];
const result = Object.keys(allFriend).map(function(key) { const result = Object.keys(allFriend).map(function(key) {
allFriend[key].recipient = members[allFriend[key].uniqueID];
return allFriend[key]; return allFriend[key];
}); });
return result.filter(friend => friend.status < 2); return result.filter(friend => friend.status < 2);

View file

@ -10,6 +10,7 @@ import uploadFilesModule from './modules/uploadFilesModule';
import popoutsModule from './modules/popoutsModule/popoutsModule.js'; import popoutsModule from './modules/popoutsModule/popoutsModule.js';
import emojiSuggestionModule from './modules/emojiSuggestionModule'; import emojiSuggestionModule from './modules/emojiSuggestionModule';
import serversModule from './modules/serversModule'; import serversModule from './modules/serversModule';
import membersModule from './modules/membersModule';
import { import {
router router
} from './../router' } from './../router'
@ -27,7 +28,8 @@ export const store = new Vuex.Store({
uploadFilesModule, uploadFilesModule,
popoutsModule, popoutsModule,
emojiSuggestionModule, emojiSuggestionModule,
servers: serversModule servers: serversModule,
members: membersModule
}, },
state: { state: {

View file

@ -0,0 +1,70 @@
import { bus } from "../../main";
import { router } from "./../../router";
import Vue from "vue";
const state = {
members: {},
presences: {}
};
const getters = {
members(state) {
return state.members;
},
presences(state) {
return state.presences;
}
};
const actions = {
addPresences(context, presences) {
context.commit('ADD_PRESENCES', presences);
},
updatePresence(context, {uniqueID, status}) {
context.commit('UPDATE_PRESENCE', {uniqueID, status});
},
addMembers(context, membersOBJ) {
context.commit('ADD_MEMBERS', membersOBJ);
},
addMember(context, member) {
context.commit('ADD_MEMBER', member);
},
removeMember(context, uniqueID) {
context.commit('REMOVE_MEMBER', uniqueID);
},
updateAvatar(context, {uniqueID, avatarID}) {
context.commit('UPDATE_AVATAR', {uniqueID, avatarID});
},
};
const mutations = {
ADD_PRESENCES(state, presences){
state.presences = {...state.presences, ...presences}
},
UPDATE_PRESENCE(state, {uniqueID, status}) {
Vue.set(state.presences, uniqueID, status);
},
ADD_MEMBERS(state, membersOBJ){
state.members = Object.assign(state.members, membersOBJ);
},
ADD_MEMBER(state, member) {
state.members[member.uniqueID] = member;
},
REMOVE_MEMBER(state, uniqueID) {
delete state.members[uniqueID];
},
UPDATE_AVATAR(state, {uniqueID, avatarID}) {
state.members[uniqueID].avatar = avatarID;
},
};
export default {
namespaced: true,
state,
actions,
mutations,
getters
};

View file

@ -68,18 +68,18 @@ const mutations = {
ADD_SERVER_MEMBERS(state, serverMembersArr) { ADD_SERVER_MEMBERS(state, serverMembersArr) {
for (let members of serverMembersArr) { for (let members of serverMembersArr) {
if (!state.serverMembers.find(sm => sm.member.uniqueID === members.member.uniqueID && sm.server_id === members.server_id)){ if (!state.serverMembers.find(sm => sm.uniqueID === members.uniqueID && sm.server_id === members.server_id)){
state.serverMembers.push(members) state.serverMembers.push(members)
} }
} }
}, },
ADD_SERVER_MEMBER(state, serverMember) { ADD_SERVER_MEMBER(state, serverMember) {
const exists = state.serverMembers.find(sm => sm.member.uniqueID === serverMember.member.uniqueID && sm.server_id === serverMember.server_id) const exists = state.serverMembers.find(sm => sm.uniqueID === serverMember.uniqueID && sm.server_id === serverMember.server_id)
if (exists) return; if (exists) return;
state.serverMembers.push(serverMember); state.serverMembers.push(serverMember);
}, },
REMOVE_SERVER_MEMBER(state, {uniqueID, server_id}) { REMOVE_SERVER_MEMBER(state, {uniqueID, server_id}) {
state.serverMembers = state.serverMembers.filter(m => m.member.uniqueID !== uniqueID && m.server_id === server_id); state.serverMembers = state.serverMembers.filter(m => m.uniqueID !== uniqueID && m.server_id === server_id);
}, },
SET_SELECTED_SERVER_ID(state, serverID){ SET_SELECTED_SERVER_ID(state, serverID){
state.selectedServerID = serverID; state.selectedServerID = serverID;

View file

@ -18,23 +18,53 @@ const actions = {
socket_success(context, data) { socket_success(context, data) {
const {message, user, serverMembers, dms, notifications, currentFriendStatus, settings} = data; const {message, user, serverMembers, dms, notifications, currentFriendStatus, settings} = data;
const friendsArray = user.friends;
const friendObject = {};
// convert array into object and add online status.
if(friendsArray !== undefined && friendsArray.length >=1) { const friendsArr = user.friends;
for (let index = 0; index < friendsArray.length; index++) {
const element = friendsArray[index]; const presence = {};
if (element.recipient) { const friendObj = {};
friendObject[element.recipient.uniqueID] = element; const memberObj = {};
for (let currentFriendStatus of currentFriendStatus){ if (friendsArr) {
if(currentFriendStatus[0] == element.recipient.uniqueID){ for ( let friend of friendsArr ){
friendObject[element.recipient.uniqueID].recipient.status = currentFriendStatus[1] const member = friend.recipient;
} delete friend.recipient;
} friend.uniqueID = member.uniqueID;
} friendObj[member.uniqueID] = friend;
memberObj[member.uniqueID] = member;
} }
} }
if (currentFriendStatus) {
for (const _presence of currentFriendStatus) {
presence[_presence[0]] = _presence[1];
}
}
context.dispatch('members/addPresences', presence);
context.dispatch('members/addMembers', memberObj);
// const friendsArray = user.friends;
// const friendObject = {};
// // convert array into object and add online status.
// if(friendsArray !== undefined && friendsArray.length >=1) {
// for (let index = 0; index < friendsArray.length; index++) {
// const element = friendsArray[index];
// if (element.recipient) {
// friendObject[element.recipient.uniqueID] = element;
// for (let currentFriendStatus of currentFriendStatus){
// console.log(currentFriendStatus[0], currentFriendStatus[1])
// if(currentFriendStatus[0] == element.recipient.uniqueID){
// friendObject[element.recipient.uniqueID].recipient.status = currentFriendStatus[1]
// }
// }
// }
// }
// }
let servers = user.servers || []; let servers = user.servers || [];
//convert array to object for servers //convert array to object for servers
@ -60,14 +90,24 @@ const actions = {
context.dispatch('servers/setServers', servers) context.dispatch('servers/setServers', servers)
data.user.servers = undefined; data.user.servers = undefined;
data.user.friends = friendObject; data.user.friends = friendObj;
context.commit('user', data.user) context.commit('user', data.user)
//server members //server members
context.dispatch( 'servers/addServerMembers', serverMembers ) let serverMembersArr = [];
let membersObj = {};
for (let serverMember of serverMembers) {
const member = serverMember.member;
delete serverMember.member;
serverMember.uniqueID = member.uniqueID;
serverMembersArr.push(serverMember);
membersObj[member.uniqueID] = member;
}
context.dispatch('members/addMembers', membersObj);
context.dispatch( 'servers/addServerMembers', serverMembersArr )
// convert dms array to object // convert dms array to object
@ -84,6 +124,12 @@ const actions = {
}, },
socket_relationshipAdd(context, friend) { socket_relationshipAdd(context, friend) {
const member = friend.recipient;
delete friend.recipient;
friend.uniqueID = member.uniqueID;
context.dispatch('members/updatePresence', {uniqueID: member.uniqueID, status: member.status})
delete member.status;
context.dispatch('members/addMember', member)
context.commit('addFriend', friend) context.commit('addFriend', friend)
}, },
socket_relationshipAccept(context, uniqueID) { socket_relationshipAccept(context, uniqueID) {
@ -116,7 +162,8 @@ const actions = {
context.dispatch('messageCreatedNotification', notification); context.dispatch('messageCreatedNotification', notification);
}, },
socket_userStatusChange(context, data) { socket_userStatusChange(context, data) {
context.commit('userStatusChange', data) if (context.rootState.user.user.uniqueID === data.uniqueID) return;
context.dispatch('members/updatePresence', {uniqueID: data.uniqueID, status: data.status})
}, },
socket_multiDeviceStatus(context, data) { socket_multiDeviceStatus(context, data) {
context.commit('changeStatus', data.status) context.commit('changeStatus', data.status)
@ -128,7 +175,7 @@ const actions = {
context.commit('changeAvatar', data.avatarID); context.commit('changeAvatar', data.avatarID);
}, },
socket_userAvatarChange(context, data) { socket_userAvatarChange(context, data) {
context.commit('userAvatarChange', data) context.commit('members/updateAvatar', data)
}, },
['socket_channel:created'](context, data){ ['socket_channel:created'](context, data){
const {channel} = data; const {channel} = data;
@ -176,7 +223,14 @@ const actions = {
context.dispatch('servers/removeServer', server_id) context.dispatch('servers/removeServer', server_id)
}, },
['socket_server:memberAdd'](context, {serverMember}) { // member_add ['socket_server:memberAdd'](context, {serverMember}) { // member_add
context.dispatch('servers/addServerMember', serverMember) let sm = Object.assign({}, serverMember);
const member = sm.member;
delete sm.member;
sm.uniqueID = member.uniqueID;
context.dispatch('members/addMember', member)
context.dispatch('servers/addServerMember', sm)
console.log("someone joined") console.log("someone joined")
}, },
['socket_server:memberRemove'](context, {uniqueID, server_id}) { // member_remove ['socket_server:memberRemove'](context, {uniqueID, server_id}) { // member_remove
@ -184,6 +238,16 @@ const actions = {
console.log("Someone left") console.log("Someone left")
}, },
['socket_server:members'](context, {serverMembers}) { // members ['socket_server:members'](context, {serverMembers}) { // members
let serverMembersArr = [];
let members = {};
for (let serverMember of serverMembers) {
const member = serverMember.member;
delete serverMember.member;
serverMember.uniqueID = member.uniqueID;
serverMembersArr.push(serverMember);
members[member.uniqueID] = member;
}
context.dispatch('members/addMembers', members);
context.dispatch('servers/addServerMembers', serverMembers) context.dispatch('servers/addServerMembers', serverMembers)
console.log("server members ") console.log("server members ")
}, },

View file

@ -52,18 +52,6 @@ const mutations = {
//changes my status //changes my status
Vue.set(state.user, "status", status) Vue.set(state.user, "status", status)
}, },
userStatusChange(state, data) {
// changes friends status
const friends = state.user.friends;
friends[data.uniqueID].recipient.status = data.status;
state.user.friends = Object.assign({}, friends)
},
userAvatarChange(state, data) {
// changes friends status
const friends = state.user.friends;
friends[data.uniqueID].recipient.avatar = data.avatarID;
state.user.friends = Object.assign({}, friends)
},
token(state, token) { token(state, token) {
axios.defaults.headers.common['authorization'] = token; axios.defaults.headers.common['authorization'] = token;
localStorage.setItem('hauthid', token); localStorage.setItem('hauthid', token);
@ -81,7 +69,7 @@ const mutations = {
addFriend(state, friend) { addFriend(state, friend) {
const friends = state.user.friends; const friends = state.user.friends;
friends[friend.recipient.uniqueID] = friend; friends[friend.uniqueID] = friend;
state.user.friends = Object.assign({}, friends) state.user.friends = Object.assign({}, friends)