All checks were successful
Deploy to Netlify / Deploy to Netlify (push) Successful in 1m30s
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { subscribe, unsubscribe } from "./api";
|
|
|
|
const STORAGE_KEY = "notification_enabled";
|
|
|
|
export async function registerNotification() {
|
|
const permission = await Notification.requestPermission();
|
|
if (permission !== "granted") {
|
|
return {
|
|
error: "E_PERMISSION_DENIED",
|
|
};
|
|
}
|
|
|
|
const registration = await navigator.serviceWorker.ready;
|
|
try {
|
|
const subscription = await registration.pushManager.subscribe({
|
|
userVisibleOnly: true,
|
|
applicationServerKey: process.env.VITE_PUBLIC_VAPID_KEY,
|
|
});
|
|
await subscribe(subscription);
|
|
// Store to local storage
|
|
localStorage.setItem(STORAGE_KEY, "true");
|
|
return subscription;
|
|
} catch (err) {
|
|
return {
|
|
error: "Erreur : " + err,
|
|
};
|
|
}
|
|
}
|
|
|
|
export function isNotificationEnabled() {
|
|
return localStorage.getItem(STORAGE_KEY) === "true";
|
|
}
|
|
|
|
export async function unregisterNotification() {
|
|
const registration = await navigator.serviceWorker.ready;
|
|
const subscription = await registration.pushManager.getSubscription();
|
|
if (subscription) {
|
|
await subscription.unsubscribe();
|
|
localStorage.removeItem(STORAGE_KEY);
|
|
await unsubscribe(subscription);
|
|
}
|
|
}
|