From 499ad5fabf732e8ac3cb84374dfdc1fd78a4f370 Mon Sep 17 00:00:00 2001 From: Tristan Zhang <82869104+ABucket@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:12:29 +0800 Subject: [PATCH] fix: move handling to clearTopic --- .../src/pages/home/Messages/Messages.tsx | 29 ++++++++++++++----- .../src/pages/home/Tabs/components/Topics.tsx | 25 ++++------------ 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/renderer/src/pages/home/Messages/Messages.tsx b/src/renderer/src/pages/home/Messages/Messages.tsx index 7bf037411e..3d05e47d06 100644 --- a/src/renderer/src/pages/home/Messages/Messages.tsx +++ b/src/renderer/src/pages/home/Messages/Messages.tsx @@ -61,7 +61,7 @@ const Messages: React.FC = ({ assistant, topic, setActiveTopic, o const [isLoadingMore, setIsLoadingMore] = useState(false) const [isProcessingContext, setIsProcessingContext] = useState(false) - const { addTopic } = useAssistant(assistant.id) + const { addTopic, updateTopic, assistant: currentAssistant } = useAssistant(assistant.id) const { showPrompt, messageNavigation } = useSettings() const { t } = useTranslation() const dispatch = useAppDispatch() @@ -105,15 +105,28 @@ const Messages: React.FC = ({ assistant, topic, setActiveTopic, o const clearTopic = useCallback( async (data: Topic) => { - if (data && data.id !== topic.id) { - await clearTopicMessages(data.id) - return - } + const targetTopic = data && data.id !== topic.id ? data : topic + const isCurrentTopic = targetTopic.id === topic.id - await clearTopicMessages() - setDisplayMessages([]) + if (!isCurrentTopic) { + await clearTopicMessages(data.id) + } else { + await clearTopicMessages() + setDisplayMessages([]) + } + if (currentAssistant?.topics.length === 1) { + const updatedTopic = { + ...targetTopic, + name: t('chat.default.topic.name'), + isNameManuallyEdited: false + } + updateTopic(updatedTopic) + if (isCurrentTopic) { + setActiveTopic(updatedTopic) + } + } }, - [clearTopicMessages, topic.id] + [clearTopicMessages, topic, currentAssistant?.topics.length, updateTopic, setActiveTopic, t] ) useEffect(() => { diff --git a/src/renderer/src/pages/home/Tabs/components/Topics.tsx b/src/renderer/src/pages/home/Tabs/components/Topics.tsx index 0cd627f6dc..d7214ff450 100644 --- a/src/renderer/src/pages/home/Tabs/components/Topics.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Topics.tsx @@ -127,26 +127,11 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se deleteTimerRef.current = setTimeout(() => setDeletingTopicId(null), 2000) }, []) - const onClearMessages = useCallback( - (topic: Topic) => { - // window.keyv.set(EVENT_NAMES.CHAT_COMPLETION_PAUSED, true) - store.dispatch(setGenerating(false)) - EventEmitter.emit(EVENT_NAMES.CLEAR_MESSAGES, topic) - - if (assistant.topics.length === 1) { - const updatedTopic = { - ...topic, - name: t('chat.default.topic.name'), - isNameManuallyEdited: false - } - updateTopic(updatedTopic) - if (topic.id === activeTopic.id) { - setActiveTopic(updatedTopic) - } - } - }, - [assistant.topics.length, t, updateTopic, activeTopic.id, setActiveTopic] - ) + const onClearMessages = useCallback((topic: Topic) => { + // window.keyv.set(EVENT_NAMES.CHAT_COMPLETION_PAUSED, true) + store.dispatch(setGenerating(false)) + EventEmitter.emit(EVENT_NAMES.CLEAR_MESSAGES, topic) + }, []) const handleConfirmDelete = useCallback( async (topic: Topic, e: React.MouseEvent) => {