diff --git a/src/renderer/src/pages/home/Messages/ChatContext.tsx b/src/renderer/src/pages/home/Messages/ChatContext.tsx index 36b5c33266..702da1c262 100644 --- a/src/renderer/src/pages/home/Messages/ChatContext.tsx +++ b/src/renderer/src/pages/home/Messages/ChatContext.tsx @@ -1,11 +1,12 @@ +import { useMessageOperations } from '@renderer/hooks/useMessageOperations' import { RootState } from '@renderer/store' import { messageBlocksSelectors } from '@renderer/store/messageBlock' -import { newMessagesActions, selectMessagesForTopic } from '@renderer/store/newMessage' +import { selectMessagesForTopic } from '@renderer/store/newMessage' import { Topic } from '@renderer/types' import { Modal } from 'antd' import { createContext, FC, ReactNode, use, useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' -import { useDispatch, useSelector } from 'react-redux' +import { useSelector } from 'react-redux' interface ChatContextProps { isMultiSelectMode: boolean @@ -36,7 +37,7 @@ export const useChatContext = () => { export const ChatProvider: FC = ({ children, activeTopic }) => { const { t } = useTranslation() - const dispatch = useDispatch() + const { deleteMessage } = useMessageOperations(activeTopic) const [isMultiSelectMode, setIsMultiSelectMode] = useState(false) const [selectedMessageIds, setSelectedMessageIds] = useState([]) const [confirmDeleteVisible, setConfirmDeleteVisible] = useState(false) @@ -163,12 +164,7 @@ export const ChatProvider: FC = ({ children, activeTopic }) = const confirmDelete = async () => { try { - dispatch( - newMessagesActions.removeMessages({ - topicId: activeTopic.id, - messageIds: messagesToDelete - }) - ) + await Promise.all(messagesToDelete.map((messageId) => deleteMessage(messageId))) window.message.success(t('message.delete.success')) setMessagesToDelete([]) toggleMultiSelectMode(false) diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index 87ec54ad9f..014aa26282 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -126,7 +126,9 @@ const MessageItem: FC = ({ if (message.type === 'clear') { return ( - EventEmitter.emit(EVENT_NAMES.NEW_CONTEXT)}> + EventEmitter.emit(EVENT_NAMES.NEW_CONTEXT)}> {t('chat.message.new.context')} diff --git a/src/renderer/src/pages/home/Messages/MessageGroup.tsx b/src/renderer/src/pages/home/Messages/MessageGroup.tsx index 633f162df6..e0884af966 100644 --- a/src/renderer/src/pages/home/Messages/MessageGroup.tsx +++ b/src/renderer/src/pages/home/Messages/MessageGroup.tsx @@ -178,7 +178,8 @@ const MessageGroup = ({ isMultiSelectMode={isMultiSelectMode} isSelected={selectedMessages.has(message.id)} onSelect={(selected) => onSelectMessage?.(message.id, selected)} - registerElement={registerMessageElement}> + registerElement={registerMessageElement} + isClearMessage={message.type === 'clear'}> {messageContent} ) diff --git a/src/renderer/src/pages/home/Messages/MessageSelect.tsx b/src/renderer/src/pages/home/Messages/MessageSelect.tsx index 0a0cb1fe0d..45dba71609 100644 --- a/src/renderer/src/pages/home/Messages/MessageSelect.tsx +++ b/src/renderer/src/pages/home/Messages/MessageSelect.tsx @@ -11,6 +11,7 @@ interface SelectableMessageProps { onSelect: (selected: boolean) => void messageId: string registerElement?: (id: string, element: HTMLElement | null) => void + isClearMessage?: boolean } const SelectableMessage: FC = ({ @@ -19,7 +20,8 @@ const SelectableMessage: FC = ({ isSelected, onSelect, messageId, - registerElement + registerElement, + isClearMessage = false }) => { const containerRef = useRef(null) const { registerMessageElement: contextRegister } = useChatContext() @@ -43,7 +45,7 @@ const SelectableMessage: FC = ({ return ( - {isMultiSelectMode && ( + {isMultiSelectMode && !isClearMessage && ( onSelect(e.target.checked)} /> diff --git a/src/renderer/src/pages/home/Messages/Messages.tsx b/src/renderer/src/pages/home/Messages/Messages.tsx index 78a3e8c9cf..61cf35268a 100644 --- a/src/renderer/src/pages/home/Messages/Messages.tsx +++ b/src/renderer/src/pages/home/Messages/Messages.tsx @@ -122,8 +122,7 @@ const Messages: React.FC = ({ assistant, topic, setActiveTopic, o const MIN_SELECTION_SIZE = 5 const isValidSelection = - Math.abs(right - left) > MIN_SELECTION_SIZE && - Math.abs(bottom - top) > MIN_SELECTION_SIZE + Math.abs(right - left) > MIN_SELECTION_SIZE && Math.abs(bottom - top) > MIN_SELECTION_SIZE if (isValidSelection) { // 处理元素选择