mutations.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. export default {
  2. receiveAll (state, messages) {
  3. let latestMessage
  4. messages.forEach(message => {
  5. // create new thread if the thread doesn't exist
  6. if (!state.threads[message.threadID]) {
  7. createThread(state, message.threadID, message.threadName)
  8. }
  9. // mark the latest message
  10. if (!latestMessage || message.timestamp > latestMessage.timestamp) {
  11. latestMessage = message
  12. }
  13. // add message
  14. addMessage(state, message)
  15. })
  16. // set initial thread to the one with the latest message
  17. setCurrentThread(state, latestMessage.threadID)
  18. },
  19. receiveMessage (state, message) {
  20. addMessage(state, message)
  21. },
  22. switchThread (state, id) {
  23. setCurrentThread(state, id)
  24. }
  25. }
  26. function createThread (state, id, name) {
  27. state.threads = {
  28. ...state.threads,
  29. [id]: {
  30. id,
  31. name,
  32. messages: [],
  33. lastMessage: null
  34. }
  35. }
  36. }
  37. function addMessage (state, message) {
  38. // add a `isRead` field before adding the message
  39. message.isRead = message.threadID === state.currentThreadID
  40. // add it to the thread it belongs to
  41. const thread = state.threads[message.threadID]
  42. if (!thread.messages.some(id => id === message.id)) {
  43. thread.messages.push(message.id)
  44. thread.lastMessage = message
  45. }
  46. // add it to the messages map
  47. state.messages = {
  48. ...state.messages,
  49. [message.id]: message
  50. }
  51. }
  52. function setCurrentThread (state, id) {
  53. state.currentThreadID = id
  54. if (!state.threads[id]) {
  55. debugger
  56. }
  57. // mark thread as read
  58. state.threads[id].lastMessage.isRead = true
  59. }