56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
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.');
|
|
}
|
|
} |