fix(notifications): click navigates to specific message, not inbox
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:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user