/** * Notification normalizer: * Converts API notifications into our internal format. * @see {@link https://docs.joinmastodon.org/entities/notification/} */ import { List as ImmutableList, Map as ImmutableMap, Record as ImmutableRecord, fromJS, } from 'immutable'; import type { Account, Status, EmbeddedEntity } from 'soapbox/types/entities'; // https://docs.joinmastodon.org/entities/notification/ export const NotificationRecord = ImmutableRecord({ account: null as EmbeddedEntity, accounts: null as ImmutableList> | null, chat_message: null as ImmutableMap | string | null, // pleroma:chat_mention created_at: new Date(), emoji: null as string | null, // pleroma:emoji_reaction emoji_url: null as string | null, // pleroma:emoji_reaction id: '', status: null as EmbeddedEntity, target: null as EmbeddedEntity, // move type: '', total_count: null as number | null, // grouped notifications }); const normalizeType = (notification: ImmutableMap) => { if (notification.get('type') === 'group_mention') { return notification.set('type', 'mention'); } return notification; }; export const normalizeNotification = (notification: Record) => { return NotificationRecord( ImmutableMap(fromJS(notification)) .withMutations((notification: ImmutableMap) => { normalizeType(notification); }), ); };