fix: Remove duplicates message in WhatsApp Channel (#7003)
This commit is contained in:
@@ -12,6 +12,26 @@ const getLastNonActivityMessage = (messageInStore, messageFromAPI) => {
|
||||
return messageInStore || messageFromAPI;
|
||||
};
|
||||
|
||||
export const filterDuplicateSourceMessages = (messages = []) => {
|
||||
const messagesWithoutDuplicates = [];
|
||||
// We cannot use Map or any short hand method as it returns the last message with the duplicate ID
|
||||
// We should return the message with smaller id when there is a duplicate
|
||||
messages.forEach(m1 => {
|
||||
if (m1.source_id) {
|
||||
if (
|
||||
messagesWithoutDuplicates.findIndex(
|
||||
m2 => m1.source_id === m2.source_id
|
||||
) < 0
|
||||
) {
|
||||
messagesWithoutDuplicates.push(m1);
|
||||
}
|
||||
} else {
|
||||
messagesWithoutDuplicates.push(m1);
|
||||
}
|
||||
});
|
||||
return messagesWithoutDuplicates;
|
||||
};
|
||||
|
||||
export default {
|
||||
methods: {
|
||||
lastMessage(m) {
|
||||
@@ -34,14 +54,14 @@ export default {
|
||||
lastNonActivityMessageFromAPI
|
||||
);
|
||||
},
|
||||
readMessages(m) {
|
||||
return m.messages.filter(
|
||||
chat => chat.created_at * 1000 <= m.agent_last_seen_at * 1000
|
||||
readMessages(messages, agentLastSeenAt) {
|
||||
return messages.filter(
|
||||
message => message.created_at * 1000 <= agentLastSeenAt * 1000
|
||||
);
|
||||
},
|
||||
unReadMessages(m) {
|
||||
return m.messages.filter(
|
||||
chat => chat.created_at * 1000 > m.agent_last_seen_at * 1000
|
||||
unReadMessages(messages, agentLastSeenAt) {
|
||||
return messages.filter(
|
||||
message => message.created_at * 1000 > agentLastSeenAt * 1000
|
||||
);
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,17 +1,50 @@
|
||||
import conversationMixin from '../conversations';
|
||||
import conversationMixin, {
|
||||
filterDuplicateSourceMessages,
|
||||
} from '../conversations';
|
||||
import conversationFixture from './conversationFixtures';
|
||||
import commonHelpers from '../../helper/commons';
|
||||
commonHelpers();
|
||||
|
||||
describe('#filterDuplicateSourceMessages', () => {
|
||||
it('returns messages without duplicate source_id and all messages without source_id', () => {
|
||||
expect(
|
||||
filterDuplicateSourceMessages([
|
||||
{ source_id: null, id: 1 },
|
||||
{ source_id: '', id: 2 },
|
||||
{ id: 3 },
|
||||
{ source_id: 'wa_1', id: 4 },
|
||||
{ source_id: 'wa_1', id: 5 },
|
||||
{ source_id: 'wa_1', id: 6 },
|
||||
{ source_id: 'wa_2', id: 7 },
|
||||
{ source_id: 'wa_2', id: 8 },
|
||||
{ source_id: 'wa_3', id: 9 },
|
||||
])
|
||||
).toEqual([
|
||||
{ source_id: null, id: 1 },
|
||||
{ source_id: '', id: 2 },
|
||||
{ id: 3 },
|
||||
{ source_id: 'wa_1', id: 4 },
|
||||
{ source_id: 'wa_2', id: 7 },
|
||||
{ source_id: 'wa_3', id: 9 },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#conversationMixin', () => {
|
||||
it('should return read messages if conversation is passed', () => {
|
||||
expect(
|
||||
conversationMixin.methods.readMessages(conversationFixture.conversation)
|
||||
conversationMixin.methods.readMessages(
|
||||
conversationFixture.conversation.messages,
|
||||
conversationFixture.conversation.agent_last_seen_at
|
||||
)
|
||||
).toEqual(conversationFixture.readMessages);
|
||||
});
|
||||
it('should return read messages if conversation is passed', () => {
|
||||
expect(
|
||||
conversationMixin.methods.unReadMessages(conversationFixture.conversation)
|
||||
conversationMixin.methods.unReadMessages(
|
||||
conversationFixture.conversation.messages,
|
||||
conversationFixture.conversation.agent_last_seen_at
|
||||
)
|
||||
).toEqual(conversationFixture.unReadMessages);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user