MessageFormatter.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. export function formatMessageForClientSide(message) {
  2. if (message._id) {
  3. message.id = message._id.toString()
  4. delete message._id
  5. }
  6. const formattedMessage = {
  7. id: message.id,
  8. content: message.content,
  9. timestamp: message.timestamp,
  10. user_id: message.user_id,
  11. }
  12. if (message.edited_at) {
  13. formattedMessage.edited_at = message.edited_at
  14. }
  15. return formattedMessage
  16. }
  17. export function formatMessagesForClientSide(messages) {
  18. return messages.map(message => formatMessageForClientSide(message))
  19. }
  20. export function groupMessagesByThreads(rooms, messages) {
  21. let room, thread
  22. const roomsById = {}
  23. for (room of rooms) {
  24. roomsById[room._id.toString()] = room
  25. }
  26. const threads = {}
  27. const getThread = function (room) {
  28. const threadId = room.thread_id.toString()
  29. if (threads[threadId]) {
  30. return threads[threadId]
  31. } else {
  32. const thread = { messages: [] }
  33. if (room.resolved) {
  34. thread.resolved = true
  35. thread.resolved_at = room.resolved.ts
  36. thread.resolved_by_user_id = room.resolved.user_id
  37. }
  38. threads[threadId] = thread
  39. return thread
  40. }
  41. }
  42. for (const message of messages) {
  43. room = roomsById[message.room_id.toString()]
  44. if (room) {
  45. thread = getThread(room)
  46. thread.messages.push(formatMessageForClientSide(message))
  47. }
  48. }
  49. for (const threadId in threads) {
  50. thread = threads[threadId]
  51. thread.messages.sort((a, b) => a.timestamp - b.timestamp)
  52. }
  53. return threads
  54. }