33 lines
893 B
TypeScript
33 lines
893 B
TypeScript
import { removeBadge } from "~/utils/pwa.client";
|
||
|
||
declare let self: ServiceWorkerGlobalScope;
|
||
|
||
// noinspection TypeScriptUnresolvedVariable
|
||
export default async function handleNotificationClick(event: NotificationEvent) {
|
||
console.debug("On notification click: ", event.notification.tag);
|
||
// Android doesn’t close the notification when you click on it
|
||
// See: http://crbug.com/463146
|
||
event.notification.close();
|
||
await removeBadge();
|
||
|
||
const url = getUrl(event.notification.data);
|
||
return self.clients.openWindow?.(url);
|
||
}
|
||
|
||
type NotificationData = {
|
||
recipient: string;
|
||
type: "message" | "incoming-call";
|
||
};
|
||
|
||
function getUrl(data: NotificationData) {
|
||
const recipient = encodeURIComponent(data.recipient);
|
||
switch (data.type) {
|
||
case "message":
|
||
return `/messages/${recipient}`;
|
||
case "incoming-call":
|
||
return `/incoming-call/${recipient}`;
|
||
default:
|
||
return "/messages";
|
||
}
|
||
}
|