From ab9aa25cd37f65edbb96dfd20d9a6c21b5b46a1f Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 13 Feb 2026 11:32:16 +0100 Subject: [PATCH] Fix delete & redraft of pending posts (#37839) --- app/javascript/mastodon/actions/statuses.js | 5 +++-- app/javascript/mastodon/reducers/compose.js | 2 +- app/serializers/rest/base_quote_serializer.rb | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/actions/statuses.js b/app/javascript/mastodon/actions/statuses.js index b883e986ddd..d714ed3849a 100644 --- a/app/javascript/mastodon/actions/statuses.js +++ b/app/javascript/mastodon/actions/statuses.js @@ -109,7 +109,7 @@ export function fetchStatusFail(id, error, skipLoading, parentQuotePostId) { }; } -export function redraft(status, raw_text) { +export function redraft(status, raw_text, quoted_status_id = null) { return (dispatch, getState) => { const maxOptions = getState().server.getIn(['server', 'configuration', 'polls', 'max_options']); @@ -117,6 +117,7 @@ export function redraft(status, raw_text) { type: REDRAFT, status, raw_text, + quoted_status_id, maxOptions, }); }; @@ -169,7 +170,7 @@ export function deleteStatus(id, withRedraft = false) { dispatch(importFetchedAccount(response.data.account)); if (withRedraft) { - dispatch(redraft(status, response.data.text)); + dispatch(redraft(status, response.data.text, response.data.quote?.quoted_status?.id)); ensureComposeIsVisible(getState); } else { dispatch(showAlert({ message: messages.deleteSuccess })); diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index e413f2893da..51508c777d8 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -532,7 +532,7 @@ export const composeReducer = (state = initialState, action) => { map.set('sensitive', action.status.get('sensitive')); map.set('language', action.status.get('language')); map.set('id', null); - map.set('quoted_status_id', action.status.getIn(['quote', 'quoted_status'], null)); + map.set('quoted_status_id', action.quoted_status_id); // Mastodon-authored posts can be expected to have at most one automatic approval policy map.set('quote_policy', action.status.getIn(['quote_approval', 'automatic', 0]) || 'nobody'); diff --git a/app/serializers/rest/base_quote_serializer.rb b/app/serializers/rest/base_quote_serializer.rb index 407bc961f6f..1ee20ea1f43 100644 --- a/app/serializers/rest/base_quote_serializer.rb +++ b/app/serializers/rest/base_quote_serializer.rb @@ -13,7 +13,7 @@ class REST::BaseQuoteSerializer < ActiveModel::Serializer end def quoted_status - object.quoted_status if object.accepted? && object.quoted_status.present? && !object.quoted_status&.reblog? && status_filter.filter_state_for_quote != 'unauthorized' + object.quoted_status if (object.accepted? || instance_options[:source_requested]) && object.quoted_status.present? && !object.quoted_status&.reblog? && status_filter.filter_state_for_quote != 'unauthorized' end private