From aa578194c73df19e3fb5bb92a58980c0c3cadb03 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sun, 29 Sep 2024 22:56:48 +0800 Subject: [PATCH] fix: add markdown rendering input msg switcher #143 #142 --- src/renderer/src/i18n/en-us.json | 1 + src/renderer/src/i18n/zh-cn.json | 1 + src/renderer/src/i18n/zh-tw.json | 1 + src/renderer/src/pages/home/Markdown/Markdown.tsx | 6 ++++++ src/renderer/src/pages/home/Messages/Messages.tsx | 14 ++++++++++++-- src/renderer/src/pages/home/Settings.tsx | 13 ++++++++++++- src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/migrate.ts | 9 +++++++++ src/renderer/src/store/settings.ts | 8 ++++++-- 9 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/renderer/src/i18n/en-us.json b/src/renderer/src/i18n/en-us.json index c12cb261..59859da6 100644 --- a/src/renderer/src/i18n/en-us.json +++ b/src/renderer/src/i18n/en-us.json @@ -178,6 +178,7 @@ "messages.input.show_estimated_tokens": "Show estimated input tokens", "messages.input.send_shortcuts": "Send shortcuts", "messages.input.paste_long_text_as_file": "Paste long text as file", + "messages.markdown_rendering_input_message": "Markdown render input msg", "general.title": "General Settings", "general.user_name": "User Name", "general.user_name.placeholder": "Enter your name", diff --git a/src/renderer/src/i18n/zh-cn.json b/src/renderer/src/i18n/zh-cn.json index b5ba31ca..94eecb69 100644 --- a/src/renderer/src/i18n/zh-cn.json +++ b/src/renderer/src/i18n/zh-cn.json @@ -178,6 +178,7 @@ "messages.input.show_estimated_tokens": "状态显示", "messages.input.send_shortcuts": "发送快捷键", "messages.input.paste_long_text_as_file": "长文本粘贴为文件", + "messages.markdown_rendering_input_message": "Markdown 渲染输入消息", "general.title": "常规设置", "general.user_name": "用户名", "general.user_name.placeholder": "请输入用户名", diff --git a/src/renderer/src/i18n/zh-tw.json b/src/renderer/src/i18n/zh-tw.json index e83b2716..a361f797 100644 --- a/src/renderer/src/i18n/zh-tw.json +++ b/src/renderer/src/i18n/zh-tw.json @@ -178,6 +178,7 @@ "messages.input.show_estimated_tokens": "顯示預估輸入 Token 數", "messages.input.send_shortcuts": "發送快捷鍵", "messages.input.paste_long_text_as_file": "將長文本貼上為檔案", + "messages.markdown_rendering_input_message": "Markdown 渲染輸入訊息", "general.title": "一般設定", "general.user_name": "使用者名稱", "general.user_name.placeholder": "輸入您的名稱", diff --git a/src/renderer/src/pages/home/Markdown/Markdown.tsx b/src/renderer/src/pages/home/Markdown/Markdown.tsx index 18d757a0..93f7afd4 100644 --- a/src/renderer/src/pages/home/Markdown/Markdown.tsx +++ b/src/renderer/src/pages/home/Markdown/Markdown.tsx @@ -1,5 +1,6 @@ import 'katex/dist/katex.min.css' +import { useSettings } from '@renderer/hooks/useSettings' import { Message } from '@renderer/types' import { escapeBrackets } from '@renderer/utils/formula' import { isEmpty } from 'lodash' @@ -27,6 +28,7 @@ const components = { const Markdown: FC = ({ message }) => { const { t } = useTranslation() + const { renderInputMessageAsMarkdown } = useSettings() const messageContent = useMemo(() => { const empty = isEmpty(message.content) @@ -35,6 +37,10 @@ const Markdown: FC = ({ message }) => { return escapeBrackets(content) }, [message.content, message.status, t]) + if (message.role === 'user' && !renderInputMessageAsMarkdown) { + return

{messageContent}

+ } + return ( = ({ assistant, topic, setActiveTopic }) => { const [lastMessage, setLastMessage] = useState(null) const containerRef = useRef(null) const { updateTopic, addTopic } = useAssistant(assistant.id) + const { showTopics, topicPosition, showAssistants } = useSettings() + + const maxWidth = useMemo(() => { + const showRightTopics = showTopics && topicPosition === 'right' + const minusAssistantsWidth = showAssistants ? '- var(--assistants-width)' : '' + const minusRightTopicsWidth = showRightTopics ? '- var(--assistants-width)' : '' + return `calc(100vw - var(--sidebar-width) ${minusAssistantsWidth} ${minusRightTopicsWidth}` + }, [showAssistants, showTopics, topicPosition]) const onSendMessage = useCallback( async (message: Message) => { @@ -204,7 +213,7 @@ const Messages: FC = ({ assistant, topic, setActiveTopic }) => { }, [assistant, messages]) return ( - + {lastMessage && } {reverse([...messages]).map((message, index) => ( @@ -231,6 +240,7 @@ const Container = styled.div` padding: 10px 0; background-color: var(--color-background); padding-bottom: 20px; + overflow-x: hidden; ` export default Messages diff --git a/src/renderer/src/pages/home/Settings.tsx b/src/renderer/src/pages/home/Settings.tsx index 73df06a8..a765d3b7 100644 --- a/src/renderer/src/pages/home/Settings.tsx +++ b/src/renderer/src/pages/home/Settings.tsx @@ -9,6 +9,7 @@ import { setFontSize, setMessageFont, setPasteLongTextAsFile, + setRenderInputMessageAsMarkdown, setShowInputEstimatedTokens, setShowMessageDivider } from '@renderer/store/settings' @@ -41,7 +42,8 @@ const SettingsTab: FC = (props) => { showInputEstimatedTokens, sendMessageShortcut, setSendMessageShortcut, - pasteLongTextAsFile + pasteLongTextAsFile, + renderInputMessageAsMarkdown } = useSettings() const onUpdateAssistantSettings = (settings: Partial) => { @@ -242,6 +244,15 @@ const SettingsTab: FC = (props) => { /> + + {t('settings.messages.markdown_rendering_input_message')} + dispatch(setRenderInputMessageAsMarkdown(checked))} + /> + + {t('settings.messages.input.send_shortcuts')} diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index 5a8ed93d..91d91580 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -22,7 +22,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 26, + version: 27, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 49340332..f87b76b1 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -433,6 +433,15 @@ const migrateConfig = { ] } } + }, + '27': (state: RootState) => { + return { + ...state, + settings: { + ...state.settings, + renderInputMessageAsMarkdown: true + } + } } } diff --git a/src/renderer/src/store/settings.ts b/src/renderer/src/store/settings.ts index 3603ccb0..1720945e 100644 --- a/src/renderer/src/store/settings.ts +++ b/src/renderer/src/store/settings.ts @@ -20,7 +20,7 @@ export interface SettingsState { pasteLongTextAsFile: boolean clickAssistantToShowTopic: boolean manualUpdateCheck: boolean - + renderInputMessageAsMarkdown: boolean // webdav 配置 host, user, pass, path webdavHost: string webdavUser: string @@ -45,7 +45,7 @@ const initialState: SettingsState = { pasteLongTextAsFile: true, clickAssistantToShowTopic: false, manualUpdateCheck: false, - + renderInputMessageAsMarkdown: true, webdavHost: '', webdavUser: '', webdavPass: '', @@ -122,6 +122,9 @@ const settingsSlice = createSlice({ }, setWebdavPath: (state, action: PayloadAction) => { state.webdavPath = action.payload + }, + setRenderInputMessageAsMarkdown: (state, action: PayloadAction) => { + state.renderInputMessageAsMarkdown = action.payload } } }) @@ -143,6 +146,7 @@ export const { setWindowStyle, setTopicPosition, setPasteLongTextAsFile, + setRenderInputMessageAsMarkdown, setClickAssistantToShowTopic, setManualUpdateCheck, setWebdavHost,