123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import Vue from 'vue'
- export default {
- receiveAll (state, messages) {
- let latestMessage
- messages.forEach(message => {
- // create new thread if the thread doesn't exist
- if (!state.threads[message.threadID]) {
- createThread(state, message.threadID, message.threadName)
- }
- // mark the latest message
- if (!latestMessage || message.timestamp > latestMessage.timestamp) {
- latestMessage = message
- }
- // add message
- addMessage(state, message)
- })
- // set initial thread to the one with the latest message
- setCurrentThread(state, latestMessage.threadID)
- },
- receiveMessage (state, message) {
- addMessage(state, message)
- },
- switchThread (state, id) {
- setCurrentThread(state, id)
- }
- }
- function createThread (state, id, name) {
- Vue.set(state.threads, id, {
- id,
- name,
- messages: [],
- lastMessage: null
- })
- }
- function addMessage (state, message) {
- // add a `isRead` field before adding the message
- message.isRead = message.threadID === state.currentThreadID
- // add it to the thread it belongs to
- const thread = state.threads[message.threadID]
- if (!thread.messages.some(id => id === message.id)) {
- thread.messages.push(message.id)
- thread.lastMessage = message
- }
- // add it to the messages map
- Vue.set(state.messages, message.id, message)
- }
- function setCurrentThread (state, id) {
- state.currentThreadID = id
- if (!state.threads[id]) {
- debugger
- }
- // mark thread as read
- state.threads[id].lastMessage.isRead = true
- }
|