From 57db8778a4cd9cd933769bbef832e1bc14e478d3 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Thu, 1 Aug 2024 20:18:10 +0800 Subject: [PATCH] Adapt to new changes in group notifications API Reference: https://github.com/mastodon/mastodon/pull/31214 --- src/pages/home.jsx | 4 ++-- src/pages/notifications.jsx | 3 ++- src/utils/group-notifications.jsx | 20 +++++++++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/pages/home.jsx b/src/pages/home.jsx index 6cfcfa19..f10f633e 100644 --- a/src/pages/home.jsx +++ b/src/pages/home.jsx @@ -12,7 +12,7 @@ import Loader from '../components/loader'; import Notification from '../components/notification'; import { api } from '../utils/api'; import db from '../utils/db'; -import groupNotifications from '../utils/group-notifications'; +import { massageNotifications2 } from '../utils/group-notifications'; import states, { saveStatus } from '../utils/states'; import { getCurrentAccountNS } from '../utils/store-utils'; @@ -98,7 +98,7 @@ function NotificationsMenu({ anchorRef, state, onClose }) { async function fetchNotifications() { const allNotifications = await notificationsIterator.next(); - const notifications = allNotifications.value; + const notifications = massageNotifications2(allNotifications.value); if (notifications?.length) { notifications.forEach((notification) => { diff --git a/src/pages/notifications.jsx b/src/pages/notifications.jsx index 6fa606ae..a987528e 100644 --- a/src/pages/notifications.jsx +++ b/src/pages/notifications.jsx @@ -22,6 +22,7 @@ import { api } from '../utils/api'; import enhanceContent from '../utils/enhance-content'; import groupNotifications, { groupNotifications2, + massageNotifications2, } from '../utils/group-notifications'; import handleContentLinks from '../utils/handle-content-links'; import mem from '../utils/mem'; @@ -120,7 +121,7 @@ function Notifications({ columnMode }) { }; } const allNotifications = await notificationsIterator.current.next(); - const notifications = allNotifications.value; + const notifications = massageNotifications2(allNotifications.value); if (notifications?.length) { notifications.forEach((notification) => { diff --git a/src/utils/group-notifications.jsx b/src/utils/group-notifications.jsx index ee64ffef..f67d9d57 100644 --- a/src/utils/group-notifications.jsx +++ b/src/utils/group-notifications.jsx @@ -28,8 +28,26 @@ export function fixNotifications(notifications) { }); } +export function massageNotifications2(notifications) { + if (notifications?.accounts) { + const { accounts, notificationGroups, statuses } = notifications; + return notificationGroups.map((group) => { + const { sampleAccountIds, statusId } = group; + const sampleAccounts = + sampleAccountIds?.map((id) => accounts.find((a) => a.id === id)) || []; + const status = statuses?.find((s) => s.id === statusId) || null; + return { + ...group, + sampleAccounts, + status, + }; + }); + } + return notifications; +} + export function groupNotifications2(groupNotifications) { - // Massage grouped notifications to look like faux grouped notifications above + // Make grouped notifications to look like faux grouped notifications const newGroupNotifications = groupNotifications.map((gn) => { const { latestPageNotificationAt,