diff --git a/src/renderer/src/pages/history/components/TopicMessages.tsx b/src/renderer/src/pages/history/components/TopicMessages.tsx index 86805dd1af..55537097e5 100644 --- a/src/renderer/src/pages/history/components/TopicMessages.tsx +++ b/src/renderer/src/pages/history/components/TopicMessages.tsx @@ -3,6 +3,7 @@ import { HStack } from '@renderer/components/Layout' import SearchPopup from '@renderer/components/Popups/SearchPopup' import useScrollPosition from '@renderer/hooks/useScrollPosition' import { useSettings } from '@renderer/hooks/useSettings' +import { ChatProvider } from '@renderer/pages/home/Messages/ChatContext' import { getAssistantById } from '@renderer/services/AssistantService' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { isGenerating, locateToMessage } from '@renderer/services/MessagesService' @@ -46,31 +47,33 @@ const TopicMessages: FC = ({ topic, ...props }) => { } return ( - - - {topic?.messages.map((message) => ( -
- -
- ))} - {isEmpty && } - {!isEmpty && ( - - - - )} -
-
+ + + + {topic?.messages.map((message) => ( +
+ +
+ ))} + {isEmpty && } + {!isEmpty && ( + + + + )} +
+
+
) } diff --git a/src/renderer/src/pages/home/Messages/ChatContext.tsx b/src/renderer/src/pages/home/Messages/ChatContext.tsx index 6b07c9c06d..39da0f07de 100644 --- a/src/renderer/src/pages/home/Messages/ChatContext.tsx +++ b/src/renderer/src/pages/home/Messages/ChatContext.tsx @@ -12,10 +12,16 @@ interface ChatContextProps { toggleMultiSelectMode: (value: boolean) => void handleMultiSelectAction: (actionType: string, messageIds: string[]) => void activeTopic: Topic + locateMessage: (messageId: string) => void messageRefs: Map registerMessageElement: (id: string, element: HTMLElement | null) => void } +interface ChatProviderProps { + children: ReactNode + activeTopic: Topic +} + const ChatContext = createContext(undefined) export const useChatContext = () => { @@ -26,11 +32,6 @@ export const useChatContext = () => { return context } -interface ChatProviderProps { - children: ReactNode - activeTopic: Topic -} - export const ChatProvider: FC = ({ children, activeTopic }) => { const { t } = useTranslation() const dispatch = useDispatch() @@ -58,6 +59,27 @@ export const ChatProvider: FC = ({ children, activeTopic }) = }) }, []) + const locateMessage = (messageId: string) => { + const messageElement = messageRefs.get(messageId) + if (messageElement) { + // 检查消息是否可见 + const display = window.getComputedStyle(messageElement).display + + if (display === 'none') { + // 如果消息隐藏,需要处理显示逻辑 + // 查找消息并设置为选中状态 + const message = messages.find((m) => m.id === messageId) + if (message) { + // 这里需要实现设置消息为选中状态的逻辑 + // 可能需要调用其他函数或修改状态 + } + } + + // 滚动到消息位置 + messageElement.scrollIntoView({ behavior: 'smooth', block: 'start' }) + } + } + const handleMultiSelectAction = (actionType: string, messageIds: string[]) => { if (messageIds.length === 0) { window.message.warning(t('chat.multiple.select.empty')) @@ -150,6 +172,7 @@ export const ChatProvider: FC = ({ children, activeTopic }) = toggleMultiSelectMode, handleMultiSelectAction, activeTopic, + locateMessage, messageRefs, registerMessageElement }