mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-07-06 03:20:55 +00:00
Fixed a bug when changing channels
This commit is contained in:
parent
6f095a2e0e
commit
b6f5eddb45
1 changed files with 52 additions and 52 deletions
|
|
@ -7,7 +7,7 @@ import messagesService from "@/services/messagesService";
|
||||||
const state = {
|
const state = {
|
||||||
messages: {},
|
messages: {},
|
||||||
scrollPosition: {},
|
scrollPosition: {},
|
||||||
bottomUnloaded: {},
|
bottomUnloaded: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getters = {
|
const getters = {
|
||||||
|
|
@ -15,7 +15,7 @@ const getters = {
|
||||||
return state.messages;
|
return state.messages;
|
||||||
},
|
},
|
||||||
scrollPosition(state) {
|
scrollPosition(state) {
|
||||||
return state.scrollPosition
|
return state.scrollPosition;
|
||||||
},
|
},
|
||||||
bottomUnloaded(state) {
|
bottomUnloaded(state) {
|
||||||
return state.bottomUnloaded;
|
return state.bottomUnloaded;
|
||||||
|
|
@ -25,7 +25,7 @@ const getters = {
|
||||||
const actions = {
|
const actions = {
|
||||||
// server channel
|
// server channel
|
||||||
async openChannel(context, channel) {
|
async openChannel(context, channel) {
|
||||||
context.commit("selectedChannelID", channel.channelID)
|
context.commit("selectedChannelID", channel.channelID);
|
||||||
context.commit("setChannelName", channel.name);
|
context.commit("setChannelName", channel.name);
|
||||||
const messages = context.state.messages[channel.channelID];
|
const messages = context.state.messages[channel.channelID];
|
||||||
if (messages) {
|
if (messages) {
|
||||||
|
|
@ -34,22 +34,25 @@ const actions = {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getMessages(context, channel.channelID, true);
|
getMessages(context, channel.channelID, true);
|
||||||
|
|
||||||
},
|
},
|
||||||
//dm channel
|
//dm channel
|
||||||
async openChat(context, { uniqueID, channelID, channelName }) {
|
async openChat(context, { uniqueID, channelID, channelName }) {
|
||||||
if (channelName) context.commit("setChannelName", channelName);
|
if (channelName) context.commit("setChannelName", channelName);
|
||||||
const channels = context.rootState.channelModule.channels;
|
const channels = context.rootState.channelModule.channels;
|
||||||
channelID = Object.keys(channels).find(_channelID => {
|
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 messages = context.state.messages[channelID];
|
||||||
const channel = channels[channelID];
|
const channel = channels[channelID];
|
||||||
|
|
||||||
context.commit('selectedUserUniqueID', uniqueID);
|
context.commit("selectedUserUniqueID", uniqueID);
|
||||||
if (channelID) {
|
if (channelID) {
|
||||||
context.commit("setDMChannelID", channelID);
|
context.commit("setDMChannelID", channelID);
|
||||||
context.commit("selectedChannelID", channelID);
|
context.commit("selectedChannelID", channelID);
|
||||||
} else {
|
} else {
|
||||||
context.commit("selectedChannelID", "Loading");
|
context.commit("selectedChannelID", "Loading");
|
||||||
}
|
}
|
||||||
|
|
@ -57,17 +60,17 @@ const actions = {
|
||||||
if (messages) return;
|
if (messages) return;
|
||||||
if (channel && !messages) return getMessages(context, channelID);
|
if (channel && !messages) return getMessages(context, channelID);
|
||||||
|
|
||||||
|
|
||||||
const { ok, error, result } = await channelService.post(uniqueID);
|
const { ok, error, result } = await channelService.post(uniqueID);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
|
context.commit("setDMChannelID", result.data.channel.channelID);
|
||||||
|
context.commit("selectedChannelID", result.data.channel.channelID);
|
||||||
|
|
||||||
context.commit("channel", result.data.channel);
|
context.commit("channel", result.data.channel);
|
||||||
getMessages(context, result.data.channel.channelID, false);
|
getMessages(context, result.data.channel.channelID, false);
|
||||||
} else {
|
} else {
|
||||||
// TODO handle this
|
// TODO handle this
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
messages(context, data) {
|
messages(context, data) {
|
||||||
context.commit("messages", data);
|
context.commit("messages", data);
|
||||||
|
|
@ -76,7 +79,7 @@ const actions = {
|
||||||
//check if bottom messages unloaded.
|
//check if bottom messages unloaded.
|
||||||
const channelID = data.message.channelID;
|
const channelID = data.message.channelID;
|
||||||
const unloadedList = context.state.bottomUnloaded[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 the message is sent by this client, add additional information.
|
||||||
if (data.sender) {
|
if (data.sender) {
|
||||||
|
|
@ -86,80 +89,74 @@ const actions = {
|
||||||
|
|
||||||
context.commit("addMessage", data);
|
context.commit("addMessage", data);
|
||||||
},
|
},
|
||||||
addMessages(context, messagesArr){
|
addMessages(context, messagesArr) {
|
||||||
const channelID = messagesArr[0].channelID;
|
const channelID = messagesArr[0].channelID;
|
||||||
const messages = context.state.messages[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 channelID = messagesArr[0].channelID;
|
||||||
const messages = context.state.messages[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) {
|
replaceMessage(context, data) {
|
||||||
context.commit("replaceMessage", data);
|
context.commit("replaceMessage", data);
|
||||||
},
|
},
|
||||||
deleteMessage(context, {channelID, messageID}) {
|
deleteMessage(context, { channelID, messageID }) {
|
||||||
const messages = context.state.messages[channelID];
|
const messages = context.state.messages[channelID];
|
||||||
messages.find((obj, index) => {
|
messages.find((obj, index) => {
|
||||||
if (obj.messageID === messageID){
|
if (obj.messageID === messageID) {
|
||||||
context.commit('deleteMessage', {channelID, index});
|
context.commit("deleteMessage", { channelID, index });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
deleteAllMessages(context, channelIDArr) {
|
deleteAllMessages(context, channelIDArr) {
|
||||||
const messages = Object.assign({}, context.state.messages);
|
const messages = Object.assign({}, context.state.messages);
|
||||||
for (let index = 0; index < channelIDArr.length; index++) {
|
for (let index = 0; index < channelIDArr.length; index++) {
|
||||||
const channelID = channelIDArr[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];
|
const messages = context.state.messages[channelID];
|
||||||
messages.find((obj, index) => {
|
messages.find((obj, index) => {
|
||||||
if (obj.messageID === messageID){
|
if (obj.messageID === messageID) {
|
||||||
const newObj = Object.assign({}, obj, message);
|
const newObj = Object.assign({}, obj, message);
|
||||||
context.commit('updateMessage', {message: newObj, index});
|
context.commit("updateMessage", { message: newObj, index });
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
changeScrollPosition(context, {channelID, pos}) {
|
changeScrollPosition(context, { channelID, pos }) {
|
||||||
context.commit('changeScrollPosition', {channelID, pos})
|
context.commit("changeScrollPosition", { channelID, pos });
|
||||||
},
|
},
|
||||||
unloadTopMessages(context, {channelID}) {
|
unloadTopMessages(context, { channelID }) {
|
||||||
const messages = [...[], ...context.state.messages[channelID]];
|
const messages = [...[], ...context.state.messages[channelID]];
|
||||||
const unloaded = messages.splice(50)
|
const unloaded = messages.splice(50);
|
||||||
context.commit('messages', {channelID, messages: unloaded})
|
context.commit("messages", { channelID, messages: unloaded });
|
||||||
},
|
},
|
||||||
unloadBottomMessages(context, {channelID}) {
|
unloadBottomMessages(context, { channelID }) {
|
||||||
const messages = context.state.messages[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 }) {
|
setBottomUnloadStatus(context, { channelID, status }) {
|
||||||
context.commit('setBottomUnloadStatus', { channelID, status })
|
context.commit("setBottomUnloadStatus", { channelID, status });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
async function getMessages(context, channelID, isServerChannel) {
|
async function getMessages(context, channelID, isServerChannel) {
|
||||||
const { ok, error, result } = await messagesService.get(channelID);
|
const { ok, error, result } = await messagesService.get(channelID);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
context.commit("selectedChannelID", channelID);
|
|
||||||
if (isServerChannel) {
|
|
||||||
context.commit("setServerChannelID", channelID);
|
|
||||||
} else {
|
|
||||||
context.commit("setDMChannelID", channelID);
|
|
||||||
}
|
|
||||||
context.commit("messages", {
|
context.commit("messages", {
|
||||||
channelID: result.data.channelID,
|
channelID: result.data.channelID,
|
||||||
messages: result.data.messages.reverse()
|
messages: result.data.messages.reverse()
|
||||||
|
|
@ -170,21 +167,20 @@ async function getMessages(context, channelID, isServerChannel) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const mutations = {
|
const mutations = {
|
||||||
setAllMessages(state, messages) {
|
setAllMessages(state, messages) {
|
||||||
state.messages = messages;
|
state.messages = messages;
|
||||||
},
|
},
|
||||||
setBottomUnloadStatus(state, {channelID, status}) {
|
setBottomUnloadStatus(state, { channelID, status }) {
|
||||||
Vue.set(state.bottomUnloaded, channelID, status)
|
Vue.set(state.bottomUnloaded, channelID, status);
|
||||||
},
|
},
|
||||||
changeScrollPosition(state, {channelID, pos}) {
|
changeScrollPosition(state, { channelID, pos }) {
|
||||||
Vue.set(state.scrollPosition, channelID, pos);
|
Vue.set(state.scrollPosition, channelID, pos);
|
||||||
},
|
},
|
||||||
deleteMessage(state, {channelID, index}) {
|
deleteMessage(state, { channelID, index }) {
|
||||||
Vue.delete(state.messages[channelID], index)
|
Vue.delete(state.messages[channelID], index);
|
||||||
},
|
},
|
||||||
updateMessage(state, {message, index}) {
|
updateMessage(state, { message, index }) {
|
||||||
Vue.set(state.messages[message.channelID], index, message);
|
Vue.set(state.messages[message.channelID], index, message);
|
||||||
},
|
},
|
||||||
messages(state, data) {
|
messages(state, data) {
|
||||||
|
|
@ -203,7 +199,11 @@ const mutations = {
|
||||||
|
|
||||||
state.messages[message.channelID].find((o, i) => {
|
state.messages[message.channelID].find((o, i) => {
|
||||||
if (o.tempID === tempID) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue