diff --git a/src/components/ComposeBox.tsx b/src/components/ComposeBox.tsx index ef43d48a..9867baeb 100644 --- a/src/components/ComposeBox.tsx +++ b/src/components/ComposeBox.tsx @@ -224,6 +224,26 @@ export function ComposeBox({ const voiceRecorder = useVoiceRecorder(); const [isPublishingVoice, setIsPublishingVoice] = useState(false); + const resetComposeState = useCallback(() => { + setContent(''); + setCwEnabled(false); + setCwText(''); + setExpanded(false); + setPickerOpen(false); + setTrayOpen(false); + setInternalPreviewMode(false); + setMode(initialMode); + setPollQuestion(''); + setPollOptions([{ id: pollOptionId(), label: '' }, { id: pollOptionId(), label: '' }]); + setPollType('singlechoice'); + setPollDuration(7); + setRemovedEmbeds(new Set()); + setUploadedFileTags([]); + setUploadedFileGroups(new Map()); + setWebxdcUuids(new Map()); + setWebxdcMetas(new Map()); + }, [initialMode]); + // Use controlled preview mode if provided, otherwise use internal state const previewMode = controlledPreviewMode !== undefined ? controlledPreviewMode : internalPreviewMode; @@ -928,15 +948,7 @@ export function ComposeBox({ }); } - setContent(''); - setCwEnabled(false); - setCwText(''); - setExpanded(false); - setRemovedEmbeds(new Set()); - setUploadedFileTags([]); - setUploadedFileGroups(new Map()); - setWebxdcUuids(new Map()); - setWebxdcMetas(new Map()); + resetComposeState(); // Optimistically bump the reply count on the parent event if (replyTo && !(replyTo instanceof URL)) { queryClient.setQueryData(['event-stats', replyTo.id], (prev) => @@ -984,12 +996,7 @@ export function ComposeBox({ try { await createEvent({ kind: 1068, content: pollQuestion.trim(), tags }); - // Reset poll state - setMode('post'); - setPollQuestion(''); - setPollOptions([{ id: pollOptionId(), label: '' }, { id: pollOptionId(), label: '' }]); - setPollType('singlechoice'); - setPollDuration(7); + resetComposeState(); queryClient.invalidateQueries({ queryKey: ['feed'] }); toast({ title: 'Poll published!' }); onSuccess?.(); @@ -1007,7 +1014,7 @@ export function ComposeBox({ if (!user && compact) return null; return ( -
+
{/* Preview toggle at top when not controlled and has previewable content */} {hasPreviewableContent && controlledPreviewMode === undefined && (