import Text from '../components/Text'; import { memo, useCallback, useEffect, useState } from 'react'; import { isEqual } from 'lodash'; import { AgentType, MessageItem, MessageTypeEnum } from '../type'; import { isMobile, updateMessageContainerScroll } from '../../utils/utils'; import styles from './style.module.less'; import AgentTip from '../components/AgentTip'; import classNames from 'classnames'; import { MsgDataType } from '../../common/type'; import ChatItem from '../../components/ChatItem'; type Props = { id: string; chatId: number; messageList: MessageItem[]; historyVisible: boolean; currentAgent?: AgentType; chatVisible?: boolean; isDeveloper?: boolean; integrateSystem?: string; onMsgDataLoaded: ( data: MsgDataType, questionId: string | number, question: string, valid: boolean ) => void; onSendMsg: (value: string) => void; }; const MessageContainer: React.FC = ({ id, chatId, messageList, historyVisible, currentAgent, chatVisible, isDeveloper, integrateSystem, onMsgDataLoaded, onSendMsg, }) => { const [triggerResize, setTriggerResize] = useState(false); const onResize = useCallback(() => { setTriggerResize(true); setTimeout(() => { setTriggerResize(false); }, 0); }, []); useEffect(() => { window.addEventListener('resize', onResize); return () => { window.removeEventListener('resize', onResize); }; }, []); useEffect(() => { onResize(); }, [historyVisible, chatVisible]); const messageContainerClass = classNames(styles.messageContainer, { [styles.mobile]: isMobile }); return (
{messageList.map((msgItem: MessageItem, index: number) => { const { id: msgId, modelId, agentId, type, msg, msgValue, identityMsg, msgData, score, filters, } = msgItem; return (
{type === MessageTypeEnum.TEXT && } {type === MessageTypeEnum.AGENT_LIST && ( )} {type === MessageTypeEnum.QUESTION && ( <> {identityMsg && } { onMsgDataLoaded(data, msgId, msgValue || msg || '', valid); }} onUpdateMessageScroll={updateMessageContainerScroll} onSendMsg={onSendMsg} /> )}
); })}
); }; function areEqual(prevProps: Props, nextProps: Props) { if ( prevProps.id === nextProps.id && isEqual(prevProps.messageList, nextProps.messageList) && prevProps.historyVisible === nextProps.historyVisible && prevProps.currentAgent === nextProps.currentAgent && prevProps.chatVisible === nextProps.chatVisible ) { return true; } return false; } export default memo(MessageContainer, areEqual);