UNPKG

enx-rtc-react-native

Version:

It is a react native component for Enablex users.

113 lines (94 loc) 2.84 kB
import { NativeModules, NativeEventEmitter, PermissionsAndroid } from 'react-native'; import { each } from 'underscore'; const Enx = NativeModules.EnxRoomManager || {}; // Create a safe event emitter const nativeEvents = new NativeEventEmitter(Enx); // Store added listeners so we can remove them properly const registeredListeners = {}; const checkAndroidPermissions = () => new Promise((resolve, reject) => { PermissionsAndroid.requestMultiple([ PermissionsAndroid.PERMISSIONS.CAMERA, PermissionsAndroid.PERMISSIONS.RECORD_AUDIO ]) .then((result) => { const permissionsError = { permissionsDenied: [], type: 'Permissions error' }; each(result, (permissionValue, permissionType) => { if (permissionValue === 'denied') { console.log("Denied Permission:", permissionType); permissionsError.permissionsDenied.push(permissionType); } }); if (permissionsError.permissionsDenied.length > 0) { reject(permissionsError); } else { console.log("All permissions granted"); resolve(); } }) .catch((error) => { reject(error); }); }); const setNativeEvents = (events) => { if (!Enx.setNativeEvents) { console.warn('setNativeEvents is not available in native module'); return; } const eventNames = Object.keys(events); try { // Call native method Enx.setNativeEvents(eventNames); // Add JavaScript listeners eventNames.forEach(eventName => { if (!registeredListeners[eventName]) { const subscription = nativeEvents.addListener( eventName, events[eventName] ); registeredListeners[eventName] = subscription; } }); } catch (error) { console.error('Error setting native events:', error); } }; // Similarly update removeNativeEvents const removeNativeEvents = (events) => { if (!Enx.removeNativeEvents) { console.warn('removeNativeEvents is not available in native module'); return; } const eventNames = Object.keys(events); try { Enx.removeNativeEvents(eventNames); eventNames.forEach(eventName => { if (registeredListeners[eventName]) { registeredListeners[eventName].remove(); delete registeredListeners[eventName]; } }); } catch (error) { console.error('Error removing native events:', error); } }; const EnxPubType = { SCREEN: 'screen', CANVAS: 'canvas', }; const EnxPubMode = Object.freeze({ ALL: 'all', AUTHERIZE: 'authorize', MODEATORS: 'moderators', }); export { Enx, nativeEvents, setNativeEvents, removeNativeEvents, checkAndroidPermissions, EnxPubType, EnxPubMode, };