[Glitch] Add added_to_collection and collection_updated notification types

Port 39c70649caf8237996b7acb2535c7c1b49c4c78a to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
Claire 2026-04-08 14:56:07 +02:00
parent 68a2b592bf
commit 22a7f785f5
2 changed files with 53 additions and 4 deletions

View File

@ -3,6 +3,7 @@
import type { AccountWarningAction } from 'flavours/glitch/models/notification_group'; import type { AccountWarningAction } from 'flavours/glitch/models/notification_group';
import type { ApiAccountJSON } from './accounts'; import type { ApiAccountJSON } from './accounts';
import type { ApiCollectionJSON } from './collections';
import type { ApiReportJSON } from './reports'; import type { ApiReportJSON } from './reports';
import type { ApiStatusJSON } from './statuses'; import type { ApiStatusJSON } from './statuses';
@ -22,6 +23,8 @@ export const allNotificationTypes: NotificationType[] = [
'moderation_warning', 'moderation_warning',
'severed_relationships', 'severed_relationships',
'annual_report', 'annual_report',
'added_to_collection',
'collection_update',
]; ];
export type NotificationWithStatusType = export type NotificationWithStatusType =
@ -42,7 +45,9 @@ export type NotificationType =
| 'severed_relationships' | 'severed_relationships'
| 'admin.sign_up' | 'admin.sign_up'
| 'admin.report' | 'admin.report'
| 'annual_report'; | 'annual_report'
| 'added_to_collection'
| 'collection_update';
export interface BaseNotificationJSON { export interface BaseNotificationJSON {
id: string; id: string;
@ -83,6 +88,26 @@ interface ReportNotificationJSON extends BaseNotificationJSON {
report: ApiReportJSON; report: ApiReportJSON;
} }
interface AddedToCollectionNotificationGroupJSON extends BaseNotificationGroupJSON {
type: 'added_to_collection';
collection: ApiCollectionJSON;
}
interface AddedToCollectionNotificationJSON extends BaseNotificationJSON {
type: 'added_to_collection';
collection: ApiCollectionJSON;
}
interface CollectionUpdateNotificationGroupJSON extends BaseNotificationGroupJSON {
type: 'collection_update';
collection: ApiCollectionJSON;
}
interface CollectionUpdateNotificationJSON extends BaseNotificationJSON {
type: 'collection_update';
collection: ApiCollectionJSON;
}
type SimpleNotificationTypes = 'follow' | 'follow_request' | 'admin.sign_up'; type SimpleNotificationTypes = 'follow' | 'follow_request' | 'admin.sign_up';
interface SimpleNotificationGroupJSON extends BaseNotificationGroupJSON { interface SimpleNotificationGroupJSON extends BaseNotificationGroupJSON {
type: SimpleNotificationTypes; type: SimpleNotificationTypes;
@ -146,7 +171,9 @@ export type ApiNotificationJSON =
| ReportNotificationJSON | ReportNotificationJSON
| AccountRelationshipSeveranceNotificationJSON | AccountRelationshipSeveranceNotificationJSON
| NotificationWithStatusJSON | NotificationWithStatusJSON
| ModerationWarningNotificationJSON; | ModerationWarningNotificationJSON
| AddedToCollectionNotificationJSON
| CollectionUpdateNotificationJSON;
export type ApiNotificationGroupJSON = export type ApiNotificationGroupJSON =
| SimpleNotificationGroupJSON | SimpleNotificationGroupJSON
@ -154,7 +181,9 @@ export type ApiNotificationGroupJSON =
| AccountRelationshipSeveranceNotificationGroupJSON | AccountRelationshipSeveranceNotificationGroupJSON
| NotificationGroupWithStatusJSON | NotificationGroupWithStatusJSON
| ModerationWarningNotificationGroupJSON | ModerationWarningNotificationGroupJSON
| AnnualReportNotificationGroupJSON; | AnnualReportNotificationGroupJSON
| AddedToCollectionNotificationGroupJSON
| CollectionUpdateNotificationGroupJSON;
export interface ApiNotificationGroupsResultJSON { export interface ApiNotificationGroupsResultJSON {
accounts: ApiAccountJSON[]; accounts: ApiAccountJSON[];

View File

@ -10,6 +10,8 @@ import type {
} from 'flavours/glitch/api_types/notifications'; } from 'flavours/glitch/api_types/notifications';
import type { ApiReportJSON } from 'flavours/glitch/api_types/reports'; import type { ApiReportJSON } from 'flavours/glitch/api_types/reports';
import type { ApiCollectionJSON } from '../api_types/collections';
// Maximum number of avatars displayed in a notification group // Maximum number of avatars displayed in a notification group
// This corresponds to the max length of `group.sampleAccountIds` // This corresponds to the max length of `group.sampleAccountIds`
export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8; export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8;
@ -87,6 +89,15 @@ export interface NotificationGroupAdminReport extends BaseNotification<'admin.re
report: Report; report: Report;
} }
type Collection = ApiCollectionJSON;
export interface NotificationGroupAddedToCollection extends BaseNotification<'added_to_collection'> {
collection: Collection;
}
export interface NotificationGroupCollectionUpdate extends BaseNotification<'collection_update'> {
collection: Collection;
}
export type NotificationGroup = export type NotificationGroup =
| NotificationGroupFavourite | NotificationGroupFavourite
| NotificationGroupReblog | NotificationGroupReblog
@ -102,7 +113,9 @@ export type NotificationGroup =
| NotificationGroupSeveredRelationships | NotificationGroupSeveredRelationships
| NotificationGroupAdminSignUp | NotificationGroupAdminSignUp
| NotificationGroupAdminReport | NotificationGroupAdminReport
| NotificationGroupAnnualReport; | NotificationGroupAnnualReport
| NotificationGroupAddedToCollection
| NotificationGroupCollectionUpdate;
function createReportFromJSON(reportJSON: ApiReportJSON): Report { function createReportFromJSON(reportJSON: ApiReportJSON): Report {
const { target_account, ...report } = reportJSON; const { target_account, ...report } = reportJSON;
@ -249,6 +262,13 @@ export function createNotificationGroupFromNotificationJSON(
notification.moderation_warning, notification.moderation_warning,
), ),
}; };
case 'added_to_collection':
case 'collection_update':
return {
...group,
type: notification.type,
collection: notification.collection,
};
default: default:
return { return {
...group, ...group,