summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/utils
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/utils')
-rw-r--r--packages/app/src/utils/notification-click.test.ts26
-rw-r--r--packages/app/src/utils/notification-click.ts12
2 files changed, 38 insertions, 0 deletions
diff --git a/packages/app/src/utils/notification-click.test.ts b/packages/app/src/utils/notification-click.test.ts
new file mode 100644
index 000000000..76535f83a
--- /dev/null
+++ b/packages/app/src/utils/notification-click.test.ts
@@ -0,0 +1,26 @@
+import { describe, expect, test } from "bun:test"
+import { handleNotificationClick } from "./notification-click"
+
+describe("notification click", () => {
+ test("focuses and navigates when href exists", () => {
+ const calls: string[] = []
+ handleNotificationClick("/abc/session/123", {
+ focus: () => calls.push("focus"),
+ location: {
+ assign: (href) => calls.push(href),
+ },
+ })
+ expect(calls).toEqual(["focus", "/abc/session/123"])
+ })
+
+ test("only focuses when href is missing", () => {
+ const calls: string[] = []
+ handleNotificationClick(undefined, {
+ focus: () => calls.push("focus"),
+ location: {
+ assign: (href) => calls.push(href),
+ },
+ })
+ expect(calls).toEqual(["focus"])
+ })
+})
diff --git a/packages/app/src/utils/notification-click.ts b/packages/app/src/utils/notification-click.ts
new file mode 100644
index 000000000..1234cd1d6
--- /dev/null
+++ b/packages/app/src/utils/notification-click.ts
@@ -0,0 +1,12 @@
+type WindowTarget = {
+ focus: () => void
+ location: {
+ assign: (href: string) => void
+ }
+}
+
+export const handleNotificationClick = (href?: string, target: WindowTarget = window) => {
+ target.focus()
+ if (!href) return
+ target.location.assign(href)
+}