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, getIsCreating: _state => _state.uiFlags.isCreating, 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, getMessageCount: _state => { return Object.values(_state.conversations).length; }, 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; }, };