31 lines
946 B
JavaScript
31 lines
946 B
JavaScript
// Handles browser quirks, based on
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API
|
|
|
|
const checkNotificationPromise = () => {
|
|
try {
|
|
// eslint-disable-next-line promise/catch-or-return, promise/valid-params
|
|
Notification.requestPermission().then();
|
|
} catch(e) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
const handlePermission = (permission, callback) => {
|
|
// Whatever the user answers, we make sure Chrome stores the information
|
|
if(!('permission' in Notification)) {
|
|
Notification.permission = permission;
|
|
}
|
|
|
|
callback(Notification.permission);
|
|
};
|
|
|
|
export const requestNotificationPermission = (callback) => {
|
|
if (checkNotificationPromise()) {
|
|
Notification.requestPermission().then((permission) => handlePermission(permission, callback)).catch(console.warn);
|
|
} else {
|
|
Notification.requestPermission((permission) => handlePermission(permission, callback));
|
|
}
|
|
};
|