From d2e35a888d4a5c81aaaa3cdf39db6c1a811a1ee9 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Fri, 27 Sep 2024 00:25:45 +0800 Subject: [PATCH] refactor: MessageContent component --- .../src/pages/home/Messages/Message.tsx | 55 ++---------------- .../pages/home/Messages/MessageContent.tsx | 57 +++++++++++++++++++ 2 files changed, 61 insertions(+), 51 deletions(-) create mode 100644 src/renderer/src/pages/home/Messages/MessageContent.tsx diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index cabfc4b7..96220ab4 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -1,4 +1,3 @@ -import { SyncOutlined } from '@ant-design/icons' import UserPopup from '@renderer/components/Popups/UserPopup' import { FONT_FAMILY } from '@renderer/config/constant' import { APP_NAME, AppLogo, isLocalAi } from '@renderer/config/env' @@ -9,17 +8,16 @@ import { useAssistant } from '@renderer/hooks/useAssistant' import useAvatar from '@renderer/hooks/useAvatar' import { useModel } from '@renderer/hooks/useModel' import { useSettings } from '@renderer/hooks/useSettings' -import { Message, Model } from '@renderer/types' -import { firstLetter, getBriefInfo, removeLeadingEmoji } from '@renderer/utils' -import { Alert, Avatar, Divider } from 'antd' +import { Message } from '@renderer/types' +import { firstLetter, removeLeadingEmoji } from '@renderer/utils' +import { Avatar, Divider } from 'antd' import dayjs from 'dayjs' import { upperFirst } from 'lodash' import { FC, memo, useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' -import Markdown from '../Markdown/Markdown' -import MessageAttachments from './MessageAttachments' +import MessageContent from './MessageContent' import MessageMenubar from './MessageMenubar' import MessgeTokens from './MessageTokens' @@ -128,44 +126,6 @@ const MessageItem: FC = ({ message, index, lastMessage, onEditMessage, on ) } -const MessageContent: React.FC<{ - message: Message - model?: Model -}> = ({ message, model }) => { - const { t } = useTranslation() - - if (message.status === 'sending') { - return ( - - - - ) - } - - if (message.status === 'error') { - return ( - {t('error.chat.response')}} - description={} - type="error" - style={{ marginBottom: 15, padding: 10, fontSize: 12 }} - /> - ) - } - - if (message.type === '@' && model) { - const content = `[@${model.name}](#) ${getBriefInfo(message.content)}` - return - } - - return ( - <> - - - - ) -} - const MessageContainer = styled.div` display: flex; flex-direction: column; @@ -236,11 +196,4 @@ const MessageFooter = styled.div` border-top: 0.5px dashed var(--color-border); ` -const MessageContentLoading = styled.div` - display: flex; - flex-direction: row; - align-items: center; - height: 32px; -` - export default memo(MessageItem) diff --git a/src/renderer/src/pages/home/Messages/MessageContent.tsx b/src/renderer/src/pages/home/Messages/MessageContent.tsx new file mode 100644 index 00000000..0a26d013 --- /dev/null +++ b/src/renderer/src/pages/home/Messages/MessageContent.tsx @@ -0,0 +1,57 @@ +import { SyncOutlined } from '@ant-design/icons' +import { Message, Model } from '@renderer/types' +import { getBriefInfo } from '@renderer/utils' +import { Alert } from 'antd' +import React from 'react' +import { useTranslation } from 'react-i18next' +import styled from 'styled-components' + +import Markdown from '../Markdown/Markdown' +import MessageAttachments from './MessageAttachments' + +const MessageContent: React.FC<{ + message: Message + model?: Model +}> = ({ message, model }) => { + const { t } = useTranslation() + + if (message.status === 'sending') { + return ( + + + + ) + } + + if (message.status === 'error') { + return ( + {t('error.chat.response')}} + description={} + type="error" + style={{ marginBottom: 15, padding: 10, fontSize: 12 }} + /> + ) + } + + if (message.type === '@' && model) { + const content = `[@${model.name}](#) ${getBriefInfo(message.content)}` + return + } + + return ( + <> + + + + ) +} + +const MessageContentLoading = styled.div` + display: flex; + flex-direction: row; + align-items: center; + height: 32px; +` + +export default React.memo(MessageContent)