|
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 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={message.id} |
|
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); |
|
|