From 10c07413b59031b4e0fb0aa192f04bfd1ed92e94 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Sat, 6 Jul 2024 17:24:07 +0800 Subject: [PATCH] feat: add send message shortcut --- src/renderer/src/hooks/useSettings.ts | 14 ++++++ .../pages/home/components/ChatSettings.tsx | 16 ++++++ .../src/pages/home/components/Inputbar.tsx | 50 +++++++++++++------ .../home/components/SendMessageSetting.tsx | 34 +++++++++++++ src/renderer/src/store/settings.ts | 13 +++-- 5 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 src/renderer/src/hooks/useSettings.ts create mode 100644 src/renderer/src/pages/home/components/ChatSettings.tsx create mode 100644 src/renderer/src/pages/home/components/SendMessageSetting.tsx diff --git a/src/renderer/src/hooks/useSettings.ts b/src/renderer/src/hooks/useSettings.ts new file mode 100644 index 00000000..8720e816 --- /dev/null +++ b/src/renderer/src/hooks/useSettings.ts @@ -0,0 +1,14 @@ +import { useAppDispatch, useAppSelector } from '@renderer/store' +import { setSendMessageShortcut as _setSendMessageShortcut, SendMessageShortcut } from '@renderer/store/settings' + +export function useSettings() { + const settings = useAppSelector((state) => state.settings) + const dispatch = useAppDispatch() + + return { + ...settings, + setSendMessageShortcut(shortcut: SendMessageShortcut) { + dispatch(_setSendMessageShortcut(shortcut)) + } + } +} diff --git a/src/renderer/src/pages/home/components/ChatSettings.tsx b/src/renderer/src/pages/home/components/ChatSettings.tsx new file mode 100644 index 00000000..0d9f5a02 --- /dev/null +++ b/src/renderer/src/pages/home/components/ChatSettings.tsx @@ -0,0 +1,16 @@ +import { FC } from 'react' +import styled from 'styled-components' + +const ChatSettings: FC = () => { + return ( + +

Chat Settings

+
+ ) +} + +const Container = styled.div` + width: 300px; +` + +export default ChatSettings diff --git a/src/renderer/src/pages/home/components/Inputbar.tsx b/src/renderer/src/pages/home/components/Inputbar.tsx index 16999382..73bec748 100644 --- a/src/renderer/src/pages/home/components/Inputbar.tsx +++ b/src/renderer/src/pages/home/components/Inputbar.tsx @@ -9,6 +9,9 @@ import { useShowRightSidebar } from '@renderer/hooks/useStore' import { useAssistant } from '@renderer/hooks/useAssistant' import { ClearOutlined, HistoryOutlined, PlusCircleOutlined } from '@ant-design/icons' import { TextAreaRef } from 'antd/es/input/TextArea' +import { isEmpty } from 'lodash' +import SendMessageSetting from './SendMessageSetting' +import { useSettings } from '@renderer/hooks/useSettings' interface Props { assistant: Assistant @@ -19,25 +22,40 @@ const Inputbar: FC = ({ assistant, setActiveTopic }) => { const [text, setText] = useState('') const { setShowRightSidebar } = useShowRightSidebar() const { addTopic } = useAssistant(assistant.id) + const { sendMessageShortcut } = useSettings() const inputRef = useRef(null) + const sendMessage = () => { + if (isEmpty(text.trim())) { + return + } + + const message: Message = { + id: uuid(), + role: 'user', + content: text, + assistantId: assistant.id, + topicId: assistant.topics[0].id || uuid(), + createdAt: 'now' + } + + EventEmitter.emit(EVENT_NAMES.SEND_MESSAGE, message) + + setText('') + } + const handleKeyDown = (event: React.KeyboardEvent) => { - if (event.key === 'Enter') { - const topicId = assistant.topics[0] ? assistant.topics[0] : uuid() - - const message: Message = { - id: uuid(), - role: 'user', - content: text, - assistantId: assistant.id, - topicId, - createdAt: 'now' + if (sendMessageShortcut === 'Enter' && event.key === 'Enter') { + if (event.shiftKey) { + return } + sendMessage() + return event.preventDefault() + } - EventEmitter.emit(EVENT_NAMES.SEND_MESSAGE, message) - - setText('') - event.preventDefault() + if (sendMessageShortcut === 'Shift+Enter' && event.key === 'Enter' && event.shiftKey) { + sendMessage() + return event.preventDefault() } } @@ -101,11 +119,11 @@ const Inputbar: FC = ({ assistant, setActiveTopic }) => { - + - +