From 575984877f83cf48277a4eff154d904e80238ddc Mon Sep 17 00:00:00 2001 From: balibabu Date: Thu, 9 Jul 2026 09:57:54 +0800 Subject: [PATCH] Fix: Rapid clicking results in multiple message requests being sent. (#16739) --- web/src/components/message-input/next.tsx | 5 +++-- web/src/pages/agent/chat/use-send-agent-message.ts | 2 +- web/src/pages/next-chats/hooks/use-send-chat-message.ts | 4 ++-- web/src/pages/next-chats/hooks/use-send-shared-message.ts | 2 +- web/src/pages/next-chats/hooks/use-send-single-message.ts | 2 ++ 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/web/src/components/message-input/next.tsx b/web/src/components/message-input/next.tsx index e7cdd0c16..dee8c72c2 100644 --- a/web/src/components/message-input/next.tsx +++ b/web/src/components/message-input/next.tsx @@ -126,10 +126,10 @@ export function NextMessageInput({ }, []); const submit = React.useCallback(() => { - if (isUploading) return; + if (isUploading || sendLoading) return; pressEnter(); setFiles([]); - }, [isUploading, pressEnter]); + }, [isUploading, sendLoading, pressEnter]); const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { @@ -222,6 +222,7 @@ export function NextMessageInput({ " disabled={isUploading || disabled || sendLoading} onKeyDown={handleKeyDown} + resize={resize} autoSize={{ minRows: 2, maxRows: 8 }} /> diff --git a/web/src/pages/agent/chat/use-send-agent-message.ts b/web/src/pages/agent/chat/use-send-agent-message.ts index 6fb1f6165..855e819fe 100644 --- a/web/src/pages/agent/chat/use-send-agent-message.ts +++ b/web/src/pages/agent/chat/use-send-agent-message.ts @@ -415,7 +415,7 @@ export const useSendAgentMessage = ({ const handlePressEnter = useCallback( ({ exploreSessionId }: { exploreSessionId?: string } = {}) => { - if (trim(value) === '') return; + if (trim(value) === '' || !done) return; const msgBody = buildRequestBody(value); if (done) { setValue(''); diff --git a/web/src/pages/next-chats/hooks/use-send-chat-message.ts b/web/src/pages/next-chats/hooks/use-send-chat-message.ts index 0dc760f2d..138964ffb 100644 --- a/web/src/pages/next-chats/hooks/use-send-chat-message.ts +++ b/web/src/pages/next-chats/hooks/use-send-chat-message.ts @@ -147,7 +147,7 @@ export const useSendMessage = (controller: AbortController) => { enableThinking, enableInternet, }: NextMessageInputOnPressEnterParameter) => { - if (trim(value) === '') return; + if (trim(value) === '' || !done) return; const data = await createConversationBeforeSendMessage(value); @@ -199,10 +199,10 @@ export const useSendMessage = (controller: AbortController) => { }, [ value, + done, createConversationBeforeSendMessage, addNewestQuestion, files, - done, clearFiles, setValue, sendMessage, diff --git a/web/src/pages/next-chats/hooks/use-send-shared-message.ts b/web/src/pages/next-chats/hooks/use-send-shared-message.ts index 3d66ea029..57017896c 100644 --- a/web/src/pages/next-chats/hooks/use-send-shared-message.ts +++ b/web/src/pages/next-chats/hooks/use-send-shared-message.ts @@ -132,7 +132,7 @@ export const useSendSharedMessage = () => { enableThinking, enableInternet, }: NextMessageInputOnPressEnterParameter) => { - if (trim(value) === '') return; + if (trim(value) === '' || !done) return; const id = uuid(); if (done) { setValue(''); diff --git a/web/src/pages/next-chats/hooks/use-send-single-message.ts b/web/src/pages/next-chats/hooks/use-send-single-message.ts index c7d8670d2..e82777f20 100644 --- a/web/src/pages/next-chats/hooks/use-send-single-message.ts +++ b/web/src/pages/next-chats/hooks/use-send-single-message.ts @@ -8,6 +8,7 @@ import { import { useGetChatSearchParams } from '@/hooks/use-chat-request'; import { IMessage } from '@/interfaces/database/chat'; import api from '@/utils/api'; +import { trim } from 'lodash'; import { useCallback, useEffect } from 'react'; import { useParams } from 'react-router'; import { v4 as uuid } from 'uuid'; @@ -112,6 +113,7 @@ export function useSendSingleMessage({ ...params }: NextMessageInputOnPressEnterParameter & CreateConversationBeforeSendMessageReturnType) => { + if (trim(value) === '' || !done) return; const id = uuid(); addNewestQuestion({