123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /* @flow */
-
- import React, { Component } from 'react';
-
- import { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';
- import { connect } from '../../../base/redux';
- import { E2EELabel } from '../../../e2ee';
- import { LocalRecordingLabel } from '../../../local-recording';
- import { RecordingLabel } from '../../../recording';
- import { isToolboxVisible } from '../../../toolbox/functions.web';
- import { TranscribingLabel } from '../../../transcribing';
- import { VideoQualityLabel } from '../../../video-quality';
- import ConferenceTimer from '../ConferenceTimer';
- import { getConferenceInfo } from '../functions';
-
- import ConferenceInfoContainer from './ConferenceInfoContainer';
- import InsecureRoomNameLabel from './InsecureRoomNameLabel';
- import ParticipantsCount from './ParticipantsCount';
- import SubjectText from './SubjectText';
-
- /**
- * The type of the React {@code Component} props of {@link Subject}.
- */
- type Props = {
-
- /**
- * The conference info labels to be shown in the conference header.
- */
- _conferenceInfo: Object,
-
- /**
- * Indicates whether the component should be visible or not.
- */
- _visible: boolean
- };
-
- const COMPONENTS = [
- {
- Component: SubjectText,
- id: 'subject'
- },
- {
- Component: ConferenceTimer,
- id: 'conference-timer'
- },
- {
- Component: ParticipantsCount,
- id: 'participants-count'
- },
- {
- Component: E2EELabel,
- id: 'e2ee'
- },
- {
- Component: () => (
- <>
- <RecordingLabel mode = { JitsiRecordingConstants.mode.FILE } />
- <RecordingLabel mode = { JitsiRecordingConstants.mode.STREAM } />
- </>
- ),
- id: 'recording'
- },
- {
- Component: LocalRecordingLabel,
- id: 'local-recording'
- },
- {
- Component: TranscribingLabel,
- id: 'transcribing'
- },
- {
- Component: VideoQualityLabel,
- id: 'video-quality'
- },
- {
- Component: InsecureRoomNameLabel,
- id: 'insecure-room'
- }
- ];
-
- /**
- * The upper band of the meeing containing the conference name, timer and labels.
- *
- * @param {Object} props - The props of the component.
- * @returns {React$None}
- */
- class ConferenceInfo extends Component<Props> {
- /**
- * Initializes a new {@code ConferenceInfo} instance.
- *
- * @param {Props} props - The read-only React {@code Component} props with
- * which the new instance is to be initialized.
- */
- constructor(props: Props) {
- super(props);
-
- this._renderAutoHide = this._renderAutoHide.bind(this);
- this._renderAlwaysVisible = this._renderAlwaysVisible.bind(this);
- }
-
- _renderAutoHide: () => void;
-
- /**
- * Renders auto-hidden info header labels.
- *
- * @returns {void}
- */
- _renderAutoHide() {
- const { autoHide } = this.props._conferenceInfo;
-
- if (!autoHide || !autoHide.length) {
- return null;
- }
-
- return (
- <ConferenceInfoContainer visible = { this.props._visible } >
- {
- COMPONENTS
- .filter(comp => autoHide.includes(comp.id))
- .map(c =>
- <c.Component key = { c.id } />
- )
- }
- </ConferenceInfoContainer>
- );
- }
-
- _renderAlwaysVisible: () => void;
-
- /**
- * Renders the always visible info header labels.
- *
- * @returns {void}
- */
- _renderAlwaysVisible() {
- const { alwaysVisible } = this.props._conferenceInfo;
-
- if (!alwaysVisible || !alwaysVisible.length) {
- return null;
- }
-
- return (
- <ConferenceInfoContainer visible = { true } >
- {
- COMPONENTS
- .filter(comp => alwaysVisible.includes(comp.id))
- .map(c =>
- <c.Component key = { c.id } />
- )
- }
- </ConferenceInfoContainer>
- );
- }
-
- /**
- * Implements React's {@link Component#render()}.
- *
- * @inheritdoc
- * @returns {ReactElement}
- */
- render() {
- return (
- <div className = 'details-container' >
- { this._renderAlwaysVisible() }
- { this._renderAutoHide() }
- </div>
- );
- }
- }
-
- /**
- * Maps (parts of) the Redux state to the associated
- * {@code Subject}'s props.
- *
- * @param {Object} state - The Redux state.
- * @private
- * @returns {{
- * _visible: boolean,
- * _conferenceInfo: Object
- * }}
- */
- function _mapStateToProps(state) {
- return {
- _visible: isToolboxVisible(state),
- _conferenceInfo: getConferenceInfo(state)
- };
- }
-
- export default connect(_mapStateToProps)(ConferenceInfo);
|