diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index ac3033dd34..69f923cc58 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -349,26 +349,28 @@ export const ComposePost = ({ const handleSaveDraft = React.useCallback(async () => { try { - await saveDraft({ + const savedDraft = await saveDraft({ composerState, replyTo, existingDraftId: composerState.draftId, }) + composerDispatch({type: 'mark_saved', draftId: savedDraft.id}) onClose() } catch (e) { logger.error('Failed to save draft', {error: e}) setError(_(msg`Failed to save draft`)) } - }, [saveDraft, composerState, replyTo, onClose, _]) + }, [saveDraft, composerState, replyTo, composerDispatch, onClose, _]) // Save without closing - for use by DraftsButton const saveCurrentDraft = React.useCallback(async () => { - await saveDraft({ + const savedDraft = await saveDraft({ composerState, replyTo, existingDraftId: composerState.draftId, }) - }, [saveDraft, composerState, replyTo]) + composerDispatch({type: 'mark_saved', draftId: savedDraft.id}) + }, [saveDraft, composerState, replyTo, composerDispatch]) // Check if composer is empty (no content to save) const isComposerEmpty = React.useMemo(() => { diff --git a/src/view/com/composer/state/composer.ts b/src/view/com/composer/state/composer.ts index 8ac26d1feb..7fcb462196 100644 --- a/src/view/com/composer/state/composer.ts +++ b/src/view/com/composer/state/composer.ts @@ -136,6 +136,10 @@ export type ComposerAction = | { type: 'clear' } + | { + type: 'mark_saved' + draftId: string + } export const MAX_IMAGES = 4 @@ -346,6 +350,13 @@ export function composerReducer( }, } } + case 'mark_saved': { + return { + ...state, + isDirty: false, + draftId: action.draftId, + } + } } }