wip hook to watch permissions

This commit is contained in:
lebaudantoine
2025-07-31 21:10:28 +02:00
parent 1ae08420a4
commit e3251bb980
@@ -0,0 +1,65 @@
import { useEffect, useState } from 'react'
type PermissionState = undefined | 'granted' | 'prompt' | 'denied'
export const usePermissions = () => {
const [cameraPermission, setCameraPermission] =
useState<PermissionState>(undefined)
const [microphonePermission, setMicrophonePermission] =
useState<PermissionState>(undefined)
useEffect(() => {
const checkPermissions = async () => {
try {
const [cameraPermission, microphonePermission] = await Promise.all([
navigator.permissions.query({ name: 'camera' }),
navigator.permissions.query({ name: 'microphone' }),
])
setCameraPermission(cameraPermission.state)
setMicrophonePermission(microphonePermission.state)
const handleCameraChange = (e: Event) => {
const target = e.target as PermissionStatus
setCameraPermission(target.state)
}
const handleMicrophoneChange = (e: Event) => {
const target = e.target as PermissionStatus
setMicrophonePermission(target.state)
}
if (!cameraPermission.onchange) {
cameraPermission.addEventListener('change', handleCameraChange)
}
if (!microphonePermission.onchange) {
microphonePermission.addEventListener(
'change',
handleMicrophoneChange
)
}
return () => {
cameraPermission.removeEventListener('change', handleCameraChange)
microphonePermission.removeEventListener(
'change',
handleMicrophoneChange
)
}
} catch (error) {
console.error('Error checking permissions:', error)
}
}
checkPermissions()
}, [])
return {
cameraPermission,
microphonePermission,
isCameraDenied: cameraPermission == 'denied',
isCameraPrompted: cameraPermission == 'prompt',
isCameraGranted: cameraPermission == 'granted',
isMicrophoneDenied: microphonePermission == 'denied',
isMicrophonePrompted: microphonePermission == 'prompt',
isMicrophoneGranted: microphonePermission == 'granted',
}
}