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";
|
|||
|
}
|
|||
|
}
|