react-native-vision-camera
Version:
VisionCamera is the fastest and most powerful Camera for react-native.
34 lines (30 loc) • 983 B
text/typescript
import { useSyncExternalStore } from 'react'
import {
addOnCameraDevicesChangedListener,
getAllCameraDevices,
} from '../CameraDevices'
import type { CameraDevice } from '../specs/inputs/CameraDevice.nitro'
function subscribe(onStoreChange: () => void): () => void {
const listener = addOnCameraDevicesChangedListener(() => onStoreChange())
return () => listener.remove()
}
function getSnapshot(): CameraDevice[] {
return getAllCameraDevices()
}
/**
* Use a list of all {@linkcode CameraDevice}s on this phone.
*
* The hook automatically updates with the new devices as
* devices get added or removed to the phone - e.g. USB Cameras.
*
* @see {@linkcode useCameraDevice}
* @see {@linkcode getCameraDevice}
* @example
* ```ts
* const devices = useCameraDevices()
* const backDevice = devices.find((d) => d.position === 'back')
* ```
*/
export function useCameraDevices(): CameraDevice[] {
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)
}