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
) : (