mirror of
https://github.com/mastodon/mastodon.git
synced 2024-11-25 15:09:29 +00:00
Fix duplicate notifications in notification groups when using slow mode
Fixes #32993
This commit is contained in:
parent
7fc6ce0959
commit
1009459760
|
@ -17,6 +17,7 @@ export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8;
|
||||||
interface BaseNotificationGroup
|
interface BaseNotificationGroup
|
||||||
extends Omit<BaseNotificationGroupJSON, 'sample_account_ids'> {
|
extends Omit<BaseNotificationGroupJSON, 'sample_account_ids'> {
|
||||||
sampleAccountIds: string[];
|
sampleAccountIds: string[];
|
||||||
|
partial: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface BaseNotificationWithStatus<Type extends NotificationWithStatusType>
|
interface BaseNotificationWithStatus<Type extends NotificationWithStatusType>
|
||||||
|
@ -142,6 +143,7 @@ export function createNotificationGroupFromJSON(
|
||||||
return {
|
return {
|
||||||
statusId: statusId ?? undefined,
|
statusId: statusId ?? undefined,
|
||||||
sampleAccountIds,
|
sampleAccountIds,
|
||||||
|
partial: false,
|
||||||
...groupWithoutStatus,
|
...groupWithoutStatus,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -150,12 +152,14 @@ export function createNotificationGroupFromJSON(
|
||||||
return {
|
return {
|
||||||
report: createReportFromJSON(report),
|
report: createReportFromJSON(report),
|
||||||
sampleAccountIds,
|
sampleAccountIds,
|
||||||
|
partial: false,
|
||||||
...groupWithoutTargetAccount,
|
...groupWithoutTargetAccount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
case 'severed_relationships':
|
case 'severed_relationships':
|
||||||
return {
|
return {
|
||||||
...group,
|
...group,
|
||||||
|
partial: false,
|
||||||
event: createAccountRelationshipSeveranceEventFromJSON(group.event),
|
event: createAccountRelationshipSeveranceEventFromJSON(group.event),
|
||||||
sampleAccountIds,
|
sampleAccountIds,
|
||||||
};
|
};
|
||||||
|
@ -163,6 +167,7 @@ export function createNotificationGroupFromJSON(
|
||||||
const { moderation_warning, ...groupWithoutModerationWarning } = group;
|
const { moderation_warning, ...groupWithoutModerationWarning } = group;
|
||||||
return {
|
return {
|
||||||
...groupWithoutModerationWarning,
|
...groupWithoutModerationWarning,
|
||||||
|
partial: false,
|
||||||
moderationWarning: createAccountWarningFromJSON(moderation_warning),
|
moderationWarning: createAccountWarningFromJSON(moderation_warning),
|
||||||
sampleAccountIds,
|
sampleAccountIds,
|
||||||
};
|
};
|
||||||
|
@ -171,6 +176,7 @@ export function createNotificationGroupFromJSON(
|
||||||
const { annual_report, ...groupWithoutAnnualReport } = group;
|
const { annual_report, ...groupWithoutAnnualReport } = group;
|
||||||
return {
|
return {
|
||||||
...groupWithoutAnnualReport,
|
...groupWithoutAnnualReport,
|
||||||
|
partial: false,
|
||||||
annualReport: createAnnualReportEventFromJSON(annual_report),
|
annualReport: createAnnualReportEventFromJSON(annual_report),
|
||||||
sampleAccountIds,
|
sampleAccountIds,
|
||||||
};
|
};
|
||||||
|
@ -178,6 +184,7 @@ export function createNotificationGroupFromJSON(
|
||||||
default:
|
default:
|
||||||
return {
|
return {
|
||||||
sampleAccountIds,
|
sampleAccountIds,
|
||||||
|
partial: false,
|
||||||
...group,
|
...group,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -194,6 +201,7 @@ export function createNotificationGroupFromNotificationJSON(
|
||||||
page_min_id: notification.id,
|
page_min_id: notification.id,
|
||||||
page_max_id: notification.id,
|
page_max_id: notification.id,
|
||||||
latest_page_notification_at: notification.created_at,
|
latest_page_notification_at: notification.created_at,
|
||||||
|
partial: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
switch (notification.type) {
|
switch (notification.type) {
|
||||||
|
|
|
@ -534,10 +534,13 @@ export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
|
||||||
if (existingGroupIndex > -1) {
|
if (existingGroupIndex > -1) {
|
||||||
const existingGroup = state.groups[existingGroupIndex];
|
const existingGroup = state.groups[existingGroupIndex];
|
||||||
if (existingGroup && existingGroup.type !== 'gap') {
|
if (existingGroup && existingGroup.type !== 'gap') {
|
||||||
group.notifications_count += existingGroup.notifications_count;
|
if (group.partial) {
|
||||||
group.sampleAccountIds = group.sampleAccountIds
|
group.notifications_count +=
|
||||||
.concat(existingGroup.sampleAccountIds)
|
existingGroup.notifications_count;
|
||||||
.slice(0, NOTIFICATIONS_GROUP_MAX_AVATARS);
|
group.sampleAccountIds = group.sampleAccountIds
|
||||||
|
.concat(existingGroup.sampleAccountIds)
|
||||||
|
.slice(0, NOTIFICATIONS_GROUP_MAX_AVATARS);
|
||||||
|
}
|
||||||
state.groups.splice(existingGroupIndex, 1);
|
state.groups.splice(existingGroupIndex, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue