diff --git a/client/src/components/Notifications/NotificationCard.vue b/client/src/components/Notifications/NotificationCard.vue index f88c1a6ddb4..8746d844792 100644 --- a/client/src/components/Notifications/NotificationCard.vue +++ b/client/src/components/Notifications/NotificationCard.vue @@ -12,6 +12,7 @@ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import { BLink } from "bootstrap-vue"; import { formatDistanceToNow, parseISO } from "date-fns"; import { computed } from "vue"; +import { useRouter } from "vue-router/composables"; import type { UserNotification } from "@/api/notifications"; import type { CardAction } from "@/components/Common/GCard.types"; @@ -32,8 +33,30 @@ const props = defineProps<{ const emit = defineEmits(["select"]); const notificationsStore = useNotificationsStore(); +const router = useRouter(); -const { renderMarkdown } = useMarkdown({ openLinksInNewPage: true }); +const { renderMarkdown } = useMarkdown({ openLinksInNewPage: false }); + +function handleMessageClick(event: MouseEvent) { + const target = event.target as HTMLElement; + const anchor = target.closest("a"); + + if (anchor) { + const href = anchor.getAttribute("href"); + if (href) { + // Check if this is an internal link (same origin or relative path) + try { + const url = new URL(href, window.location.origin); + if (url.origin === window.location.origin) { + event.preventDefault(); + router.push(url.pathname + url.search + url.hash); + } + } catch { + // If URL parsing fails, let the browser handle it + } + } + } +} const title = computed(() => { if (props.notification.category === "new_shared_item") { @@ -154,7 +177,10 @@ function markNotificationAsSeen() { >{{ " " }} with you.