import { FileUploadProps } from '@/components/file-upload'; import { NextMessageInput } from '@/components/message-input/next'; import MessageItem from '@/components/next-message-item'; import PdfDrawer from '@/components/pdf-drawer'; import { useClickDrawer } from '@/components/pdf-drawer/hooks'; import { MessageType } from '@/constants/chat'; import { useFetchExternalAgentInputs, useUploadCanvasFileWithProgress, } from '@/hooks/use-agent-request'; import { cn } from '@/lib/utils'; import i18n from '@/locales/config'; import { useCacheChatLog } from '@/pages/agent/hooks/use-cache-chat-log'; import { useSendButtonDisabled } from '@/pages/chat/hooks'; import { buildMessageUuidWithRole } from '@/utils/chat'; import { isEmpty } from 'lodash'; import React, { forwardRef, useCallback } from 'react'; import { useGetSharedChatSearchParams, useSendNextSharedMessage, } from '../hooks/use-send-shared-message'; import { ParameterDialog } from './parameter-dialog'; const ChatContainer = () => { const { sharedId: conversationId, from, locale, visibleAvatar, } = useGetSharedChatSearchParams(); const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } = useClickDrawer(); const { uploadCanvasFile, loading } = useUploadCanvasFileWithProgress(conversationId); const { addEventList, setCurrentMessageId, currentEventListWithoutMessageById, } = useCacheChatLog(); const { handlePressEnter, handleInputChange, value, sendLoading, ref, derivedMessages, hasError, stopOutputMessage, findReferenceByMessageId, appendUploadResponseList, parameterDialogVisible, hideParameterDialog, showParameterDialog, ok, } = useSendNextSharedMessage(addEventList); const { data } = useFetchExternalAgentInputs(); const sendDisabled = useSendButtonDisabled(value); // useEffect(() => { // if (derivedMessages.length) { // const derivedMessagesFilter = derivedMessages.filter( // (message) => message.role === MessageType.Assistant, // ); // if (derivedMessagesFilter.length) { // const message = derivedMessagesFilter[derivedMessagesFilter.length - 1]; // setCurrentMessageId(message.id); // } // } // }, [derivedMessages, setCurrentMessageId]); const handleUploadFile: NonNullable = useCallback( async (files, options) => { const ret = await uploadCanvasFile({ files, options }); appendUploadResponseList(ret.data, files); }, [appendUploadResponseList, uploadCanvasFile], ); React.useEffect(() => { if (locale && i18n.language !== locale) { i18n.changeLanguage(locale); } }, [locale, visibleAvatar]); React.useEffect(() => { if (!isEmpty(data)) { showParameterDialog(); } }, [data, showParameterDialog]); if (!conversationId) { return
empty
; } return (
{derivedMessages?.map((message, i) => { return ( ); })}
{visible && ( )} {parameterDialogVisible && ( )}
); }; export default forwardRef(ChatContainer);