UNPKG

react-native-vision-camera

Version:

VisionCamera is the fastest and most powerful Camera for react-native.

56 lines (55 loc) 1.92 kB
import { useCallback, useEffect, useState } from 'react'; import { AppState } from 'react-native'; import { VisionCamera } from '../VisionCamera'; function createUsePermissionFunc(getFunc, requestFunc) { return () => { const [status, setStatus] = useState(getFunc); useEffect(() => { // Re-fetch Permission on AppState change const subscription = AppState.addEventListener('change', (state) => { if (state === 'active') { setStatus(getFunc()); } }); return () => subscription.remove(); }, []); const requestPermission = useCallback(async () => { await requestFunc(); const newStatus = getFunc(); setStatus(newStatus); return newStatus === 'authorized'; }, []); return { status: status, requestPermission: requestPermission, hasPermission: status === 'authorized', canRequestPermission: status === 'not-determined', }; }; } /** * Use the Camera Permission. * @example * ```ts * const { hasPermission, requestPermission } = useCameraPermission() * useEffect(() => { * if (!hasPermission) { * requestPermission() * } * }, [hasPermission, requestPermission]) * ``` */ export const useCameraPermission = createUsePermissionFunc(() => VisionCamera.cameraPermissionStatus, () => VisionCamera.requestCameraPermission()); /** * Use the Microphone Permission. * @example * ```ts * const { hasPermission, requestPermission } = useMicrophonePermission() * useEffect(() => { * if (!hasPermission) { * requestPermission() * } * }, [hasPermission, requestPermission]) * ``` */ export const useMicrophonePermission = createUsePermissionFunc(() => VisionCamera.microphonePermissionStatus, () => VisionCamera.requestMicrophonePermission());