1383ab4def
Added new SFU broker for screen sharing Removed kurento-extension entirely Added inbound and outbound reconnection procedures Improve UI responsiveness when sharing Add reconnection UI states Redo error handling Refactor actions-bar screen share components. Make it smarter with less prop drilling and less re-rendering. Also more readable. Still work to do in that I think Add a connection retry procedure for screen presenters when they are sharing; try a configurable amount of times when failure is triggered, with configurable min and max reconn timeouts and timeout increase factor Make local preview attachment smarter ADD PARTIAL SUPPORT FOR AUDIO SHARING VIA SCREEN SHARING WITH GET DISPLAY MEDIA, RECORDING STILL NOT SUPPORTED!!!
103 lines
2.9 KiB
JavaScript
Executable File
103 lines
2.9 KiB
JavaScript
Executable File
import React, { PureComponent } from 'react';
|
|
import cx from 'classnames';
|
|
import { styles } from './styles.scss';
|
|
import ActionsDropdown from './actions-dropdown/component';
|
|
import ScreenshareButtonContainer from '/imports/ui/components/actions-bar/screenshare/container';
|
|
import QuickPollDropdown from './quick-poll-dropdown/component';
|
|
import AudioControlsContainer from '../audio/audio-controls/container';
|
|
import JoinVideoOptionsContainer from '../video-provider/video-button/container';
|
|
import CaptionsButtonContainer from '/imports/ui/components/actions-bar/captions/container';
|
|
import PresentationOptionsContainer from './presentation-options/component';
|
|
|
|
class ActionsBar extends PureComponent {
|
|
render() {
|
|
const {
|
|
amIPresenter,
|
|
amIModerator,
|
|
enableVideo,
|
|
isLayoutSwapped,
|
|
toggleSwapLayout,
|
|
handleTakePresenter,
|
|
intl,
|
|
currentSlidHasContent,
|
|
parseCurrentSlideContent,
|
|
isSharingVideo,
|
|
stopExternalVideoShare,
|
|
isCaptionsAvailable,
|
|
isMeteorConnected,
|
|
isPollingEnabled,
|
|
isThereCurrentPresentation,
|
|
allowExternalVideo,
|
|
} = this.props;
|
|
|
|
const actionBarClasses = {};
|
|
|
|
actionBarClasses[styles.centerWithActions] = amIPresenter;
|
|
actionBarClasses[styles.center] = true;
|
|
actionBarClasses[styles.mobileLayoutSwapped] = isLayoutSwapped && amIPresenter;
|
|
|
|
return (
|
|
<div className={styles.actionsbar}>
|
|
<div className={styles.left}>
|
|
<ActionsDropdown {...{
|
|
amIPresenter,
|
|
amIModerator,
|
|
isPollingEnabled,
|
|
allowExternalVideo,
|
|
handleTakePresenter,
|
|
intl,
|
|
isSharingVideo,
|
|
stopExternalVideoShare,
|
|
isMeteorConnected,
|
|
}}
|
|
/>
|
|
{isPollingEnabled
|
|
? (
|
|
<QuickPollDropdown
|
|
{...{
|
|
currentSlidHasContent,
|
|
intl,
|
|
amIPresenter,
|
|
parseCurrentSlideContent,
|
|
}}
|
|
/>
|
|
) : null
|
|
}
|
|
{isCaptionsAvailable
|
|
? (
|
|
<CaptionsButtonContainer {...{ intl }} />
|
|
)
|
|
: null
|
|
}
|
|
</div>
|
|
<div className={cx(actionBarClasses)}>
|
|
<AudioControlsContainer />
|
|
{enableVideo
|
|
? (
|
|
<JoinVideoOptionsContainer />
|
|
)
|
|
: null}
|
|
<ScreenshareButtonContainer {...{
|
|
amIPresenter,
|
|
isMeteorConnected,
|
|
}}
|
|
/>
|
|
</div>
|
|
<div className={styles.right}>
|
|
{isLayoutSwapped
|
|
? (
|
|
<PresentationOptionsContainer
|
|
toggleSwapLayout={toggleSwapLayout}
|
|
isThereCurrentPresentation={isThereCurrentPresentation}
|
|
/>
|
|
)
|
|
: null
|
|
}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default ActionsBar;
|