Files
chatwoot/app/javascript/dashboard/mixins/conversations.js

69 lines
2.1 KiB
JavaScript

const getLastNonActivityMessage = (messageInStore, messageFromAPI) => {
// If both API value and store value for last non activity message
// are available, then return the latest one.
if (messageInStore && messageFromAPI) {
if (messageInStore.created_at >= messageFromAPI.created_at) {
return messageInStore;
}
return messageFromAPI;
}
// Otherwise, return whichever is available
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) {
let lastMessageIncludingActivity = m.messages.last();
const nonActivityMessages = m.messages.filter(
message => message.message_type !== 2
);
let lastNonActivityMessageInStore = nonActivityMessages.last();
let lastNonActivityMessageFromAPI = m.last_non_activity_message;
// If API value and store value for last non activity message
// is empty, then return the last activity message
if (!lastNonActivityMessageInStore && !lastNonActivityMessageFromAPI) {
return lastMessageIncludingActivity;
}
return getLastNonActivityMessage(
lastNonActivityMessageInStore,
lastNonActivityMessageFromAPI
);
},
readMessages(messages, agentLastSeenAt) {
return messages.filter(
message => message.created_at * 1000 <= agentLastSeenAt * 1000
);
},
unReadMessages(messages, agentLastSeenAt) {
return messages.filter(
message => message.created_at * 1000 > agentLastSeenAt * 1000
);
},
},
};