diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx
index f8d646b07..b7cd99511 100644
--- a/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx
+++ b/app/javascript/mastodon/features/notifications_v2/components/notification_mention.tsx
@@ -2,26 +2,33 @@ import { FormattedMessage } from 'react-intl';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import ReplyIcon from '@/material-icons/400-24px/reply-fill.svg?react';
-import type { StatusVisibility } from 'mastodon/api_types/statuses';
+import { me } from 'mastodon/initial_state';
import type { NotificationGroupMention } from 'mastodon/models/notification_group';
+import type { Status } from 'mastodon/models/status';
import { useAppSelector } from 'mastodon/store';
import type { LabelRenderer } from './notification_group_with_status';
import { NotificationWithStatus } from './notification_with_status';
-const labelRenderer: LabelRenderer = (values) => (
+const mentionLabelRenderer: LabelRenderer = () => (
+
+);
+
+const privateMentionLabelRenderer: LabelRenderer = () => (
);
-const privateMentionLabelRenderer: LabelRenderer = (values) => (
+const replyLabelRenderer: LabelRenderer = () => (
+
+);
+
+const privateReplyLabelRenderer: LabelRenderer = () => (
);
@@ -29,27 +36,30 @@ export const NotificationMention: React.FC<{
notification: NotificationGroupMention;
unread: boolean;
}> = ({ notification, unread }) => {
- const statusVisibility = useAppSelector(
- (state) =>
- state.statuses.getIn([
- notification.statusId,
- 'visibility',
- ]) as StatusVisibility,
- );
+ const [isDirect, isReply] = useAppSelector((state) => {
+ const status = state.statuses.get(notification.statusId) as Status;
+
+ return [
+ status.get('visibility') === 'direct',
+ status.get('in_reply_to_account_id') === me,
+ ] as const;
+ });
+
+ let labelRenderer = mentionLabelRenderer;
+
+ if (isReply && isDirect) labelRenderer = privateReplyLabelRenderer;
+ else if (isReply) labelRenderer = replyLabelRenderer;
+ else if (isDirect) labelRenderer = privateMentionLabelRenderer;
return (
);
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 8db48c1a2..86afa7cd0 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -482,7 +482,11 @@
"notification.favourite": "{name} favorited your post",
"notification.follow": "{name} followed you",
"notification.follow_request": "{name} has requested to follow you",
- "notification.mention": "{name} mentioned you",
+ "notification.label.mention": "Mention",
+ "notification.label.private_mention": "Private mention",
+ "notification.label.private_reply": "Private reply",
+ "notification.label.reply": "Reply",
+ "notification.mention": "Mention",
"notification.moderation-warning.learn_more": "Learn more",
"notification.moderation_warning": "You have received a moderation warning",
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
@@ -494,7 +498,6 @@
"notification.moderation_warning.action_suspend": "Your account has been suspended.",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you voted in has ended",
- "notification.private_mention": "{name} privately mentioned you",
"notification.reblog": "{name} boosted your post",
"notification.relationships_severance_event": "Lost connections with {name}",
"notification.relationships_severance_event.account_suspension": "An admin from {from} has suspended {target}, which means you can no longer receive updates from them or interact with them.",