WIP keep last_message updated

This commit is contained in:
eugenijm 2020-05-14 16:57:51 +03:00
parent 09da927def
commit c9870a9d43
2 changed files with 29 additions and 5 deletions

View file

@ -64,7 +64,7 @@ const chats = {
dispatch('addNewUsers', [chat.account]) dispatch('addNewUsers', [chat.account])
}, },
addChatMessages ({ commit }, value) { addChatMessages ({ commit }, value) {
commit('addChatMessages', value) commit('addChatMessages', { commit, ...value })
}, },
setChatFocused ({ commit }, value) { setChatFocused ({ commit }, value) {
commit('setChatFocused', value) commit('setChatFocused', value)
@ -90,7 +90,7 @@ const chats = {
}, },
deleteChatMessage ({ rootState, commit, dispatch }, value) { deleteChatMessage ({ rootState, commit, dispatch }, value) {
rootState.api.backendInteractor.deleteChatMessage(value) rootState.api.backendInteractor.deleteChatMessage(value)
commit('deleteChatMessage', value) commit('deleteChatMessage', { commit, ...value })
} }
}, },
mutations: { mutations: {
@ -152,16 +152,27 @@ const chats = {
setChatsLoading (state, { value }) { setChatsLoading (state, { value }) {
state.chats.loading = value state.chats.loading = value
}, },
addChatMessages (state, { chatId, messages }) { addChatMessages (state, { commit, chatId, messages }) {
const chatMessageService = state.openedChatMessageServices[chatId] const chatMessageService = state.openedChatMessageServices[chatId]
if (chatMessageService) { if (chatMessageService) {
chatService.add(chatMessageService, { messages: messages.map(parseChatMessage) }) chatService.add(chatMessageService, { messages: messages.map(parseChatMessage) })
commit('refreshLastMessage', { commit, chatId })
} }
}, },
deleteChatMessage (state, { chatId, messageId }) { refreshLastMessage (state, { chatId }) {
const chatMessageService = state.openedChatMessageServices[chatId]
if (chatMessageService) {
const chat = state.chatList.data.find(c => c.id === chatId)
if (chat) {
chat.lastMessage = chatMessageService.lastMessage
}
}
},
deleteChatMessage (state, { commit, chatId, messageId }) {
const chatMessageService = state.openedChatMessageServices[chatId] const chatMessageService = state.openedChatMessageServices[chatId]
if (chatMessageService) { if (chatMessageService) {
chatService.deleteMessage(chatMessageService, messageId) chatService.deleteMessage(chatMessageService, messageId)
commit('refreshLastMessage', { commit, chatId })
} }
}, },
resetChatNewMessageCount (state, _value) { resetChatNewMessageCount (state, _value) {

View file

@ -7,7 +7,8 @@ const empty = (chatId) => {
newMessageCount: 0, newMessageCount: 0,
lastSeenTimestamp: 0, lastSeenTimestamp: 0,
chatId: chatId, chatId: chatId,
minId: undefined minId: undefined,
lastMessage: undefined
} }
} }
@ -15,6 +16,14 @@ const deleteMessage = (storage, messageId) => {
if (!storage) { return } if (!storage) { return }
storage.messages = storage.messages.filter(m => m.id !== messageId) storage.messages = storage.messages.filter(m => m.id !== messageId)
delete storage.idIndex[messageId] delete storage.idIndex[messageId]
if (storage.lastMessage && (storage.lastMessage.id === messageId)) {
storage.lastMessage = _.maxBy(storage.messages, 'id')
}
if (storage.minId === messageId) {
storage.minId = _.minBy(storage.messages, 'id')
}
} }
const add = (storage, { messages: newMessages }) => { const add = (storage, { messages: newMessages }) => {
@ -29,6 +38,10 @@ const add = (storage, { messages: newMessages }) => {
storage.minId = message.id storage.minId = message.id
} }
if (!storage.lastMessage || message.id > storage.lastMessage.id) {
storage.lastMessage = message
}
if (!storage.idIndex[message.id]) { if (!storage.idIndex[message.id]) {
if (storage.lastSeenTimestamp < message.created_at) { if (storage.lastSeenTimestamp < message.created_at) {
storage.newMessageCount++ storage.newMessageCount++