Fix duplicate notifications in notification groups when using slow mode

Fixes #32993
This commit is contained in:
Claire 2024-11-21 11:05:39 +01:00
parent 7fc6ce0959
commit 1009459760
2 changed files with 15 additions and 4 deletions

View file

@ -17,6 +17,7 @@ export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8;
interface BaseNotificationGroup
extends Omit<BaseNotificationGroupJSON, 'sample_account_ids'> {
sampleAccountIds: string[];
partial: boolean;
}
interface BaseNotificationWithStatus<Type extends NotificationWithStatusType>
@ -142,6 +143,7 @@ export function createNotificationGroupFromJSON(
return {
statusId: statusId ?? undefined,
sampleAccountIds,
partial: false,
...groupWithoutStatus,
};
}
@ -150,12 +152,14 @@ export function createNotificationGroupFromJSON(
return {
report: createReportFromJSON(report),
sampleAccountIds,
partial: false,
...groupWithoutTargetAccount,
};
}
case 'severed_relationships':
return {
...group,
partial: false,
event: createAccountRelationshipSeveranceEventFromJSON(group.event),
sampleAccountIds,
};
@ -163,6 +167,7 @@ export function createNotificationGroupFromJSON(
const { moderation_warning, ...groupWithoutModerationWarning } = group;
return {
...groupWithoutModerationWarning,
partial: false,
moderationWarning: createAccountWarningFromJSON(moderation_warning),
sampleAccountIds,
};
@ -171,6 +176,7 @@ export function createNotificationGroupFromJSON(
const { annual_report, ...groupWithoutAnnualReport } = group;
return {
...groupWithoutAnnualReport,
partial: false,
annualReport: createAnnualReportEventFromJSON(annual_report),
sampleAccountIds,
};
@ -178,6 +184,7 @@ export function createNotificationGroupFromJSON(
default:
return {
sampleAccountIds,
partial: false,
...group,
};
}
@ -194,6 +201,7 @@ export function createNotificationGroupFromNotificationJSON(
page_min_id: notification.id,
page_max_id: notification.id,
latest_page_notification_at: notification.created_at,
partial: true,
};
switch (notification.type) {

View file

@ -534,10 +534,13 @@ export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
if (existingGroupIndex > -1) {
const existingGroup = state.groups[existingGroupIndex];
if (existingGroup && existingGroup.type !== 'gap') {
group.notifications_count += existingGroup.notifications_count;
if (group.partial) {
group.notifications_count +=
existingGroup.notifications_count;
group.sampleAccountIds = group.sampleAccountIds
.concat(existingGroup.sampleAccountIds)
.slice(0, NOTIFICATIONS_GROUP_MAX_AVATARS);
}
state.groups.splice(existingGroupIndex, 1);
}
}