fix(chat): clear input immediately after send to prevent duplicate messages

Two issues were causing the input field to retain text after sending:

1. ChatComposer's NSViewRepresentable was skipping all updates while the
   text view was first responder. Now it allows clearing (empty binding)
   even during editing, only skipping other updates to avoid cursor jumps.

2. ChatViewModel cleared input after awaiting the network response, leaving
   text visible during the round trip. Now clears immediately after capturing
   the message content, before the async send.

Together these prevent users from accidentally re-sending messages when
the input appeared unchanged after pressing Enter.
This commit is contained in:
Marc Beaupre
2025-12-31 17:47:42 -05:00
committed by Peter Steinberger
parent a954aaa507
commit b51b24955c
2 changed files with 9 additions and 3 deletions

View File

@@ -243,6 +243,10 @@ public final class ClawdisChatViewModel {
content: userContent,
timestamp: Date().timeIntervalSince1970 * 1000))
// Clear input immediately for responsive UX (before network await)
self.input = ""
self.attachments = []
do {
let response = try await self.transport.sendMessage(
sessionKey: self.sessionKey,
@@ -261,8 +265,6 @@ public final class ClawdisChatViewModel {
chatUILogger.error("chat.send failed \(error.localizedDescription, privacy: .public)")
}
self.input = ""
self.attachments = []
self.isSending = false
}