2021-01-17 17:14:03 +00:00
|
|
|
import { MESSAGE_TYPE } from 'widget/helpers/constants';
|
|
|
|
import groupBy from 'lodash.groupby';
|
|
|
|
import { groupConversationBySender } from './helpers';
|
|
|
|
import { formatUnixDate } from 'shared/helpers/DateHelper';
|
|
|
|
|
|
|
|
export const getters = {
|
|
|
|
getAllMessagesLoaded: _state => _state.uiFlags.allMessagesLoaded,
|
2021-02-15 18:44:13 +00:00
|
|
|
getIsCreating: _state => _state.uiFlags.isCreating,
|
2021-01-17 17:14:03 +00:00
|
|
|
getIsAgentTyping: _state => _state.uiFlags.isAgentTyping,
|
|
|
|
getConversation: _state => _state.conversations,
|
|
|
|
getConversationSize: _state => Object.keys(_state.conversations).length,
|
|
|
|
getEarliestMessage: _state => {
|
|
|
|
const conversation = Object.values(_state.conversations);
|
|
|
|
if (conversation.length) {
|
|
|
|
return conversation[0];
|
|
|
|
}
|
|
|
|
return {};
|
|
|
|
},
|
|
|
|
getGroupedConversation: _state => {
|
|
|
|
const conversationGroupedByDate = groupBy(
|
|
|
|
Object.values(_state.conversations),
|
|
|
|
message => formatUnixDate(message.created_at)
|
|
|
|
);
|
|
|
|
return Object.keys(conversationGroupedByDate).map(date => ({
|
|
|
|
date,
|
|
|
|
messages: groupConversationBySender(conversationGroupedByDate[date]),
|
|
|
|
}));
|
|
|
|
},
|
|
|
|
getIsFetchingList: _state => _state.uiFlags.isFetchingList,
|
|
|
|
getUnreadMessageCount: _state => {
|
|
|
|
const { userLastSeenAt } = _state.meta;
|
|
|
|
const count = Object.values(_state.conversations).filter(chat => {
|
|
|
|
const { created_at: createdAt, message_type: messageType } = chat;
|
|
|
|
const isOutGoing = messageType === MESSAGE_TYPE.OUTGOING;
|
|
|
|
const hasNotSeen = userLastSeenAt
|
|
|
|
? createdAt * 1000 > userLastSeenAt * 1000
|
|
|
|
: true;
|
|
|
|
return hasNotSeen && isOutGoing;
|
|
|
|
}).length;
|
|
|
|
return count;
|
|
|
|
},
|
|
|
|
getUnreadTextMessages: (_state, _getters) => {
|
|
|
|
const unreadCount = _getters.getUnreadMessageCount;
|
|
|
|
const allMessages = [...Object.values(_state.conversations)];
|
|
|
|
const unreadAgentMessages = allMessages.filter(message => {
|
|
|
|
const { message_type: messageType } = message;
|
|
|
|
return messageType === MESSAGE_TYPE.OUTGOING;
|
|
|
|
});
|
|
|
|
const maxUnreadCount = Math.min(unreadCount, 3);
|
|
|
|
const allUnreadMessages = unreadAgentMessages.splice(-maxUnreadCount);
|
|
|
|
return allUnreadMessages;
|
|
|
|
},
|
|
|
|
};
|