2023-03-22 10:23:36 -04:00
|
|
|
const even =
|
2023-03-22 18:26:29 -04:00
|
|
|
'w-full border-b border-black/10 dark:border-gray-900/50 text-gray-800 bg-white dark:text-gray-100 group dark:bg-gray-800 hover:bg-gray-100/25 hover:text-gray-700 dark:hover:bg-gray-900 dark:hover:text-gray-200';
|
2023-03-22 10:23:36 -04:00
|
|
|
const odd =
|
|
|
|
|
'w-full border-b border-black/10 bg-gray-50 dark:border-gray-900/50 text-gray-800 dark:text-gray-100 group bg-gray-100 dark:bg-[#444654] hover:bg-gray-100/40 hover:text-gray-700 dark:hover:bg-[#3b3d49] dark:hover:text-gray-200';
|
2023-03-18 23:18:36 -04:00
|
|
|
|
2023-03-18 18:40:53 -04:00
|
|
|
export default function buildTree(messages, groupAll = false) {
|
2023-03-28 22:39:27 +08:00
|
|
|
if (messages === null) return null;
|
|
|
|
|
|
2023-03-15 10:42:45 -04:00
|
|
|
let messageMap = {};
|
|
|
|
|
let rootMessages = [];
|
|
|
|
|
|
2023-03-29 02:29:15 +08:00
|
|
|
if (groupAll) {
|
|
|
|
|
return messages.map((m, idx) => ({ ...m, bg: idx % 2 === 0 ? even : odd }));
|
|
|
|
|
}
|
2023-03-18 18:40:53 -04:00
|
|
|
if (!groupAll) {
|
|
|
|
|
// Traverse the messages array and store each element in messageMap.
|
2023-03-22 10:23:36 -04:00
|
|
|
messages.forEach(message => {
|
2023-03-18 18:40:53 -04:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-29 02:29:15 +08:00
|
|
|
// // Group all messages into one tree
|
|
|
|
|
// let parentId = null;
|
|
|
|
|
// messages.forEach((message, i) => {
|
|
|
|
|
// messageMap[message.messageId] = { ...message, bg: i % 2 === 0 ? even : odd, children: [] };
|
|
|
|
|
// const currentMessage = messageMap[message.messageId];
|
|
|
|
|
// const parentMessage = messageMap[parentId];
|
|
|
|
|
// if (parentMessage) parentMessage.children.push(currentMessage);
|
|
|
|
|
// else rootMessages.push(currentMessage);
|
|
|
|
|
// parentId = message.messageId;
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
// return rootMessages;
|
2023-03-22 10:23:36 -04:00
|
|
|
|
2023-03-22 16:06:11 -04:00
|
|
|
// Group all messages by conversation, doesn't look great
|
2023-03-22 10:23:36 -04:00
|
|
|
// Traverse the messages array and store each element in messageMap.
|
2023-03-22 16:06:11 -04:00
|
|
|
// rootMessages = {};
|
|
|
|
|
// let parents = 0;
|
|
|
|
|
// messages.forEach(message => {
|
|
|
|
|
// if (message.conversationId in messageMap) {
|
|
|
|
|
// messageMap[message.conversationId].children.push(message);
|
|
|
|
|
// } else {
|
|
|
|
|
// messageMap[message.conversationId] = { ...message, bg: parents % 2 === 0 ? even : odd, children: [] };
|
|
|
|
|
// rootMessages.push(messageMap[message.conversationId]);
|
|
|
|
|
// parents++;
|
|
|
|
|
// }
|
|
|
|
|
// });
|
2023-03-15 10:42:45 -04:00
|
|
|
|
2023-03-22 16:06:11 -04:00
|
|
|
// // return Object.values(rootMessages);
|
|
|
|
|
// return rootMessages;
|
2023-03-18 18:40:53 -04:00
|
|
|
}
|