2023-03-18 18:40:53 -04:00
|
|
|
export default function buildTree(messages, groupAll = false) {
|
2023-03-15 10:42:45 -04:00
|
|
|
let messageMap = {};
|
|
|
|
|
let rootMessages = [];
|
|
|
|
|
|
2023-03-18 18:40:53 -04:00
|
|
|
if (!groupAll) {
|
|
|
|
|
// Traverse the messages array and store each element in messageMap.
|
|
|
|
|
messages.forEach((message) => {
|
|
|
|
|
messageMap[message.messageId] = { ...message, children: [] };
|
2023-03-15 10:42:45 -04:00
|
|
|
|
2023-03-18 18:40:53 -04:00
|
|
|
const parentMessage = messageMap[message.parentMessageId];
|
|
|
|
|
if (parentMessage) parentMessage.children.push(messageMap[message.messageId]);
|
|
|
|
|
else rootMessages.push(messageMap[message.messageId]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return rootMessages;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Group all messages into one tree
|
|
|
|
|
let parentId = messages[0].messageId;
|
|
|
|
|
messages.forEach((message, i) => {
|
|
|
|
|
if (i === 0) {
|
|
|
|
|
messageMap[parentId] = { ...message, children: [] };
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
messageMap[parentId].children.push({ ...message, children: [] });
|
2023-03-15 10:42:45 -04:00
|
|
|
});
|
|
|
|
|
|
2023-03-18 18:40:53 -04:00
|
|
|
return [messageMap[parentId]];
|
|
|
|
|
}
|