Fix quickly switching notification filters resulting in empty or incorrect list (#18960)
parent
50487db122
commit
afb8bc97d0
|
@ -141,13 +141,13 @@ const excludeTypesFromFilter = filter => {
|
||||||
|
|
||||||
const noOp = () => {};
|
const noOp = () => {};
|
||||||
|
|
||||||
export function expandNotifications({ maxId } = {}, 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')) {
|
if (notifications.get('isLoading') && !forceLoad) {
|
||||||
done();
|
done();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -243,7 +243,7 @@ export function setFilter (filterType) {
|
||||||
path: ['notifications', 'quickFilter', 'active'],
|
path: ['notifications', 'quickFilter', 'active'],
|
||||||
value: filterType,
|
value: filterType,
|
||||||
});
|
});
|
||||||
dispatch(expandNotifications());
|
dispatch(expandNotifications({ forceLoad: true }));
|
||||||
dispatch(saveSettings());
|
dispatch(saveSettings());
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -41,7 +41,7 @@ const initialState = ImmutableMap({
|
||||||
lastReadId: '0',
|
lastReadId: '0',
|
||||||
readMarkerId: '0',
|
readMarkerId: '0',
|
||||||
isTabVisible: true,
|
isTabVisible: true,
|
||||||
isLoading: false,
|
isLoading: 0,
|
||||||
browserSupport: false,
|
browserSupport: false,
|
||||||
browserPermission: 'default',
|
browserPermission: 'default',
|
||||||
});
|
});
|
||||||
|
@ -115,7 +115,7 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutable.set('isLoading', false);
|
mutable.update('isLoading', (nbLoading) => nbLoading - 1);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -214,9 +214,9 @@ export default function notifications(state = initialState, action) {
|
||||||
case NOTIFICATIONS_LOAD_PENDING:
|
case NOTIFICATIONS_LOAD_PENDING:
|
||||||
return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0);
|
return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0);
|
||||||
case NOTIFICATIONS_EXPAND_REQUEST:
|
case NOTIFICATIONS_EXPAND_REQUEST:
|
||||||
return state.set('isLoading', true);
|
return state.update('isLoading', (nbLoading) => nbLoading + 1);
|
||||||
case NOTIFICATIONS_EXPAND_FAIL:
|
case NOTIFICATIONS_EXPAND_FAIL:
|
||||||
return state.set('isLoading', false);
|
return state.update('isLoading', (nbLoading) => nbLoading - 1);
|
||||||
case NOTIFICATIONS_FILTER_SET:
|
case NOTIFICATIONS_FILTER_SET:
|
||||||
return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', true);
|
return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', true);
|
||||||
case NOTIFICATIONS_SCROLL_TOP:
|
case NOTIFICATIONS_SCROLL_TOP:
|
||||||
|
|
Loading…
Reference in New Issue