LibreChat/client/src/utils/buildTree.ts
Marco Beretta 911babd3e0
🖌️ style: Update Light/Dark UI Themes (#1754)
* BIG UI UPDATE

* fix: search bar, dialog template, new chat icon, convo icon and delete/rename button

* moved some color config and a lot of files

* small text fixes and tailwind config refactor

* Update localization and UI styles

* Update styles and add user-select:none to Tooltip component

* Update mobile.css styles for navigation mask and background color

* Update component imports and styles

* Update DeleteButton imports and references

* Update UI components

* Update tooltip delay duration

* Fix styling and update text in various components

* fixed assistant style

* minor style fixes

* revert: removed CreationHeader & CreationPanel

* style: match new styling for SidePanel

* style: match bg-gray-800 to ChatGPT (#212121)

* style: remove slate for gray where applicable to match new light theme

---------

Co-authored-by: Danny Avila <messagedaniel@protonmail.com>
2024-03-06 12:05:43 -05:00

78 lines
2.7 KiB
TypeScript

import { TFile, TMessage } from 'librechat-data-provider';
const even =
'w-full border-b border-black/10 dark:border-gray-800/50 text-gray-800 bg-white dark:text-gray-200 group dark:bg-gray-800 hover:bg-gray-200/25 hover:text-gray-700 dark:hover:bg-gray-800 dark:hover:text-gray-200';
const odd =
'w-full border-b border-black/10 bg-gray-50 dark:border-gray-800/50 text-gray-800 dark:text-gray-200 group bg-gray-200 dark:bg-gray-700 hover:bg-gray-200/40 hover:text-gray-700 dark:hover:bg-gray-800 dark:hover:text-gray-200';
export default function buildTree({
messages,
fileMap,
groupAll = false,
}: {
messages: TMessage[] | null;
fileMap?: Record<string, TFile>;
groupAll?: boolean;
}) {
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) {
// Traverse the messages array and store each element in messageMap.
messages.forEach((message) => {
messageMap[message.messageId] = { ...message, children: [] };
if (message.files && fileMap) {
messageMap[message.messageId].files = message.files.map(
(file) => fileMap[file.file_id] ?? file,
);
}
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 = 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;
// Group all messages by conversation, doesn't look great
// Traverse the messages array and store each element in messageMap.
// 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++;
// }
// });
// // return Object.values(rootMessages);
// return rootMessages;
}