feat: notification rescind support

This commit is contained in:
Julian Lam
2024-09-12 22:14:24 -04:00
parent 028b6d74b2
commit d6bab25317
2 changed files with 18 additions and 4 deletions

View File

@@ -40,10 +40,21 @@ self.addEventListener('fetch', function (event) {
// Register event listener for the 'push' event.
self.addEventListener('push', function (event) {
// Keep the service worker alive until the notification is created.
const { title, body, data } = event.data.json();
event.waitUntil(
self.registration.showNotification(title, { body, data })
);
const { title, body, tag, data } = event.data.json();
if (title && body) {
event.waitUntil(
self.registration.showNotification(title, { body, tag, data })
);
} else if (tag) {
event.waitUntil(
self.registration.getNotifications({ tag }).then((notifications) => {
notifications.forEach((notification) => {
notification.close();
});
})
);
}
});
self.addEventListener('notificationclick', (event) => {

View File

@@ -317,10 +317,13 @@ Notifications.pushGroups = async function (notification, groupNames) {
Notifications.rescind = async function (nids) {
nids = Array.isArray(nids) ? nids : [nids];
await plugins.hooks.fire('static:notifications.rescind', { nids });
await Promise.all([
db.sortedSetRemove('notifications', nids),
db.deleteAll(nids.map(nid => `notifications:${nid}`)),
]);
plugins.hooks.fire('action:notifications.rescind', { nids });
};
Notifications.markRead = async function (nid, uid) {