mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-14 19:20:28 +03:00
* fix notification crash for ios * access notification from window variable * fix Notification check * catch notification variable error * fix missing check for Notification
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { useEffect, useState } from 'react';
|
|
|
|
export const getNotificationState = (): PermissionState => {
|
|
if ('Notification' in window) {
|
|
if (window.Notification.permission === 'default') {
|
|
return 'prompt';
|
|
}
|
|
|
|
return window.Notification.permission;
|
|
}
|
|
|
|
return 'denied';
|
|
};
|
|
|
|
export function usePermissionState(name: PermissionName, initialValue: PermissionState = 'prompt') {
|
|
const [permissionState, setPermissionState] = useState<PermissionState>(initialValue);
|
|
|
|
useEffect(() => {
|
|
let permissionStatus: PermissionStatus;
|
|
|
|
function handlePermissionChange(this: PermissionStatus) {
|
|
setPermissionState(this.state);
|
|
}
|
|
|
|
navigator.permissions
|
|
.query({ name })
|
|
.then((permStatus: PermissionStatus) => {
|
|
permissionStatus = permStatus;
|
|
handlePermissionChange.apply(permStatus);
|
|
permStatus.addEventListener('change', handlePermissionChange);
|
|
})
|
|
.catch(() => {
|
|
// Silence error since FF doesn't support microphone permission
|
|
});
|
|
|
|
return () => {
|
|
permissionStatus?.removeEventListener('change', handlePermissionChange);
|
|
};
|
|
}, [name]);
|
|
|
|
return permissionState;
|
|
}
|