import { NativeModules, NativeEventEmitter } from 'react-native' import { CameraDevice } from './CameraDevice' const CameraDevicesManager = NativeModules.CameraDevices as { getConstants: () => { availableCameraDevices: CameraDevice[] userPreferredCameraDevice: CameraDevice | undefined } } const constants = CameraDevicesManager.getConstants() let devices = constants.availableCameraDevices const DEVICES_CHANGED_NAME = 'CameraDevicesChanged' // eslint-disable-next-line @typescript-eslint/no-explicit-any const eventEmitter = new NativeEventEmitter(CameraDevicesManager as any) eventEmitter.addListener(DEVICES_CHANGED_NAME, (newDevices: CameraDevice[]) => { devices = newDevices }) export const CameraDevices = { userPreferredCameraDevice: constants.userPreferredCameraDevice, getAvailableCameraDevices: () => devices, addCameraDevicesChangedListener: (callback: (newDevices: CameraDevice[]) => void) => { return eventEmitter.addListener(DEVICES_CHANGED_NAME, callback) }, }