From 3ae7effb6dbcb6b34b96e018d6fd6ba1bc30177a Mon Sep 17 00:00:00 2001 From: noellabo Date: Fri, 23 Jul 2021 19:55:56 +0900 Subject: [PATCH] Fix to dismiss quote where the target post was deleted --- app/javascript/mastodon/actions/timelines.js | 4 ++-- .../features/status/components/detailed_status.js | 2 +- app/javascript/mastodon/reducers/statuses.js | 8 ++++++-- app/javascript/mastodon/reducers/timelines.js | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index d82bf1d0d..6fb72e5f1 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -60,14 +60,14 @@ export function deleteFromTimelines(id) { return (dispatch, getState) => { const accountId = getState().getIn(['statuses', id, 'account']); const references = getState().get('statuses').filter(status => status.get('reblog') === id).map(status => status.get('id')); - const reblogOf = getState().getIn(['statuses', id, 'reblog'], null); + const quotes = getState().get('statuses').filter(status => status.get('quote_id') === id).map(status => status.get('id')); dispatch({ type: TIMELINE_DELETE, id, accountId, references, - reblogOf, + quotes, }); }; }; diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index 9d16a9aa9..a55b5a120 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -252,7 +252,7 @@ class DetailedStatus extends ImmutablePureComponent { } } else if (quote_muted) { quote = ( -
+
diff --git a/app/javascript/mastodon/reducers/statuses.js b/app/javascript/mastodon/reducers/statuses.js index 7f656ba90..226e4bf53 100644 --- a/app/javascript/mastodon/reducers/statuses.js +++ b/app/javascript/mastodon/reducers/statuses.js @@ -25,11 +25,15 @@ const importStatus = (state, status) => state.set(status.id, fromJS(status)); const importStatuses = (state, statuses) => state.withMutations(mutable => statuses.forEach(status => importStatus(mutable, status))); -const deleteStatus = (state, id, references) => { +const deleteStatus = (state, id, references, quotes) => { references.forEach(ref => { state = deleteStatus(state, ref, []); }); + quotes.forEach(ref => { + state = state.setIn([ref, 'quote_id'], null).setIn([ref, 'quote'], null) + }); + return state.delete(id); }; @@ -86,7 +90,7 @@ export default function statuses(state = initialState, action) { action.ids.forEach(id => map.setIn([id, 'quote_hidden'], true)); }); case TIMELINE_DELETE: - return deleteStatus(state, action.id, action.references); + return deleteStatus(state, action.id, action.references, action.quotes); default: return state; } diff --git a/app/javascript/mastodon/reducers/timelines.js b/app/javascript/mastodon/reducers/timelines.js index b66c19fd5..9249227aa 100644 --- a/app/javascript/mastodon/reducers/timelines.js +++ b/app/javascript/mastodon/reducers/timelines.js @@ -151,7 +151,7 @@ export default function timelines(state = initialState, action) { case TIMELINE_UPDATE: return updateTimeline(state, action.timeline, fromJS(action.status), action.usePendingItems); case TIMELINE_DELETE: - return deleteStatus(state, action.id, action.references, action.reblogOf); + return deleteStatus(state, action.id, action.references); case TIMELINE_CLEAR: return clearTimeline(state, action.timeline); case ACCOUNT_BLOCK_SUCCESS: