diff --git a/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx b/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx index 13e5fa4443..1fbf451f73 100644 --- a/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx +++ b/src/renderer/src/windows/selection/action/components/ActionTranslate.tsx @@ -9,7 +9,7 @@ import { useSettings } from '@renderer/hooks/useSettings' import useTranslate from '@renderer/hooks/useTranslate' import MessageContent from '@renderer/pages/home/Messages/MessageContent' import { getDefaultTopic, getDefaultTranslateAssistant } from '@renderer/services/AssistantService' -import { Assistant, Topic, TranslateLanguage, TranslateLanguageCode } from '@renderer/types' +import { Topic, TranslateLanguage, TranslateLanguageCode } from '@renderer/types' import type { ActionItem } from '@renderer/types/selectionTypes' import { runAsyncFunction } from '@renderer/utils' import { abortCompletion } from '@renderer/utils/abortController' @@ -31,7 +31,7 @@ const logger = loggerService.withContext('ActionTranslate') const ActionTranslate: FC = ({ action, scrollToBottom }) => { const { t } = useTranslation() - const { translateModelPrompt, language } = useSettings() + const { language } = useSettings() const [targetLanguage, setTargetLanguage] = useState(LanguagesEnum.enUS) const [alterLanguage, setAlterLanguage] = useState(LanguagesEnum.zhCN) @@ -41,16 +41,16 @@ const ActionTranslate: FC = ({ action, scrollToBottom }) => { const [isContented, setIsContented] = useState(false) const [isLoading, setIsLoading] = useState(true) const [contentToCopy, setContentToCopy] = useState('') - const [topic, setTopic] = useState(null) + // use default assistant. + // FIXME: this component create a new topic every time, but related data would not be cleared. + const [topic] = useState(getDefaultTopic('default')) const { getLanguageByLangcode } = useTranslate() // Use useRef for values that shouldn't trigger re-renders - const initialized = useRef(false) - const assistantRef = useRef(null) const topicRef = useRef(topic) const askId = useRef('') - // update ref + // Sync ref useEffect(() => { topicRef.current = topic }, [topic]) @@ -85,22 +85,8 @@ const ActionTranslate: FC = ({ action, scrollToBottom }) => { }) }, [getLanguageByLangcode, language]) - // Initialize values only once when action changes - useEffect(() => { - if (initialized.current || !action.selectedText) return - initialized.current = true - - // Initialize assistant - const currentAssistant = getDefaultTranslateAssistant(targetLanguage, action.selectedText) - - assistantRef.current = currentAssistant - - // Initialize topic - topicRef.current = getDefaultTopic(currentAssistant.id) - }, [action, targetLanguage, translateModelPrompt]) - const fetchResult = useCallback(async () => { - if (!assistantRef.current || !topicRef.current || !action.selectedText) return + if (!topicRef.current || !action.selectedText) return const setAskId = (id: string) => { askId.current = id @@ -118,8 +104,6 @@ const ActionTranslate: FC = ({ action, scrollToBottom }) => { setError(error.message) } - setIsLoading(true) - let sourceLanguageCode: TranslateLanguageCode try { @@ -145,7 +129,6 @@ const ActionTranslate: FC = ({ action, scrollToBottom }) => { } const assistant = getDefaultTranslateAssistant(translateLang, action.selectedText) - assistantRef.current = assistant processMessages(assistant, topicRef.current, assistant.content, setAskId, onStream, onFinish, onError) }, [action, targetLanguage, alterLanguage, scrollToBottom])