enx-rtc-react-native
Version:
It is a react native component for Enablex users.
113 lines (94 loc) • 2.84 kB
JavaScript
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,
};