Fixed a bug when changing channels

This commit is contained in:
supertiger1234 2019-11-06 10:36:00 +00:00
parent 6f095a2e0e
commit b6f5eddb45

View file

@ -7,7 +7,7 @@ import messagesService from "@/services/messagesService";
const state = {
messages: {},
scrollPosition: {},
bottomUnloaded: {},
bottomUnloaded: {}
};
const getters = {
@ -15,7 +15,7 @@ const getters = {
return state.messages;
},
scrollPosition(state) {
return state.scrollPosition
return state.scrollPosition;
},
bottomUnloaded(state) {
return state.bottomUnloaded;
@ -25,7 +25,7 @@ const getters = {
const actions = {
// server channel
async openChannel(context, channel) {
context.commit("selectedChannelID", channel.channelID)
context.commit("selectedChannelID", channel.channelID);
context.commit("setChannelName", channel.name);
const messages = context.state.messages[channel.channelID];
if (messages) {
@ -34,22 +34,25 @@ const actions = {
return;
}
getMessages(context, channel.channelID, true);
},
//dm channel
async openChat(context, { uniqueID, channelID, channelName }) {
if (channelName) context.commit("setChannelName", channelName);
const channels = context.rootState.channelModule.channels;
channelID = Object.keys(channels).find(_channelID => {
return channels[_channelID].recipients && channels[_channelID].recipients.length && channels[_channelID].recipients[0].uniqueID === uniqueID
})
return (
channels[_channelID].recipients &&
channels[_channelID].recipients.length &&
channels[_channelID].recipients[0].uniqueID === uniqueID
);
});
const messages = context.state.messages[channelID];
const channel = channels[channelID];
context.commit('selectedUserUniqueID', uniqueID);
context.commit("selectedUserUniqueID", uniqueID);
if (channelID) {
context.commit("setDMChannelID", channelID);
context.commit("selectedChannelID", channelID);
context.commit("selectedChannelID", channelID);
} else {
context.commit("selectedChannelID", "Loading");
}
@ -57,17 +60,17 @@ const actions = {
if (messages) return;
if (channel && !messages) return getMessages(context, channelID);
const { ok, error, result } = await channelService.post(uniqueID);
if (ok) {
context.commit("setDMChannelID", result.data.channel.channelID);
context.commit("selectedChannelID", result.data.channel.channelID);
context.commit("channel", result.data.channel);
getMessages(context, result.data.channel.channelID, false);
} else {
// TODO handle this
console.log(error);
}
},
messages(context, data) {
context.commit("messages", data);
@ -76,7 +79,7 @@ const actions = {
//check if bottom messages unloaded.
const channelID = data.message.channelID;
const unloadedList = context.state.bottomUnloaded[channelID];
if (unloadedList) return
if (unloadedList) return;
// if the message is sent by this client, add additional information.
if (data.sender) {
@ -86,80 +89,74 @@ const actions = {
context.commit("addMessage", data);
},
addMessages(context, messagesArr){
addMessages(context, messagesArr) {
const channelID = messagesArr[0].channelID;
const messages = context.state.messages[channelID];
const join = [ ...messagesArr.reverse(), ...messages, ];
const join = [...messagesArr.reverse(), ...messages];
context.commit('messages', {messages: join, channelID});
context.commit("messages", { messages: join, channelID });
},
addMessagesBefore(context, messagesArr){
addMessagesBefore(context, messagesArr) {
const channelID = messagesArr[0].channelID;
const messages = context.state.messages[channelID];
const join = [ ...messages, ...messagesArr, ];
const join = [...messages, ...messagesArr];
context.commit('messages', {messages: join, channelID});
context.commit("messages", { messages: join, channelID });
},
replaceMessage(context, data) {
context.commit("replaceMessage", data);
},
deleteMessage(context, {channelID, messageID}) {
deleteMessage(context, { channelID, messageID }) {
const messages = context.state.messages[channelID];
messages.find((obj, index) => {
if (obj.messageID === messageID){
context.commit('deleteMessage', {channelID, index});
if (obj.messageID === messageID) {
context.commit("deleteMessage", { channelID, index });
return true;
}
})
});
},
deleteAllMessages(context, channelIDArr) {
const messages = Object.assign({}, context.state.messages);
for (let index = 0; index < channelIDArr.length; index++) {
const channelID = channelIDArr[index];
delete messages[channelID]
delete messages[channelID];
}
context.commit('setAllMessages', messages)
context.commit("setAllMessages", messages);
},
updateMessage(context, {channelID, messageID, message}) {
updateMessage(context, { channelID, messageID, message }) {
const messages = context.state.messages[channelID];
messages.find((obj, index) => {
if (obj.messageID === messageID){
if (obj.messageID === messageID) {
const newObj = Object.assign({}, obj, message);
context.commit('updateMessage', {message: newObj, index});
context.commit("updateMessage", { message: newObj, index });
return true;
}
})
});
},
changeScrollPosition(context, {channelID, pos}) {
context.commit('changeScrollPosition', {channelID, pos})
changeScrollPosition(context, { channelID, pos }) {
context.commit("changeScrollPosition", { channelID, pos });
},
unloadTopMessages(context, {channelID}) {
unloadTopMessages(context, { channelID }) {
const messages = [...[], ...context.state.messages[channelID]];
const unloaded = messages.splice(50)
context.commit('messages', {channelID, messages: unloaded})
const unloaded = messages.splice(50);
context.commit("messages", { channelID, messages: unloaded });
},
unloadBottomMessages(context, {channelID}) {
unloadBottomMessages(context, { channelID }) {
const messages = context.state.messages[channelID];
const unloaded = messages.slice(0, -50)
const unloaded = messages.slice(0, -50);
context.commit('messages', {channelID, messages: unloaded})
context.commit("messages", { channelID, messages: unloaded });
},
setBottomUnloadStatus(context, { channelID, status }) {
context.commit('setBottomUnloadStatus', { channelID, status })
context.commit("setBottomUnloadStatus", { channelID, status });
}
};
async function getMessages(context, channelID, isServerChannel) {
const { ok, error, result } = await messagesService.get(channelID);
if (ok) {
context.commit("selectedChannelID", channelID);
if (isServerChannel) {
context.commit("setServerChannelID", channelID);
} else {
context.commit("setDMChannelID", channelID);
}
context.commit("messages", {
channelID: result.data.channelID,
messages: result.data.messages.reverse()
@ -170,21 +167,20 @@ async function getMessages(context, channelID, isServerChannel) {
}
}
const mutations = {
setAllMessages(state, messages) {
state.messages = messages;
},
setBottomUnloadStatus(state, {channelID, status}) {
Vue.set(state.bottomUnloaded, channelID, status)
setBottomUnloadStatus(state, { channelID, status }) {
Vue.set(state.bottomUnloaded, channelID, status);
},
changeScrollPosition(state, {channelID, pos}) {
changeScrollPosition(state, { channelID, pos }) {
Vue.set(state.scrollPosition, channelID, pos);
},
deleteMessage(state, {channelID, index}) {
Vue.delete(state.messages[channelID], index)
deleteMessage(state, { channelID, index }) {
Vue.delete(state.messages[channelID], index);
},
updateMessage(state, {message, index}) {
updateMessage(state, { message, index }) {
Vue.set(state.messages[message.channelID], index, message);
},
messages(state, data) {
@ -203,7 +199,11 @@ const mutations = {
state.messages[message.channelID].find((o, i) => {
if (o.tempID === tempID) {
Vue.set(state.messages[message.channelID], i, Object.assign({}, message, {tempID}));
Vue.set(
state.messages[message.channelID],
i,
Object.assign({}, message, { tempID })
);
return true;
}
});