import Text from './components/Text'; import { memo, useCallback, useEffect } from 'react'; import { isEqual } from 'lodash'; import styles from './style.less'; import { connect, Dispatch } from 'umi'; import { ChatItem } from 'supersonic-chat-sdk'; import type { MsgDataType } from 'supersonic-chat-sdk'; import { MessageItem, MessageTypeEnum } from './type'; type Props = { id: string; chatId: number; messageList: MessageItem[]; dispatch: Dispatch; onClickMessageContainer: () => void; onMsgDataLoaded: (data: MsgDataType) => void; onSelectSuggestion: (value: string) => void; onUpdateMessageScroll: () => void; }; const MessageContainer: React.FC = ({ id, chatId, messageList, dispatch, onClickMessageContainer, onMsgDataLoaded, onSelectSuggestion, onUpdateMessageScroll, }) => { const onWindowResize = useCallback(() => { dispatch({ type: 'windowResize/setTriggerResize', payload: true, }); setTimeout(() => { dispatch({ type: 'windowResize/setTriggerResize', payload: false, }); }, 0); }, []); useEffect(() => { window.addEventListener('resize', onWindowResize); return () => { window.removeEventListener('resize', onWindowResize); }; }, []); return (
{messageList.map((msgItem: MessageItem, index: number) => { return (
{msgItem.type === MessageTypeEnum.TEXT && } {msgItem.type === MessageTypeEnum.QUESTION && ( <> )}
); })}
); }; function areEqual(prevProps: Props, nextProps: Props) { if (prevProps.id === nextProps.id && isEqual(prevProps.messageList, nextProps.messageList)) { return true; } return false; } export default connect()(memo(MessageContainer, areEqual));