From a2f76382572d9dfdd18ef202273ecb8bf255ccad Mon Sep 17 00:00:00 2001
From: Lim Chee Aun
Date: Fri, 12 Jul 2024 18:57:48 +0800
Subject: [PATCH] Experimental opt-in server-side grouped notifications
---
src/components/notification.jsx | 74 +++++++++++++++++++++++--
src/data/features.json | 3 +-
src/index.css | 8 ++-
src/pages/home.jsx | 11 ++--
src/pages/notifications.jsx | 52 +++++++++++++++--
src/pages/settings.jsx | 22 ++++++++
src/utils/group-notifications.jsx | 92 ++++++++++++++++++++++++++++++-
src/utils/states.js | 6 ++
8 files changed, 246 insertions(+), 22 deletions(-)
diff --git a/src/components/notification.jsx b/src/components/notification.jsx
index cb2180c7..cfe25022 100644
--- a/src/components/notification.jsx
+++ b/src/components/notification.jsx
@@ -149,6 +149,9 @@ function Notification({
moderation_warning,
_accounts,
_statuses,
+ // Grouped notification
+ sampleAccounts,
+ notificationsCount,
} = notification;
let { type } = notification;
@@ -167,12 +170,14 @@ function Notification({
let favsCount = 0;
let reblogsCount = 0;
if (type === 'favourite+reblog') {
- for (const account of _accounts) {
- if (account._types?.includes('favourite')) {
- favsCount++;
- }
- if (account._types?.includes('reblog')) {
- reblogsCount++;
+ if (_accounts) {
+ for (const account of _accounts) {
+ if (account._types?.includes('favourite')) {
+ favsCount++;
+ }
+ if (account._types?.includes('reblog')) {
+ reblogsCount++;
+ }
}
}
if (!reblogsCount && favsCount) type = 'favourite';
@@ -296,6 +301,15 @@ function Notification({
people
{' '}
>
+ ) : notificationsCount > 1 ? (
+ <>
+
+
+ {shortenNumber(notificationsCount)}
+ {' '}
+ people
+ {' '}
+ >
) : (
account && (
<>
@@ -405,6 +419,54 @@ function Notification({
)}
+ {!_accounts?.length && sampleAccounts?.length > 1 && (
+
+ {sampleAccounts.map((account) => (
+
+ {
+ e.preventDefault();
+ states.showAccount = account;
+ }}
+ >
+
+ {/* {type === 'favourite+reblog' && (
+
+ {account._types.map((type) => (
+
+ ))}
+
+ )} */}
+ {' '}
+
+ ))}
+ {notificationsCount > sampleAccounts.length && (
+
+ +{notificationsCount - sampleAccounts.length}
+
+
+ )}
+
+ )}
{_statuses?.length > 1 && (