12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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) {
- state.threads = {
- ...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
- state.messages = {
- ...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
- }
|