Notification action (#12742)

This commit is contained in:
Nicolas Mowen 2024-08-05 06:56:57 -06:00
parent 3abf89596a
commit 04fd05bc7d
2 changed files with 36 additions and 8 deletions

View File

@ -165,6 +165,7 @@ class WebPushClient(Communicator): # type: ignore[misc]
"direct_url": direct_url,
"image": image,
"id": reviewId,
"type": "alert",
}
),
)

View File

@ -5,6 +5,20 @@ self.addEventListener("push", function (event) {
if (event.data) {
// @ts-expect-error we know this exists
const data = event.data.json();
let actions = [];
switch (data.type ?? "unknown") {
case "alert":
actions = [
{
action: "markReviewed",
title: "Mark as Reviewed",
},
];
break;
}
// @ts-expect-error we know this exists
self.registration.showNotification(data.title, {
body: data.message,
@ -13,6 +27,7 @@ self.addEventListener("push", function (event) {
badge: "/images/maskable-badge.png",
tag: data.id,
data: { id: data.id, link: data.direct_url },
actions,
});
} else {
// pass
@ -26,6 +41,17 @@ self.addEventListener("notificationclick", (event) => {
// @ts-expect-error we know this exists
event.notification.close();
switch (event.action ?? "default") {
case "markReviewed":
if (event.notification.data) {
fetch("/api/reviews/viewed", {
method: "POST",
headers: { "Content-Type": "application/json", "X-CSRF-TOKEN": 1 },
body: JSON.stringify({ ids: [event.notification.data.id] }),
});
}
break;
default:
// @ts-expect-error we know this exists
if (event.notification.data) {
const url = event.notification.data.link;
@ -36,4 +62,5 @@ self.addEventListener("notificationclick", (event) => {
}
}
}
}
});