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); | |