import { useEffect, useState } from "react"; export function usePermissionState(name: PermissionName, initialValue: PermissionState = 'prompt') { const [permissionState, setPermissionState] = useState(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; }