mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-08 22:39:36 +08:00
fix: send message shortcut doesn't work when editing existing message (#6934)
* fix: send message shortcut doesn't work when editing existing message * fix: resend shortcut only apply on user msg
This commit is contained in:
parent
fc62a5bdc2
commit
9ea4d1f99f
@ -309,7 +309,7 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
|
|||||||
}, [knowledgeBases, openKnowledgeFileList, quickPanel, t, inputbarToolsRef])
|
}, [knowledgeBases, openKnowledgeFileList, quickPanel, t, inputbarToolsRef])
|
||||||
|
|
||||||
const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
|
const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
|
||||||
const isEnterPressed = event.keyCode == 13
|
const isEnterPressed = event.key === 'Enter'
|
||||||
|
|
||||||
// 按下Tab键,自动选中${xxx}
|
// 按下Tab键,自动选中${xxx}
|
||||||
if (event.key === 'Tab' && inputFocus) {
|
if (event.key === 'Tab' && inputFocus) {
|
||||||
|
|||||||
@ -40,7 +40,7 @@ const MessageBlockEditor: FC<Props> = ({ message, onSave, onResend, onCancel })
|
|||||||
const model = assistant.model || assistant.defaultModel
|
const model = assistant.model || assistant.defaultModel
|
||||||
const isVision = useMemo(() => isVisionModel(model), [model])
|
const isVision = useMemo(() => isVisionModel(model), [model])
|
||||||
const supportExts = useMemo(() => [...textExts, ...documentExts, ...(isVision ? imageExts : [])], [isVision])
|
const supportExts = useMemo(() => [...textExts, ...documentExts, ...(isVision ? imageExts : [])], [isVision])
|
||||||
const { pasteLongTextAsFile, pasteLongTextThreshold, fontSize } = useSettings()
|
const { pasteLongTextAsFile, pasteLongTextThreshold, fontSize, sendMessageShortcut } = useSettings()
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const textareaRef = useRef<TextAreaRef>(null)
|
const textareaRef = useRef<TextAreaRef>(null)
|
||||||
const attachmentButtonRef = useRef<AttachmentButtonRef>(null)
|
const attachmentButtonRef = useRef<AttachmentButtonRef>(null)
|
||||||
@ -137,9 +137,8 @@ const MessageBlockEditor: FC<Props> = ({ message, onSave, onResend, onCancel })
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleClick = async (withResend?: boolean) => {
|
// 处理编辑区块并上传文件
|
||||||
if (isProcessing) return
|
const processEditedBlocks = async () => {
|
||||||
setIsProcessing(true)
|
|
||||||
const updatedBlocks = [...editedBlocks]
|
const updatedBlocks = [...editedBlocks]
|
||||||
if (files && files.length) {
|
if (files && files.length) {
|
||||||
const uploadedFiles = await FileManager.uploadFiles(files)
|
const uploadedFiles = await FileManager.uploadFiles(files)
|
||||||
@ -153,10 +152,48 @@ const MessageBlockEditor: FC<Props> = ({ message, onSave, onResend, onCancel })
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (withResend) {
|
return updatedBlocks
|
||||||
onResend(updatedBlocks)
|
}
|
||||||
} else {
|
|
||||||
onSave(updatedBlocks)
|
const handleSave = async () => {
|
||||||
|
if (isProcessing) return
|
||||||
|
setIsProcessing(true)
|
||||||
|
const updatedBlocks = await processEditedBlocks()
|
||||||
|
onSave(updatedBlocks)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleResend = async () => {
|
||||||
|
if (isProcessing) return
|
||||||
|
setIsProcessing(true)
|
||||||
|
const updatedBlocks = await processEditedBlocks()
|
||||||
|
onResend(updatedBlocks)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {
|
||||||
|
if (message.role !== 'user') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const isEnterPressed = event.key === 'Enter'
|
||||||
|
|
||||||
|
if (isEnterPressed && !event.shiftKey && sendMessageShortcut === 'Enter') {
|
||||||
|
handleResend()
|
||||||
|
return event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendMessageShortcut === 'Shift+Enter' && isEnterPressed && event.shiftKey) {
|
||||||
|
handleResend()
|
||||||
|
return event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendMessageShortcut === 'Ctrl+Enter' && isEnterPressed && event.ctrlKey) {
|
||||||
|
handleResend()
|
||||||
|
return event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendMessageShortcut === 'Command+Enter' && isEnterPressed && event.metaKey) {
|
||||||
|
handleResend()
|
||||||
|
return event.preventDefault()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,6 +212,7 @@ const MessageBlockEditor: FC<Props> = ({ message, onSave, onResend, onCancel })
|
|||||||
handleTextChange(block.id, e.target.value)
|
handleTextChange(block.id, e.target.value)
|
||||||
resizeTextArea()
|
resizeTextArea()
|
||||||
}}
|
}}
|
||||||
|
onKeyDown={handleKeyDown}
|
||||||
autoFocus
|
autoFocus
|
||||||
contextMenu="true"
|
contextMenu="true"
|
||||||
spellCheck={false}
|
spellCheck={false}
|
||||||
@ -240,13 +278,13 @@ const MessageBlockEditor: FC<Props> = ({ message, onSave, onResend, onCancel })
|
|||||||
</ToolbarButton>
|
</ToolbarButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip title={t('common.save')}>
|
<Tooltip title={t('common.save')}>
|
||||||
<ToolbarButton type="text" onClick={() => handleClick()}>
|
<ToolbarButton type="text" onClick={handleSave}>
|
||||||
<Save size={16} />
|
<Save size={16} />
|
||||||
</ToolbarButton>
|
</ToolbarButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
{message.role === 'user' && (
|
{message.role === 'user' && (
|
||||||
<Tooltip title={t('chat.resend')}>
|
<Tooltip title={t('chat.resend')}>
|
||||||
<ToolbarButton type="text" onClick={() => handleClick(true)}>
|
<ToolbarButton type="text" onClick={handleResend}>
|
||||||
<Send size={16} />
|
<Send size={16} />
|
||||||
</ToolbarButton>
|
</ToolbarButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user