frontend/app/lib/notification.ts
Nathan Lamy 8b57952344
All checks were successful
Deploy to Netlify / Deploy to Netlify (push) Successful in 1m30s
feat: add subscribe logic
2025-08-19 22:36:23 +02:00

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