| import { useEffect } from 'react'; |
| import { useRecoilState } from 'recoil'; |
| import type { TMessage } from 'librechat-data-provider'; |
| import type { TMessageProps } from '~/common'; |
| |
| import Message from './Message'; |
| import store from '~/store'; |
|
|
| export default function MultiMessage({ |
| // messageId is used recursively here |
| messageId, |
| messagesTree, |
| currentEditId, |
| setCurrentEditId, |
| }: TMessageProps) { |
| const [siblingIdx, setSiblingIdx] = useRecoilState(store.messagesSiblingIdxFamily(messageId)); |
|
|
| const setSiblingIdxRev = (value: number) => { |
| setSiblingIdx((messagesTree?.length ?? 0) - value - 1); |
| }; |
|
|
| useEffect(() => { |
| |
| setSiblingIdx(0); |
| |
| }, [messagesTree?.length]); |
|
|
| useEffect(() => { |
| if (messagesTree?.length != null && siblingIdx >= messagesTree.length) { |
| setSiblingIdx(0); |
| } |
| }, [siblingIdx, messagesTree?.length, setSiblingIdx]); |
|
|
| if (!(messagesTree && messagesTree.length)) { |
| return null; |
| } |
|
|
| const message = messagesTree[messagesTree.length - siblingIdx - 1] as TMessage | null; |
| if (!message) { |
| return null; |
| } |
|
|
| return ( |
| <Message |
| key={message.messageId} |
| message={message} |
| currentEditId={currentEditId} |
| setCurrentEditId={setCurrentEditId} |
| siblingIdx={messagesTree.length - siblingIdx - 1} |
| siblingCount={messagesTree.length} |
| setSiblingIdx={setSiblingIdxRev} |
| /> |
| ); |
| } |
|
|