c828dfd596
* Add notifications * Abide push actions * Handle browsers not having notification support * Ask for notification permission after loading * Make usePermission work without live permission support * Focus message when clicking the notification * make const all caps * Fix usePermission error in Safari * Fix live permissions * Remove userActivity and use document.visibilityState instead * Change setting label to "desktop notifications" * Check for notification permissions in the settings.js
28 lines
659 B
JavaScript
28 lines
659 B
JavaScript
/* eslint-disable import/prefer-default-export */
|
|
|
|
import { useEffect, useState } from 'react';
|
|
|
|
export function usePermission(name, initial) {
|
|
const [state, setState] = useState(initial);
|
|
|
|
useEffect(() => {
|
|
let descriptor;
|
|
|
|
const update = () => setState(descriptor.state);
|
|
|
|
if (navigator.permissions?.query) {
|
|
navigator.permissions.query({ name }).then((_descriptor) => {
|
|
descriptor = _descriptor;
|
|
|
|
update();
|
|
descriptor.addEventListener('change', update);
|
|
});
|
|
}
|
|
|
|
return () => {
|
|
if (descriptor) descriptor.removeEventListener('change', update);
|
|
};
|
|
}, []);
|
|
|
|
return [state, setState];
|
|
}
|