Fix quickly switching notification filters resulting in empty or incorrect list (#19052)
Follow-up to #18960 The aforementioned PR fixed an issue in which switching notification filters while notifications were loading prevented the query for the new filter from running, but another issue remained: if the first query completed after the second one, its results would override the second one, thus leading to the same issue. This commit cancels the first request if it is still running, before issuing the second one.lolsob-rspec
parent
1d3d86fa53
commit
cd8d6a286e
|
@ -141,15 +141,22 @@ const excludeTypesFromFilter = filter => {
|
|||
|
||||
const noOp = () => {};
|
||||
|
||||
let expandNotificationsController = new AbortController();
|
||||
|
||||
export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) {
|
||||
return (dispatch, getState) => {
|
||||
const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']);
|
||||
const notifications = getState().get('notifications');
|
||||
const isLoadingMore = !!maxId;
|
||||
|
||||
if (notifications.get('isLoading') && !forceLoad) {
|
||||
done();
|
||||
return;
|
||||
if (notifications.get('isLoading')) {
|
||||
if (forceLoad) {
|
||||
expandNotificationsController.abort();
|
||||
expandNotificationsController = new AbortController();
|
||||
} else {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const params = {
|
||||
|
@ -174,7 +181,7 @@ export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) {
|
|||
|
||||
dispatch(expandNotificationsRequest(isLoadingMore));
|
||||
|
||||
api(getState).get('/api/v1/notifications', { params }).then(response => {
|
||||
api(getState).get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }).then(response => {
|
||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||
|
||||
dispatch(importFetchedAccounts(response.data.map(item => item.account)));
|
||||
|
@ -215,7 +222,7 @@ export function expandNotificationsFail(error, isLoadingMore) {
|
|||
type: NOTIFICATIONS_EXPAND_FAIL,
|
||||
error,
|
||||
skipLoading: !isLoadingMore,
|
||||
skipAlert: !isLoadingMore,
|
||||
skipAlert: !isLoadingMore || error.name === 'AbortError',
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue