diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index 41906be5..54c0bc0a 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -175,6 +175,8 @@ const resources = { 'general.restore.button': 'Restore', 'general.reset.title': 'Data Reset', 'general.reset.button': 'Reset', + 'advanced.title': 'Advanced Settings', + 'advanced.click_assistant_switch_to_topics': 'Auto switch to topic', 'provider.api_key': 'API Key', 'provider.check': 'Check', 'provider.get_api_key': 'Get API Key', @@ -445,6 +447,8 @@ const resources = { 'general.restore.button': '恢复', 'general.reset.title': '重置数据', 'general.reset.button': '重置', + 'advanced.title': '高级设置', + 'advanced.click_assistant_switch_to_topics': '点击助手切换到话题', 'provider.api_key': 'API 密钥', 'provider.check': '检查', 'provider.get_api_key': '点击这里获取密钥', diff --git a/src/renderer/src/pages/home/Assistants.tsx b/src/renderer/src/pages/home/Assistants.tsx index 002c9b2e..12e9e0c8 100644 --- a/src/renderer/src/pages/home/Assistants.tsx +++ b/src/renderer/src/pages/home/Assistants.tsx @@ -3,6 +3,7 @@ import DragableList from '@renderer/components/DragableList' import CopyIcon from '@renderer/components/Icons/CopyIcon' import AssistantSettingPopup from '@renderer/components/Popups/AssistantSettingPopup' import { useAssistant, useAssistants } from '@renderer/hooks/useAssistant' +import { useSettings } from '@renderer/hooks/useSettings' import { getDefaultTopic, syncAsistantToAgent } from '@renderer/services/assistant' import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import { useAppDispatch, useAppSelector } from '@renderer/store' @@ -27,6 +28,7 @@ const Assistants: FC = ({ activeAssistant, setActiveAssistant, onCreateAs const generating = useAppSelector((state) => state.runtime.generating) const [search, setSearch] = useState('') const { updateAssistant, removeAllTopics } = useAssistant(activeAssistant.id) + const { clickAssistantToShowTopic, topicPosition } = useSettings() const searchRef = useRef(null) const { t } = useTranslation() const dispatch = useAppDispatch() @@ -103,9 +105,13 @@ const Assistants: FC = ({ activeAssistant, setActiveAssistant, onCreateAs }) } + if (topicPosition === 'left' && clickAssistantToShowTopic) { + EventEmitter.emit(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR) + } + setActiveAssistant(assistant) }, - [generating, setActiveAssistant, t] + [clickAssistantToShowTopic, generating, setActiveAssistant, t, topicPosition] ) const list = assistants.filter((assistant) => assistant.name?.toLowerCase().includes(search.toLowerCase().trim())) diff --git a/src/renderer/src/pages/home/Messages/Messages.tsx b/src/renderer/src/pages/home/Messages/Messages.tsx index e6826d4f..1284cd66 100644 --- a/src/renderer/src/pages/home/Messages/Messages.tsx +++ b/src/renderer/src/pages/home/Messages/Messages.tsx @@ -32,7 +32,13 @@ const Messages: FC = ({ assistant, topic, setActiveTopic }) => { const onSendMessage = useCallback( async (message: Message) => { if (message.role === 'user') { - message.usage = await estimateMessageUsage(message) + estimateMessageUsage(message).then((usage) => { + setMessages((prev) => { + const _messages = prev.map((m) => (m.id === message.id ? { ...m, usage } : m)) + db.topics.update(topic.id, { messages: _messages }) + return _messages + }) + }) } const _messages = [...messages, message] setMessages(_messages) diff --git a/src/renderer/src/pages/home/Topics.tsx b/src/renderer/src/pages/home/Topics.tsx index afea8824..167c0e4c 100644 --- a/src/renderer/src/pages/home/Topics.tsx +++ b/src/renderer/src/pages/home/Topics.tsx @@ -154,7 +154,7 @@ const Container = styled.div` flex-direction: column; padding-top: 10px; overflow-y: scroll; - max-height: calc(100vh - var(--navbar-height) - 50px); + max-height: calc(100vh - var(--navbar-height) - 140px); ` const TopicListItem = styled.div` diff --git a/src/renderer/src/pages/settings/GeneralSettings.tsx b/src/renderer/src/pages/settings/GeneralSettings.tsx index 86bf50ae..9e18006a 100644 --- a/src/renderer/src/pages/settings/GeneralSettings.tsx +++ b/src/renderer/src/pages/settings/GeneralSettings.tsx @@ -5,11 +5,11 @@ import { useSettings } from '@renderer/hooks/useSettings' import i18n from '@renderer/i18n' import { backup, reset, restore } from '@renderer/services/backup' import { useAppDispatch } from '@renderer/store' -import { setLanguage, setUserName } from '@renderer/store/settings' +import { setClickAssistantToShowTopic, setLanguage } from '@renderer/store/settings' import { setProxyUrl as _setProxyUrl } from '@renderer/store/settings' import { ThemeMode } from '@renderer/types' import { isValidProxyUrl } from '@renderer/utils' -import { Button, Input, Select } from 'antd' +import { Button, Input, Select, Switch } from 'antd' import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -19,10 +19,10 @@ const GeneralSettings: FC = () => { const { language, proxyUrl: storeProxyUrl, - userName, theme, windowStyle, topicPosition, + clickAssistantToShowTopic, setTheme, setWindowStyle, setTopicPosition @@ -106,17 +106,18 @@ const GeneralSettings: FC = () => { /> - - {t('settings.general.user_name')} - dispatch(setUserName(e.target.value))} - style={{ width: 180 }} - maxLength={30} - /> - - + {topicPosition === 'left' && ( + <> + + {t('settings.advanced.click_assistant_switch_to_topics')} + dispatch(setClickAssistantToShowTopic(checked))} + /> + + + + )} {t('settings.proxy.title')} ) => { state.pasteLongTextAsFile = action.payload + }, + setClickAssistantToShowTopic: (state, action: PayloadAction) => { + state.clickAssistantToShowTopic = action.payload } } }) @@ -109,7 +114,8 @@ export const { setFontSize, setWindowStyle, setTopicPosition, - setPasteLongTextAsFile + setPasteLongTextAsFile, + setClickAssistantToShowTopic } = settingsSlice.actions export default settingsSlice.reducer