| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import MessageInput from '@/components/message-input';
- import MessageItem from '@/components/message-item';
- import { MessageType, SharedFrom } from '@/constants/chat';
- import { useSendButtonDisabled } from '@/pages/chat/hooks';
- import { Flex, Spin } from 'antd';
- import { forwardRef } from 'react';
- import {
- useCreateSharedConversationOnMount,
- useGetSharedChatSearchParams,
- useSelectCurrentSharedConversation,
- useSendSharedMessage,
- } from '../shared-hooks';
- import { buildMessageItemReference } from '../utils';
- import styles from './index.less';
-
- const ChatContainer = () => {
- const { conversationId } = useCreateSharedConversationOnMount();
- const {
- currentConversation: conversation,
- addNewestConversation,
- removeLatestMessage,
- ref,
- loading,
- setCurrentConversation,
- addNewestAnswer,
- } = useSelectCurrentSharedConversation(conversationId);
-
- const {
- handlePressEnter,
- handleInputChange,
- value,
- loading: sendLoading,
- } = useSendSharedMessage(
- conversation,
- addNewestConversation,
- removeLatestMessage,
- setCurrentConversation,
- addNewestAnswer,
- );
- const sendDisabled = useSendButtonDisabled(value);
- const { from } = useGetSharedChatSearchParams();
-
- 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
- key={message.id}
- item={message}
- nickname="You"
- reference={buildMessageItemReference(conversation, message)}
- loading={
- message.role === MessageType.Assistant &&
- sendLoading &&
- conversation?.message.length - 1 === i
- }
- index={i}
- ></MessageItem>
- );
- })}
- </Spin>
- </div>
- <div ref={ref} />
- </Flex>
-
- <MessageInput
- isShared
- value={value}
- disabled={false}
- sendDisabled={sendDisabled}
- conversationId={conversationId}
- onInputChange={handleInputChange}
- onPressEnter={handlePressEnter}
- sendLoading={sendLoading}
- uploadMethod="external_upload_and_parse"
- showUploadIcon={from === SharedFrom.Chat}
- ></MessageInput>
- </Flex>
- </>
- );
- };
-
- export default forwardRef(ChatContainer);
|