Files
jitsi-meet/react/features/subtitles/components/Captions.web.js
Hristo Terezov 0bdc7d42c5 feat: Participants optimisations (#9515)
* fix(participants): Change from array to Map

* fix(unload): optimise

* feat: Introduces new states for e2ee feature.

Stores everyoneSupportsE2EE and everyoneEnabledE2EE to minimize looping through participants list.

squash: Uses participants map and go over the elements only once.

* feat: Optimizes isEveryoneModerator to do less frequent checks in all participants.

* fix: Drops deep equal from participants pane and uses the map.

* fix(SharedVideo): isVideoPlaying

* fix(participants): Optimise isEveryoneModerator

* fix(e2e): Optimise everyoneEnabledE2EE

* fix: JS errors.

* ref(participants): remove getParticipants

* fix(participants): Prepare for PR.

* fix: Changes participants pane to be component.

The functional component was always rendered:
`prev props: {} !== {} :next props`.

* feat: Optimization to skip participants list on pane closed.

* fix: The participants list shows and the local participant.

* fix: Fix wrong action name for av-moderation.

* fix: Minimizes the number of render calls of av moderation notification.

* fix: Fix iterating over remote participants.

* fix: Fixes lint error.

* fix: Reflects participant updates for av-moderation.

* fix(ParticipantPane): to work with IDs.

* fix(av-moderation): on PARTCIPANT_UPDATE

* fix(ParticipantPane): close delay.

* fix: address code review comments

* fix(API): mute-everyone

* fix: bugs

* fix(Thumbnail): on mobile.

* fix(ParticipantPane): Close context menu on click.

* fix: Handles few error when local participant is undefined.

* feat: Hides AV moderation if not supported.

* fix: Show mute all video.

* fix: Fixes updating participant for av moderation.

Co-authored-by: damencho <damencho@jitsi.org>
2021-07-09 15:36:19 +03:00

84 lines
2.1 KiB
JavaScript

// @flow
import React from 'react';
import { getParticipantCountWithFake } from '../../base/participants';
import { connect } from '../../base/redux';
import {
_abstractMapStateToProps,
AbstractCaptions,
type AbstractCaptionsProps
} from './AbstractCaptions';
type Props = {
/**
* Whether the subtitles container is lifted above the invite box.
*/
_isLifted: boolean
} & AbstractCaptionsProps;
/**
* React {@code Component} which can display speech-to-text results from
* Jigasi as subtitles.
*/
class Captions
extends AbstractCaptions<Props> {
/**
* Renders the transcription text.
*
* @param {string} id - The ID of the transcript message from which the
* {@code text} has been created.
* @param {string} text - Subtitles text formatted with the participant's
* name.
* @protected
* @returns {React$Element} - The React element which displays the text.
*/
_renderParagraph(id: string, text: string): React$Element<*> {
return (
<p key = { id }>
<span>{ text }</span>
</p>
);
}
/**
* Renders the subtitles container.
*
* @param {Array<React$Element>} paragraphs - An array of elements created
* for each subtitle using the {@link _renderParagraph} method.
* @protected
* @returns {React$Element} - The subtitles container.
*/
_renderSubtitlesContainer(
paragraphs: Array<React$Element<*>>): React$Element<*> {
const className = this.props._isLifted ? 'transcription-subtitles lifted' : 'transcription-subtitles';
return (
<div className = { className } >
{ paragraphs }
</div>
);
}
}
/**
* Maps (parts of) the redux state to the associated {@code }'s
* props.
*
* @param {Object} state - The redux state.
* @private
* @returns {Object}
*/
function mapStateToProps(state) {
return {
..._abstractMapStateToProps(state),
_isLifted: getParticipantCountWithFake(state) < 2
};
}
export default connect(mapStateToProps)(Captions);