Fix follow notifications from streaming being grouped (#32179)

This commit is contained in:
Renaud Chaput 2024-10-01 10:22:14 +02:00 committed by GitHub
parent 5839ee434b
commit 1be55ce244
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 37 deletions

View File

@ -70,6 +70,10 @@ function dispatchAssociatedRecords(
const supportedGroupedNotificationTypes = ['favourite', 'reblog']; const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
export function shouldGroupNotificationType(type: string) {
return supportedGroupedNotificationTypes.includes(type);
}
export const fetchNotifications = createDataLoadingThunk( export const fetchNotifications = createDataLoadingThunk(
'notificationGroups/fetch', 'notificationGroups/fetch',
async (_params, { getState }) => async (_params, { getState }) =>

View File

@ -21,6 +21,7 @@ import {
unmountNotifications, unmountNotifications,
refreshStaleNotificationGroups, refreshStaleNotificationGroups,
pollRecentNotifications, pollRecentNotifications,
shouldGroupNotificationType,
} from 'mastodon/actions/notification_groups'; } from 'mastodon/actions/notification_groups';
import { import {
disconnectTimeline, disconnectTimeline,
@ -205,6 +206,7 @@ function processNewNotification(
groups: NotificationGroupsState['groups'], groups: NotificationGroupsState['groups'],
notification: ApiNotificationJSON, notification: ApiNotificationJSON,
) { ) {
if (shouldGroupNotificationType(notification.type)) {
const existingGroupIndex = groups.findIndex( const existingGroupIndex = groups.findIndex(
(group) => (group) =>
group.type !== 'gap' && group.group_key === notification.group_key, group.type !== 'gap' && group.group_key === notification.group_key,
@ -240,12 +242,15 @@ function processNewNotification(
mergeGapsAround(groups, existingGroupIndex); mergeGapsAround(groups, existingGroupIndex);
groups.unshift(existingGroup); groups.unshift(existingGroup);
return;
} }
} else { }
// Create a new group }
// We have not found an existing group, create a new one
groups.unshift(createNotificationGroupFromNotificationJSON(notification)); groups.unshift(createNotificationGroupFromNotificationJSON(notification));
} }
}
function trimNotifications(state: NotificationGroupsState) { function trimNotifications(state: NotificationGroupsState) {
if (state.scrolledToTop && state.groups.length > NOTIFICATIONS_TRIM_LIMIT) { if (state.scrolledToTop && state.groups.length > NOTIFICATIONS_TRIM_LIMIT) {