bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/audio/audio-modal/container.jsx
2019-05-23 13:47:56 -03:00

88 lines
3.3 KiB
JavaScript
Executable File

import React from 'react';
import { withTracker } from 'meteor/react-meteor-data';
import { withModalMounter } from '/imports/ui/components/modal/service';
import browser from 'browser-detect';
import getFromUserSettings from '/imports/ui/services/users-settings';
import AudioModal from './component';
import Meetings from '/imports/api/meetings';
import Auth from '/imports/ui/services/auth';
import lockContextContainer from '/imports/ui/components/lock-viewers/context/container';
import Service from '../service';
const AudioModalContainer = props => <AudioModal {...props} />;
const APP_CONFIG = Meteor.settings.public.app;
export default lockContextContainer(withModalMounter(withTracker(({ mountModal, userLocks }) => {
const listenOnlyMode = getFromUserSettings('listenOnlyMode', APP_CONFIG.listenOnlyMode);
const forceListenOnly = getFromUserSettings('forceListenOnly', APP_CONFIG.forceListenOnly);
const skipCheck = getFromUserSettings('skipCheck', APP_CONFIG.skipCheck);
const meeting = Meetings.findOne({ meetingId: Auth.meetingID });
const invalidDialNumbers = ['0', '613-555-1212', '613-555-1234', '0000'];
let formattedDialNum = '';
let formattedTelVoice = '';
let combinedDialInNum = '';
if (meeting && meeting.voiceProp) {
const { dialNumber, telVoice } = meeting.voiceProp;
if (invalidDialNumbers.indexOf(dialNumber) < 0) {
formattedDialNum = dialNumber;
formattedTelVoice = telVoice;
combinedDialInNum = `${dialNumber.replace(/\D+/g, '')},,,${telVoice.replace(/\D+/g, '')}`;
}
}
return ({
closeModal: () => {
if (!Service.isConnecting()) mountModal(null);
},
joinMicrophone: () => {
const call = new Promise((resolve, reject) => {
if (skipCheck) {
resolve(Service.joinMicrophone());
} else {
resolve(Service.transferCall());
}
reject(() => {
Service.exitAudio();
});
});
return call.then(() => {
mountModal(null);
}).catch((error) => {
throw error;
});
},
joinListenOnly: () => Service.joinListenOnly().then(() => mountModal(null)),
leaveEchoTest: () => {
if (!Service.isEchoTest()) {
return Promise.resolve();
}
return Service.exitAudio();
},
changeInputDevice: inputDeviceId => Service.changeInputDevice(inputDeviceId),
changeOutputDevice: outputDeviceId => Service.changeOutputDevice(outputDeviceId),
joinEchoTest: () => Service.joinEchoTest(),
exitAudio: () => Service.exitAudio(),
isConnecting: Service.isConnecting(),
isConnected: Service.isConnected(),
isEchoTest: Service.isEchoTest(),
inputDeviceId: Service.inputDeviceId(),
outputDeviceId: Service.outputDeviceId(),
showPermissionsOvelay: Service.isWaitingPermissions(),
listenOnlyMode,
skipCheck,
formattedDialNum,
formattedTelVoice,
combinedDialInNum,
audioLocked: userLocks.userMic,
joinFullAudioImmediately: !listenOnlyMode && skipCheck,
joinFullAudioEchoTest: !listenOnlyMode && !skipCheck,
forceListenOnlyAttendee: listenOnlyMode && forceListenOnly && !Service.isUserModerator(),
isIOSChrome: browser().name === 'crios',
isMobileNative: navigator.userAgent.toLowerCase().includes('bbbnative'),
isIEOrEdge: browser().name === 'edge' || browser().name === 'ie',
});
})(AudioModalContainer)));