diff --git a/src/renderer/src/components/Popups/MultiSelectionPopup.tsx b/src/renderer/src/components/Popups/MultiSelectionPopup.tsx
index b83fe7b9d6..2dbbed1176 100644
--- a/src/renderer/src/components/Popups/MultiSelectionPopup.tsx
+++ b/src/renderer/src/components/Popups/MultiSelectionPopup.tsx
@@ -1,6 +1,6 @@
-import { CloseOutlined, CopyOutlined, DeleteOutlined, SaveOutlined } from '@ant-design/icons'
import { useChatContext } from '@renderer/pages/home/Messages/ChatContext'
import { Button, Tooltip } from 'antd'
+import { Copy, Save, Trash, X } from 'lucide-react'
import { FC } from 'react'
import { useTranslation } from 'react-i18next'
import styled from 'styled-components'
@@ -29,17 +29,17 @@ const MultiSelectActionPopup: FC = () => {
{t('common.selectedMessages', { count: selectedMessageIds.length })}
- } disabled={isActionDisabled} onClick={() => handleAction('save')} />
+ } disabled={isActionDisabled} onClick={() => handleAction('save')} />
- } disabled={isActionDisabled} onClick={() => handleAction('copy')} />
+ } disabled={isActionDisabled} onClick={() => handleAction('copy')} />
- } onClick={() => handleAction('delete')} />
+ } onClick={() => handleAction('delete')} />
- } onClick={handleClose} />
+ } onClick={handleClose} />
@@ -73,7 +73,7 @@ const ActionButton = styled(Button)`
align-items: center;
justify-content: center;
padding: 8px 16px;
- border-radius: 4px;
+ border-radius: 50%;
.anticon {
font-size: 16px;
}
diff --git a/src/renderer/src/hooks/useTopic.ts b/src/renderer/src/hooks/useTopic.ts
index 06c5fd89ee..611ab68555 100644
--- a/src/renderer/src/hooks/useTopic.ts
+++ b/src/renderer/src/hooks/useTopic.ts
@@ -1,5 +1,6 @@
import db from '@renderer/databases'
import i18n from '@renderer/i18n'
+import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import { deleteMessageFiles } from '@renderer/services/MessagesService'
import store from '@renderer/store'
import { updateTopic } from '@renderer/store/assistants'
@@ -27,6 +28,7 @@ export function useActiveTopic(_assistant: Assistant, topic?: Topic) {
useEffect(() => {
if (activeTopic) {
store.dispatch(loadTopicMessagesThunk(activeTopic.id))
+ EventEmitter.emit(EVENT_NAMES.CHANGE_TOPIC, activeTopic)
}
}, [activeTopic])
diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json
index bdb0ee1cc8..b01ebeccbb 100644
--- a/src/renderer/src/i18n/locales/zh-cn.json
+++ b/src/renderer/src/i18n/locales/zh-cn.json
@@ -395,7 +395,7 @@
"save": "保存",
"search": "搜索",
"select": "选择",
- "selectedMessages": "选中{{count}}条消息",
+ "selectedMessages": "选中 {{count}} 条消息",
"topics": "话题",
"warning": "警告",
"you": "用户",
diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json
index f5da40ff4a..b0b9444b3a 100644
--- a/src/renderer/src/i18n/locales/zh-tw.json
+++ b/src/renderer/src/i18n/locales/zh-tw.json
@@ -395,7 +395,7 @@
"save": "儲存",
"search": "搜尋",
"select": "選擇",
- "selectedMessages": "选中{{count}}条消息",
+ "selectedMessages": "选中 {{count}} 条消息",
"topics": "話題",
"warning": "警告",
"you": "您",
diff --git a/src/renderer/src/pages/home/Messages/ChatContext.tsx b/src/renderer/src/pages/home/Messages/ChatContext.tsx
index 221fd22adb..13e06a0720 100644
--- a/src/renderer/src/pages/home/Messages/ChatContext.tsx
+++ b/src/renderer/src/pages/home/Messages/ChatContext.tsx
@@ -1,10 +1,11 @@
import { useMessageOperations } from '@renderer/hooks/useMessageOperations'
+import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import { RootState } from '@renderer/store'
import { messageBlocksSelectors } from '@renderer/store/messageBlock'
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 { createContext, FC, ReactNode, use, useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useStore } from 'react-redux'
@@ -46,6 +47,11 @@ export const ChatProvider: FC = ({ children, activeTopic }) =
const store = useStore()
+ useEffect(() => {
+ const unsubscribe = EventEmitter.on(EVENT_NAMES.CHANGE_TOPIC, () => setIsMultiSelectMode(false))
+ return () => unsubscribe()
+ }, [])
+
const toggleMultiSelectMode = (value: boolean) => {
setIsMultiSelectMode(value)
if (!value) {
diff --git a/src/renderer/src/pages/home/Messages/MessageGroup.tsx b/src/renderer/src/pages/home/Messages/MessageGroup.tsx
index 8f36fba285..65ac5fb6fa 100644
--- a/src/renderer/src/pages/home/Messages/MessageGroup.tsx
+++ b/src/renderer/src/pages/home/Messages/MessageGroup.tsx
@@ -10,7 +10,6 @@ import { Popover } from 'antd'
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import styled, { css } from 'styled-components'
-import { useChatContext } from './ChatContext'
import MessageItem from './Message'
import MessageGroupMenuBar from './MessageGroupMenuBar'
import SelectableMessage from './MessageSelect'
@@ -25,8 +24,6 @@ interface Props {
const MessageGroup = ({ messages, topic, hidePresetMessages, registerMessageElement }: Props) => {
const { editMessage } = useMessageOperations(topic)
const { multiModelMessageStyle: multiModelMessageStyleSetting, gridColumns, gridPopoverTrigger } = useSettings()
- const { isMultiSelectMode, selectedMessageIds, handleSelectMessage } = useChatContext()
- const selectedMessages = useMemo(() => new Set(selectedMessageIds), [selectedMessageIds])
const [multiModelMessageStyle, setMultiModelMessageStyle] = useState(
messages[0].multiModelMessageStyle || multiModelMessageStyleSetting
@@ -201,10 +198,6 @@ const MessageGroup = ({ messages, topic, hidePresetMessages, registerMessageElem
multiModelMessageStyle,
isHorizontal,
selectedMessageId,
- isMultiSelectMode,
- selectedMessages,
- registerMessageElement,
- handleSelectMessage,
gridPopoverTrigger
]
)
diff --git a/src/renderer/src/pages/home/Messages/MessageSelect.tsx b/src/renderer/src/pages/home/Messages/MessageSelect.tsx
index ab2fac4f49..3a4549d7a3 100644
--- a/src/renderer/src/pages/home/Messages/MessageSelect.tsx
+++ b/src/renderer/src/pages/home/Messages/MessageSelect.tsx
@@ -50,7 +50,8 @@ const Container = styled.div`
`
const CheckboxWrapper = styled.div`
- padding: 10px 0 10px 20px;
+ padding: 22px 0 10px 20px;
+ margin-right: -10px;
display: flex;
align-items: flex-start;
`
diff --git a/src/renderer/src/services/EventService.ts b/src/renderer/src/services/EventService.ts
index 5558d1c67a..27e552506c 100644
--- a/src/renderer/src/services/EventService.ts
+++ b/src/renderer/src/services/EventService.ts
@@ -28,5 +28,6 @@ export const EVENT_NAMES = {
RESEND_MESSAGE: 'RESEND_MESSAGE',
SHOW_MODEL_SELECTOR: 'SHOW_MODEL_SELECTOR',
QUOTE_TEXT: 'QUOTE_TEXT',
- EDIT_CODE_BLOCK: 'EDIT_CODE_BLOCK'
+ EDIT_CODE_BLOCK: 'EDIT_CODE_BLOCK',
+ CHANGE_TOPIC: 'CHANGE_TOPIC'
}