MessageFormatter.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /* eslint-disable
  2. camelcase,
  3. max-len,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS101: Remove unnecessary use of Array.from
  10. * DS102: Remove unnecessary code created because of implicit returns
  11. * DS207: Consider shorter variations of null checks
  12. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  13. */
  14. let MessageFormatter
  15. module.exports = MessageFormatter = {
  16. formatMessageForClientSide(message) {
  17. if (message._id != null) {
  18. message.id = message._id.toString()
  19. delete message._id
  20. }
  21. const formattedMessage = {
  22. id: message.id,
  23. content: message.content,
  24. timestamp: message.timestamp,
  25. user_id: message.user_id
  26. }
  27. if (message.edited_at != null) {
  28. formattedMessage.edited_at = message.edited_at
  29. }
  30. return formattedMessage
  31. },
  32. formatMessagesForClientSide(messages) {
  33. return Array.from(messages).map((message) =>
  34. this.formatMessageForClientSide(message)
  35. )
  36. },
  37. groupMessagesByThreads(rooms, messages) {
  38. let room, thread
  39. const rooms_by_id = {}
  40. for (room of Array.from(rooms)) {
  41. rooms_by_id[room._id.toString()] = room
  42. }
  43. const threads = {}
  44. const getThread = function (room) {
  45. const thread_id = room.thread_id.toString()
  46. if (threads[thread_id] != null) {
  47. return threads[thread_id]
  48. } else {
  49. const thread = { messages: [] }
  50. if (room.resolved != null) {
  51. thread.resolved = true
  52. thread.resolved_at = room.resolved.ts
  53. thread.resolved_by_user_id = room.resolved.user_id
  54. }
  55. threads[thread_id] = thread
  56. return thread
  57. }
  58. }
  59. for (const message of Array.from(messages)) {
  60. room = rooms_by_id[message.room_id.toString()]
  61. if (room != null) {
  62. thread = getThread(room)
  63. thread.messages.push(
  64. MessageFormatter.formatMessageForClientSide(message)
  65. )
  66. }
  67. }
  68. for (const thread_id in threads) {
  69. thread = threads[thread_id]
  70. thread.messages.sort((a, b) => a.timestamp - b.timestamp)
  71. }
  72. return threads
  73. }
  74. }