balibabu
Fix: In order to distinguish the keys of a pair of messages, add a prefix to the id when rendering the message. #4409 (#4451)
2052ec7
| import MessageInput from '@/components/message-input'; | |
| import MessageItem from '@/components/message-item'; | |
| import { useClickDrawer } from '@/components/pdf-drawer/hooks'; | |
| import { MessageType, SharedFrom } from '@/constants/chat'; | |
| import { useSendButtonDisabled } from '@/pages/chat/hooks'; | |
| import { Flex, Spin } from 'antd'; | |
| import { forwardRef, useMemo } from 'react'; | |
| import { | |
| useGetSharedChatSearchParams, | |
| useSendSharedMessage, | |
| } from '../shared-hooks'; | |
| import { buildMessageItemReference } from '../utils'; | |
| import PdfDrawer from '@/components/pdf-drawer'; | |
| import { useFetchNextConversationSSE } from '@/hooks/chat-hooks'; | |
| import { useFetchFlowSSE } from '@/hooks/flow-hooks'; | |
| import { buildMessageUuidWithRole } from '@/utils/chat'; | |
| import styles from './index.less'; | |
| const ChatContainer = () => { | |
| const { sharedId: conversationId, from } = useGetSharedChatSearchParams(); | |
| const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } = | |
| useClickDrawer(); | |
| const { | |
| handlePressEnter, | |
| handleInputChange, | |
| value, | |
| sendLoading, | |
| loading, | |
| ref, | |
| derivedMessages, | |
| hasError, | |
| } = useSendSharedMessage(); | |
| const sendDisabled = useSendButtonDisabled(value); | |
| const useFetchAvatar = useMemo(() => { | |
| return from === SharedFrom.Agent | |
| ? useFetchFlowSSE | |
| : useFetchNextConversationSSE; | |
| }, [from]); | |
| const { data: avatarData } = useFetchAvatar(); | |
| if (!conversationId) { | |
| return <div>empty</div>; | |
| } | |
| return ( | |
| <> | |
| <Flex flex={1} className={styles.chatContainer} vertical> | |
| <Flex flex={1} vertical className={styles.messageContainer}> | |
| <div> | |
| <Spin spinning={loading}> | |
| {derivedMessages?.map((message, i) => { | |
| return ( | |
| <MessageItem | |
| key={buildMessageUuidWithRole(message)} | |
| avatardialog={avatarData?.avatar} | |
| item={message} | |
| nickname="You" | |
| reference={buildMessageItemReference( | |
| { | |
| message: derivedMessages, | |
| reference: [], | |
| }, | |
| message, | |
| )} | |
| loading={ | |
| message.role === MessageType.Assistant && | |
| sendLoading && | |
| derivedMessages?.length - 1 === i | |
| } | |
| index={i} | |
| clickDocumentButton={clickDocumentButton} | |
| showLikeButton={false} | |
| showLoudspeaker={false} | |
| ></MessageItem> | |
| ); | |
| })} | |
| </Spin> | |
| </div> | |
| <div ref={ref} /> | |
| </Flex> | |
| <MessageInput | |
| isShared | |
| value={value} | |
| disabled={hasError} | |
| sendDisabled={sendDisabled} | |
| conversationId={conversationId} | |
| onInputChange={handleInputChange} | |
| onPressEnter={handlePressEnter} | |
| sendLoading={sendLoading} | |
| uploadMethod="external_upload_and_parse" | |
| showUploadIcon={false} | |
| ></MessageInput> | |
| </Flex> | |
| {visible && ( | |
| <PdfDrawer | |
| visible={visible} | |
| hideModal={hideModal} | |
| documentId={documentId} | |
| chunk={selectedChunk} | |
| ></PdfDrawer> | |
| )} | |
| </> | |
| ); | |
| }; | |
| export default forwardRef(ChatContainer); | |