From c8b9e60ec123c458efff83eedcfd07f067ef05ae Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 Aug 2024 15:35:15 +0200 Subject: [PATCH] Fix mutes and blocks not immediately cleaning up notification requests in Web UI (#31316) --- .../mastodon/reducers/notification_requests.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/javascript/mastodon/reducers/notification_requests.js b/app/javascript/mastodon/reducers/notification_requests.js index 4247062a58..1aaf167fa6 100644 --- a/app/javascript/mastodon/reducers/notification_requests.js +++ b/app/javascript/mastodon/reducers/notification_requests.js @@ -1,5 +1,6 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; +import { blockAccountSuccess, muteAccountSuccess } from 'mastodon/actions/accounts'; import { NOTIFICATION_REQUESTS_EXPAND_REQUEST, NOTIFICATION_REQUESTS_EXPAND_SUCCESS, @@ -51,6 +52,14 @@ const removeRequest = (state, id) => { return state.update('items', list => list.filterNot(item => item.get('id') === id)); }; +const removeRequestByAccount = (state, account_id) => { + if (state.getIn(['current', 'item', 'account']) === account_id) { + state = state.setIn(['current', 'removed'], true); + } + + return state.update('items', list => list.filterNot(item => item.get('account') === account_id)); +}; + export const notificationRequestsReducer = (state = initialState, action) => { switch(action.type) { case NOTIFICATION_REQUESTS_FETCH_SUCCESS: @@ -74,6 +83,10 @@ export const notificationRequestsReducer = (state = initialState, action) => { case NOTIFICATION_REQUEST_ACCEPT_REQUEST: case NOTIFICATION_REQUEST_DISMISS_REQUEST: return removeRequest(state, action.id); + case blockAccountSuccess.type: + return removeRequestByAccount(state, action.payload.relationship.id); + case muteAccountSuccess.type: + return action.payload.relationship.muting_notifications ? removeRequestByAccount(state, action.payload.relationship.id) : state; case NOTIFICATION_REQUEST_FETCH_REQUEST: return state.set('current', initialState.get('current').set('isLoading', true)); case NOTIFICATION_REQUEST_FETCH_SUCCESS: