Fix not being able to load more notifications after trimming (#31652)

This commit is contained in:
Claire 2024-09-02 22:14:04 +02:00 committed by GitHub
parent 491033c86c
commit c1795ee963
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -248,8 +248,9 @@ function processNewNotification(
} }
function trimNotifications(state: NotificationGroupsState) { function trimNotifications(state: NotificationGroupsState) {
if (state.scrolledToTop) { if (state.scrolledToTop && state.groups.length > NOTIFICATIONS_TRIM_LIMIT) {
state.groups.splice(NOTIFICATIONS_TRIM_LIMIT); state.groups.splice(NOTIFICATIONS_TRIM_LIMIT);
ensureTrailingGap(state.groups);
} }
} }
@ -400,6 +401,28 @@ function ensureLeadingGap(
} }
} }
// Ensure the groups list ends with a gap suitable for loading more, mutating it to append one if needed
function ensureTrailingGap(
groups: NotificationGroupsState['groups'],
): NotificationGap {
const groupOrGap = groups.at(-1);
if (groupOrGap?.type === 'gap') {
// We're expecting older notifications, so discard sinceId if it's set
groupOrGap.sinceId = undefined;
return groupOrGap;
} else {
const gap: NotificationGap = {
type: 'gap',
maxId: groupOrGap?.page_min_id,
};
groups.push(gap);
return gap;
}
}
export const notificationGroupsReducer = createReducer<NotificationGroupsState>( export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
initialState, initialState,
(builder) => { (builder) => {