fix(notifications): click navigates to specific message, not inbox
CI / Build & Quality Checks (push) Successful in 10m30s
CI / Trigger Desktop Build (push) Successful in 7s

OS notifications now show the real message body ("user: text" instead
of "New inbox notification from user"), clicking jumps directly to the
room at the triggering event, and window.focus() brings the tab to
front. Reminder toasts also link to the specific event via eventId.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 18:37:19 -04:00
parent 2b5c6fd606
commit f054abfbd2
2 changed files with 13 additions and 8 deletions
+10 -6
View File
@@ -19,7 +19,6 @@ import {
getDirectRoomPath,
getHomeRoomPath,
getInboxInvitesPath,
getInboxNotificationsPath,
} from '../pathUtils';
import { mDirectAtom } from '../../state/mDirectList';
import {
@@ -255,6 +254,10 @@ function MessageNotifications() {
eventId: string;
body?: string;
}) => {
const roomPath = mDirects.has(roomId)
? getDirectRoomPath(roomId, eventId)
: getHomeRoomPath(roomId, eventId);
if (document.hasFocus()) {
setToast({
id: `${roomId}-${eventId}-${Date.now()}`,
@@ -263,7 +266,7 @@ function MessageNotifications() {
body: (body ?? '').slice(0, 80),
roomName,
roomId,
hashPath: mDirects.has(roomId) ? getDirectRoomPath(roomId) : getHomeRoomPath(roomId),
hashPath: roomPath,
});
return;
}
@@ -271,12 +274,13 @@ function MessageNotifications() {
const noti = new window.Notification(roomName, {
icon: roomAvatar,
badge: roomAvatar,
body: `New inbox notification from ${username}`,
body: body ? `${username}: ${body}`.slice(0, 120) : username,
silent: true,
});
noti.onclick = () => {
if (!window.closed) navigate(getInboxNotificationsPath());
window.focus();
navigate(roomPath);
noti.close();
notifRef.current = undefined;
};
@@ -400,8 +404,8 @@ function ReminderMonitor() {
firedRef.current.add(key);
const room = mx.getRoom(r.roomId);
const hashPath = mDirects.has(r.roomId)
? getDirectRoomPath(r.roomId)
: getHomeRoomPath(r.roomId);
? getDirectRoomPath(r.roomId, r.eventId)
: getHomeRoomPath(r.roomId, r.eventId);
setToast({
id: `reminder-${key}`,
displayName: 'Reminder',