|
import { TMessage } from 'librechat-data-provider'; |
|
|
|
const even = |
|
'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'; |
|
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-gray-1000 hover:bg-gray-100/40 hover:text-gray-700 dark:hover:bg-[#3b3d49] dark:hover:text-gray-200'; |
|
|
|
export default function buildTree(messages: TMessage[] | null, groupAll = false) { |
|
if (messages === null) { |
|
return null; |
|
} |
|
|
|
const messageMap: Record<string, TMessage & { children: TMessage[] }> = {}; |
|
const rootMessages: TMessage[] = []; |
|
|
|
if (groupAll) { |
|
return messages.map((m, idx) => ({ ...m, bg: idx % 2 === 0 ? even : odd })); |
|
} |
|
if (!groupAll) { |
|
|
|
messages.forEach((message) => { |
|
messageMap[message.messageId] = { ...message, children: [] }; |
|
|
|
const parentMessage = messageMap[message.parentMessageId ?? '']; |
|
if (parentMessage) { |
|
parentMessage.children.push(messageMap[message.messageId]); |
|
} else { |
|
rootMessages.push(messageMap[message.messageId]); |
|
} |
|
}); |
|
|
|
return rootMessages; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|