Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

large.tsx 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import MessageInput from '@/components/message-input';
  2. import MessageItem from '@/components/message-item';
  3. import { MessageType, SharedFrom } from '@/constants/chat';
  4. import { useSendButtonDisabled } from '@/pages/chat/hooks';
  5. import { Flex, Spin } from 'antd';
  6. import { forwardRef } from 'react';
  7. import {
  8. useCreateSharedConversationOnMount,
  9. useGetSharedChatSearchParams,
  10. useSelectCurrentSharedConversation,
  11. useSendSharedMessage,
  12. } from '../shared-hooks';
  13. import { buildMessageItemReference } from '../utils';
  14. import styles from './index.less';
  15. const ChatContainer = () => {
  16. const { conversationId } = useCreateSharedConversationOnMount();
  17. const {
  18. currentConversation: conversation,
  19. addNewestConversation,
  20. removeLatestMessage,
  21. ref,
  22. loading,
  23. setCurrentConversation,
  24. addNewestAnswer,
  25. } = useSelectCurrentSharedConversation(conversationId);
  26. const {
  27. handlePressEnter,
  28. handleInputChange,
  29. value,
  30. loading: sendLoading,
  31. } = useSendSharedMessage(
  32. conversation,
  33. addNewestConversation,
  34. removeLatestMessage,
  35. setCurrentConversation,
  36. addNewestAnswer,
  37. );
  38. const sendDisabled = useSendButtonDisabled(value);
  39. const { from } = useGetSharedChatSearchParams();
  40. return (
  41. <>
  42. <Flex flex={1} className={styles.chatContainer} vertical>
  43. <Flex flex={1} vertical className={styles.messageContainer}>
  44. <div>
  45. <Spin spinning={loading}>
  46. {conversation?.message?.map((message, i) => {
  47. return (
  48. <MessageItem
  49. key={message.id}
  50. item={message}
  51. nickname="You"
  52. reference={buildMessageItemReference(conversation, message)}
  53. loading={
  54. message.role === MessageType.Assistant &&
  55. sendLoading &&
  56. conversation?.message.length - 1 === i
  57. }
  58. index={i}
  59. ></MessageItem>
  60. );
  61. })}
  62. </Spin>
  63. </div>
  64. <div ref={ref} />
  65. </Flex>
  66. <MessageInput
  67. isShared
  68. value={value}
  69. disabled={false}
  70. sendDisabled={sendDisabled}
  71. conversationId={conversationId}
  72. onInputChange={handleInputChange}
  73. onPressEnter={handlePressEnter}
  74. sendLoading={sendLoading}
  75. uploadMethod="external_upload_and_parse"
  76. showUploadIcon={from === SharedFrom.Chat}
  77. ></MessageInput>
  78. </Flex>
  79. </>
  80. );
  81. };
  82. export default forwardRef(ChatContainer);