[Glitch] Fix quickly switching notification filters resulting in empty or incorrect list

Port 55bef1e34f to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
remotes/1703361221475462875/rebase/4.0.0rc1
Claire 2022-08-25 17:36:54 +02:00
parent 43a1bfd05d
commit d99f91bceb
1 changed files with 12 additions and 5 deletions

View File

@ -153,15 +153,22 @@ const excludeTypesFromFilter = filter => {
const noOp = () => {}; const noOp = () => {};
let expandNotificationsController = new AbortController();
export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) { export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) {
return (dispatch, getState) => { return (dispatch, getState) => {
const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']); const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']);
const notifications = getState().get('notifications'); const notifications = getState().get('notifications');
const isLoadingMore = !!maxId; const isLoadingMore = !!maxId;
if (notifications.get('isLoading') && !forceLoad) { if (notifications.get('isLoading')) {
done(); if (forceLoad) {
return; expandNotificationsController.abort();
expandNotificationsController = new AbortController();
} else {
done();
return;
}
} }
const params = { const params = {
@ -186,7 +193,7 @@ export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) {
dispatch(expandNotificationsRequest(isLoadingMore)); 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'); const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedAccounts(response.data.map(item => item.account))); dispatch(importFetchedAccounts(response.data.map(item => item.account)));
@ -227,7 +234,7 @@ export function expandNotificationsFail(error, isLoadingMore) {
type: NOTIFICATIONS_EXPAND_FAIL, type: NOTIFICATIONS_EXPAND_FAIL,
error, error,
skipLoading: !isLoadingMore, skipLoading: !isLoadingMore,
skipAlert: !isLoadingMore, skipAlert: !isLoadingMore || error.name === 'AbortError',
}; };
}; };