From 66f0b756a0978c8d1cba93eaf0fff1124c3d7177 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Sun, 19 Oct 2025 18:16:08 +0300 Subject: [PATCH] Stop typing on message sent --- frontend/src/core/typingManager.ts | 16 +++++++++++++ .../pages/chat/ui/right/ChatInputWrapper.tsx | 6 ++++- .../chat/ui/right/MessagePanelRenderer.tsx | 24 ++++++++++++------- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/frontend/src/core/typingManager.ts b/frontend/src/core/typingManager.ts index 61a8fa3..bf04d6e 100644 --- a/frontend/src/core/typingManager.ts +++ b/frontend/src/core/typingManager.ts @@ -203,6 +203,22 @@ export class TypingManager { } } + /** + * Immediately stop typing for public chat (called when message is sent) + */ + async stopTypingOnMessage(): Promise { + this.clearStopTypingTimeout("public"); + await this.sendStopTyping(); + } + + /** + * Immediately stop DM typing (called when message is sent) + */ + async stopDmTypingOnMessage(recipientId: number): Promise { + this.clearStopTypingTimeout(`dm_${recipientId}`); + await this.sendStopDmTyping(recipientId); + } + /** * Cleanup all timeouts */ diff --git a/frontend/src/pages/chat/ui/right/ChatInputWrapper.tsx b/frontend/src/pages/chat/ui/right/ChatInputWrapper.tsx index 0f03d20..92d8568 100644 --- a/frontend/src/pages/chat/ui/right/ChatInputWrapper.tsx +++ b/frontend/src/pages/chat/ui/right/ChatInputWrapper.tsx @@ -21,6 +21,7 @@ interface ChatInputWrapperProps { onProvideFileAdder?: (adder: (files: File[]) => void) => void; messagePanelRef?: React.RefObject; onTyping?: () => void; + onStopTyping?: () => void; } export function ChatInputWrapper( @@ -37,7 +38,8 @@ export function ChatInputWrapper( onCloseEdit, onProvideFileAdder, messagePanelRef, - onTyping + onTyping, + onStopTyping }: ChatInputWrapperProps ) { const [message, setMessage] = useState(""); @@ -124,6 +126,8 @@ export function ChatInputWrapper( setMessage(""); setAttachmentsVisible(false); if (onClearReply) onClearReply(); + // Stop typing indicator when message is sent + if (onStopTyping) onStopTyping(); } } }; diff --git a/frontend/src/pages/chat/ui/right/MessagePanelRenderer.tsx b/frontend/src/pages/chat/ui/right/MessagePanelRenderer.tsx index d09ff52..a52351c 100644 --- a/frontend/src/pages/chat/ui/right/MessagePanelRenderer.tsx +++ b/frontend/src/pages/chat/ui/right/MessagePanelRenderer.tsx @@ -377,14 +377,22 @@ export function MessagePanelRenderer({ panel }: MessagePanelRendererProps) { }} onProvideFileAdder={(adder) => { addFilesRef.current = adder; }} messagePanelRef={messagePanelRef} - onTyping={() => { - if (panel.isDm()) { - const dmPanel = panel as DMPanel; - dmPanel.handleTyping(); - } else { - typingManager.sendTyping(); - } - }} + onTyping={() => { + if (panel.isDm()) { + const dmPanel = panel as DMPanel; + dmPanel.handleTyping(); + } else { + typingManager.sendTyping(); + } + }} + onStopTyping={() => { + if (panel.isDm()) { + const dmPanel = panel as DMPanel; + typingManager.stopDmTypingOnMessage(dmPanel.getRecipientId()!); + } else { + typingManager.stopTypingOnMessage(); + } + }} /> )}