Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(mothership): simplify queue callbacks — drop redundant deps and g…
…uard ref

- Remove `setMessageQueue` from useCallback deps (stable setter, never changes)
- Replace `sendNowProcessingRef` double-click guard with eager `messageQueueRef` update
- Simplify `editQueuedMessage` with same eager-ref pattern for consistency

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
  • Loading branch information
waleedlatif1 and claude committed Mar 14, 2026
commit af7a2a8860b4e5e76554f005e5871185c7780a3a
44 changes: 17 additions & 27 deletions apps/sim/app/workspace/[workspaceId]/home/hooks/use-chat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,7 @@ export function useChat(
sendMessageRef.current(next.content, next.fileAttachments, next.contexts)
})
}
}, [invalidateChatQueries, setMessageQueue])
}, [invalidateChatQueries])

useEffect(() => {
const activeStreamId = chatHistory?.activeStreamId
Expand Down Expand Up @@ -999,41 +999,31 @@ export function useChat(
}
}, [invalidateChatQueries, persistPartialResponse, executionStream])

const removeFromQueue = useCallback(
(id: string) => {
setMessageQueue((prev) => prev.filter((m) => m.id !== id))
},
[setMessageQueue]
)
const removeFromQueue = useCallback((id: string) => {
setMessageQueue((prev) => prev.filter((m) => m.id !== id))
}, [])
Comment thread
waleedlatif1 marked this conversation as resolved.

const sendNowProcessingRef = useRef<string | null>(null)
const sendNow = useCallback(
async (id: string) => {
if (sendNowProcessingRef.current === id) return
const msg = messageQueueRef.current.find((m) => m.id === id)
if (!msg) return
sendNowProcessingRef.current = id
try {
await stopGeneration()
setMessageQueue((prev) => prev.filter((m) => m.id !== id))
await sendMessage(msg.content, msg.fileAttachments, msg.contexts)
} finally {
sendNowProcessingRef.current = null
}
},
[stopGeneration, sendMessage, setMessageQueue]
)

const editQueuedMessage = useCallback(
(id: string): QueuedMessage | undefined => {
const msg = messageQueueRef.current.find((m) => m.id === id)
if (!msg) return undefined
// Eagerly update ref so a rapid second click finds the message already gone
messageQueueRef.current = messageQueueRef.current.filter((m) => m.id !== id)
await stopGeneration()
setMessageQueue((prev) => prev.filter((m) => m.id !== id))
return msg
await sendMessage(msg.content, msg.fileAttachments, msg.contexts)
},
[setMessageQueue]
[stopGeneration, sendMessage]
)
Comment thread
waleedlatif1 marked this conversation as resolved.

const editQueuedMessage = useCallback((id: string): QueuedMessage | undefined => {
const msg = messageQueueRef.current.find((m) => m.id === id)
if (!msg) return undefined
messageQueueRef.current = messageQueueRef.current.filter((m) => m.id !== id)
setMessageQueue((prev) => prev.filter((m) => m.id !== id))
return msg
}, [])

useEffect(() => {
return () => {
streamGenRef.current++
Expand Down
Loading