import { getUserDefaultBool, setUserDefaultBool } from "./settings"; /** * Get the person's permission to send notification requests. */ export function getNotificationRequestPermission() { if ("Notification" in window) { Notification.requestPermission(); let request = Notification.permission; if (request === "granted") { setUserDefaultBool("enablePushNotifications", true); setUserDefaultBool("userDeniedNotification", false); } else { setUserDefaultBool("enablePushNotifications", false); setUserDefaultBool("userDeniedNotification", true); } } else { console.warn( "Notifications aren't supported in this browser. The setting will be disabled." ); setUserDefaultBool("enablePushNotifications", false); } } /** * Get the browser's notification support * @returns Boolean value that determines whether the browser supports the Notification API */ export function browserSupportsNotificationRequests(): boolean { return "Notification" in window; } /** * Get the user default for sending push notifications * @returns Boolean value of `enablePushNotifications` */ export function canSendNotifications() { return getUserDefaultBool("enablePushNotifications"); } /** * Sends a push notification based on user preference * @param title The primary title of the push notification * @param body The contents of the push notification */ export function sendNotificationRequest(title: string, body: string) { if (canSendNotifications()) { let notif = new Notification(title, { body: body }); notif.onclick = () => { window.focus(); }; } else { console.warn("The person has opted to not receive push notifications."); } }