| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import MessageItem from '@/components/message-item';
- import DocumentPreviewer from '@/components/pdf-previewer';
- import { MessageType } from '@/constants/chat';
- import { Drawer, Flex, Spin } from 'antd';
- import {
- useClickDrawer,
- useCreateConversationBeforeUploadDocument,
- useFetchConversationOnMount,
- useGetFileIcon,
- useGetSendButtonDisabled,
- useSendButtonDisabled,
- useSendMessage,
- } from '../hooks';
- import { buildMessageItemReference } from '../utils';
-
- import MessageInput from '@/components/message-input';
- import { useFetchUserInfo } from '@/hooks/user-setting-hooks';
- import { memo } from 'react';
- import styles from './index.less';
-
- const ChatContainer = () => {
- const {
- ref,
- currentConversation: conversation,
- addNewestConversation,
- removeLatestMessage,
- addNewestAnswer,
- conversationId,
- loading,
- } = useFetchConversationOnMount();
- const {
- handleInputChange,
- handlePressEnter,
- value,
- loading: sendLoading,
- } = useSendMessage(
- conversation,
- addNewestConversation,
- removeLatestMessage,
- addNewestAnswer,
- );
- const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } =
- useClickDrawer();
- const disabled = useGetSendButtonDisabled();
- const sendDisabled = useSendButtonDisabled(value);
- useGetFileIcon();
- const { data: userInfo } = useFetchUserInfo();
- const { createConversationBeforeUploadDocument } =
- useCreateConversationBeforeUploadDocument();
-
- return (
- <>
- <Flex flex={1} className={styles.chatContainer} vertical>
- <Flex flex={1} vertical className={styles.messageContainer}>
- <div>
- <Spin spinning={loading}>
- {conversation?.message?.map((message, i) => {
- return (
- <MessageItem
- loading={
- message.role === MessageType.Assistant &&
- sendLoading &&
- conversation?.message.length - 1 === i
- }
- key={message.id}
- item={message}
- nickname={userInfo.nickname}
- avatar={userInfo.avatar}
- reference={buildMessageItemReference(conversation, message)}
- clickDocumentButton={clickDocumentButton}
- index={i}
- ></MessageItem>
- );
- })}
- </Spin>
- </div>
- <div ref={ref} />
- </Flex>
- <MessageInput
- disabled={disabled}
- sendDisabled={sendDisabled}
- sendLoading={sendLoading}
- value={value}
- onInputChange={handleInputChange}
- onPressEnter={handlePressEnter}
- conversationId={conversationId}
- createConversationBeforeUploadDocument={
- createConversationBeforeUploadDocument
- }
- ></MessageInput>
- </Flex>
- <Drawer
- title="Document Previewer"
- onClose={hideModal}
- open={visible}
- width={'50vw'}
- >
- <DocumentPreviewer
- documentId={documentId}
- chunk={selectedChunk}
- visible={visible}
- ></DocumentPreviewer>
- </Drawer>
- </>
- );
- };
-
- export default memo(ChatContainer);
|