diff --git a/apps/mobile/src/features/threads/ThreadComposer.tsx b/apps/mobile/src/features/threads/ThreadComposer.tsx index 8140517f4ab44..8dd57c328bd4e 100644 --- a/apps/mobile/src/features/threads/ThreadComposer.tsx +++ b/apps/mobile/src/features/threads/ThreadComposer.tsx @@ -496,6 +496,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps onChangeDraftMessage: (text) => setComposerDraftText(composerDraftKey, text), onChangeSelection: composerMenu.onSelectionChange, }); + const isSubmissionLocked = queuedEdit?.saving === true || voiceInput.blocksSubmission; const voicePresentation = resolveVoiceComposerPresentation( voiceInput.state, voiceInput.elapsedSeconds, @@ -552,7 +553,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps (props.canOperateThread || props.connectionState !== "connected") && hasContent && !contextImports[composerDraftKey] && - !voiceInput.blocksSubmission && + !isSubmissionLocked && sendBlockedReason === null && !modelUnavailable; @@ -602,7 +603,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps setComposerEditing(false); }; const handleSend = async (followUp?: ActiveTurnComposerAction) => { - if (voiceInput.blocksSubmission || pendingPastedTextAttachmentCountRef.current > 0) return; + if (isSubmissionLocked || pendingPastedTextAttachmentCountRef.current > 0) return; if (usageLimitsOffered && isUsageLimitsCommand(draftMessage) && draftAttachments.length === 0) { if (openUsageLimits()) onChangeDraftMessage(""); return; @@ -725,7 +726,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps @@ -739,11 +740,11 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps undefined : props.onRemoveDraftImage} - onPressPreview={voiceInput.isBusy ? undefined : onPressPreview} - onPressVideo={voiceInput.isBusy ? undefined : onPressVideo} + onRemove={isSubmissionLocked ? () => undefined : props.onRemoveDraftImage} + onPressPreview={isSubmissionLocked ? undefined : onPressPreview} + onPressVideo={isSubmissionLocked ? undefined : onPressVideo} onPressDocument={ - voiceInput.isBusy + isSubmissionLocked ? undefined : (attachment) => openDraftDocument({ @@ -807,7 +808,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps style={{ maxWidth: props.contentMaxWidth }} onLayout={(event) => measureRow("surfaceWidth", event.nativeEvent.layout.width)} > - {!voiceInput.isBusy && + {!isSubmissionLocked && composerMenu.trigger && (composerMenu.items.length > 0 || composerMenu.trigger.kind === "pull-request") ? ( @@ -874,6 +875,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps > {!usesCard ? ( { + if (!isSubmissionLocked) props.onChangeDraftMessage(text); + }} onSelectionChange={composerMenu.onSelectionChange} - onPasteImages={(uris) => void props.onNativePasteImages(uris)} + onPasteImages={(uris) => { + if (!isSubmissionLocked) void props.onNativePasteImages(uris); + }} onPasteText={(paste) => { + if (isSubmissionLocked) return; const insertPaste = () => { const insertion = replaceTextSelection({ value: paste.value, @@ -1045,8 +1052,8 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps size={30} borderRadius={8} compact - onPressPreview={onPressPreview} - onPressVideo={onPressVideo} + onPressPreview={isSubmissionLocked ? undefined : onPressPreview} + onPressVideo={isSubmissionLocked ? undefined : onPressVideo} /> ))} {stripAttachments.length > 3 ? ( @@ -1067,6 +1074,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps @@ -1139,6 +1147,7 @@ export const ThreadComposer = function ThreadComposer(props: ThreadComposerProps ) : (