HH-569: guard replayed frontend realtime messages (#144)
* fix(HH-569): guard replayed realtime messages * fix(HH-569): gate dashboard message side effects --------- Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
||||
isOnUnattendedView,
|
||||
isOnFoldersView,
|
||||
} from './helpers/actionHelpers';
|
||||
import { findPendingMessageIndex } from './helpers';
|
||||
import messageReadActions from './actions/messageReadActions';
|
||||
import messageTranslateActions from './actions/messageTranslateActions';
|
||||
import * as Sentry from '@sentry/vue';
|
||||
@@ -31,6 +32,19 @@ export const hasMessageFailedWithExternalError = pendingMessage => {
|
||||
return status === MESSAGE_STATUS.FAILED && externalError !== '';
|
||||
};
|
||||
|
||||
const getConversation = (state, message) =>
|
||||
state?.allConversations?.find(item => item.id === message.conversation_id);
|
||||
|
||||
const getStoredMessage = (conversation, message) => {
|
||||
const index = findPendingMessageIndex(conversation, message);
|
||||
return conversation.messages[index];
|
||||
};
|
||||
|
||||
const isNewerMessage = (currentMessage, message) =>
|
||||
!currentMessage?.updated_at ||
|
||||
!message.updated_at ||
|
||||
message.updated_at > currentMessage.updated_at;
|
||||
|
||||
// actions
|
||||
const actions = {
|
||||
getConversation: async ({ commit }, conversationId) => {
|
||||
@@ -342,7 +356,13 @@ const actions = {
|
||||
}
|
||||
},
|
||||
|
||||
addMessage({ commit, rootGetters }, message) {
|
||||
addMessage({ commit, state, rootGetters }, message) {
|
||||
const conversation = getConversation(state, message);
|
||||
if (!conversation) return false;
|
||||
|
||||
const currentMessage = getStoredMessage(conversation, message);
|
||||
if (!isNewerMessage(currentMessage, message)) return false;
|
||||
|
||||
commit(types.ADD_MESSAGE, message);
|
||||
if (message.message_type === MESSAGE_TYPE.INCOMING) {
|
||||
commit(types.SET_CONVERSATION_CAN_REPLY, {
|
||||
@@ -352,11 +372,21 @@ const actions = {
|
||||
commit(types.ADD_CONVERSATION_ATTACHMENTS, message);
|
||||
}
|
||||
handleVoiceCallCreated(message, rootGetters?.getCurrentUserID);
|
||||
return true;
|
||||
},
|
||||
|
||||
updateMessage({ commit, rootGetters }, message) {
|
||||
updateMessage({ commit, state, rootGetters }, message) {
|
||||
const conversation = getConversation(state, message);
|
||||
if (
|
||||
!conversation ||
|
||||
!isNewerMessage(getStoredMessage(conversation, message), message)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
commit(types.ADD_MESSAGE, message);
|
||||
handleVoiceCallUpdated(commit, message, rootGetters?.getCurrentUserID);
|
||||
return true;
|
||||
},
|
||||
|
||||
deleteMessage: async function deleteLabels(
|
||||
|
||||
Reference in New Issue
Block a user