fix(optimise): mapStateToProps for some components (#5085)
This commit is contained in:
parent
bde2343951
commit
bd8a7edbd2
|
@ -17,6 +17,8 @@ import {
|
||||||
|
|
||||||
declare var interfaceConfig: Object;
|
declare var interfaceConfig: Object;
|
||||||
|
|
||||||
|
const emptyObject = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Local storage key name for flag telling if user checked 'Don't show again' checkbox on the banner
|
* Local storage key name for flag telling if user checked 'Don't show again' checkbox on the banner
|
||||||
* If the user checks this before closing the banner, next time he will access a jitsi domain
|
* If the user checks this before closing the banner, next time he will access a jitsi domain
|
||||||
|
@ -271,7 +273,8 @@ class ChromeExtensionBanner extends PureComponent<Props, State> {
|
||||||
*/
|
*/
|
||||||
const _mapStateToProps = state => {
|
const _mapStateToProps = state => {
|
||||||
return {
|
return {
|
||||||
bannerCfg: state['features/base/config'].chromeExtensionBanner || {},
|
// Using emptyObject so that we don't change the reference every time when _mapStateToProps is called.
|
||||||
|
bannerCfg: state['features/base/config'].chromeExtensionBanner || emptyObject,
|
||||||
conference: getCurrentConference(state),
|
conference: getCurrentConference(state),
|
||||||
iAmRecorder: state['features/base/config'].iAmRecorder
|
iAmRecorder: state['features/base/config'].iAmRecorder
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,10 @@ import {
|
||||||
|
|
||||||
declare var interfaceConfig: Object;
|
declare var interfaceConfig: Object;
|
||||||
|
|
||||||
|
// XXX: We are not currently using state here, but in the future, when
|
||||||
|
// interfaceConfig is part of redux we will. This has to be retrieved from the store.
|
||||||
|
const visibleButtons = new Set(interfaceConfig.TOOLBAR_BUTTONS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of the React {@code Component} props of {@link Toolbar}.
|
* The type of the React {@code Component} props of {@link Toolbar}.
|
||||||
*/
|
*/
|
||||||
|
@ -86,7 +90,7 @@ function _mapStateToProps(state): Object { // eslint-disable-line no-unused-vars
|
||||||
// interfaceConfig is part of redux we will.
|
// interfaceConfig is part of redux we will.
|
||||||
|
|
||||||
return {
|
return {
|
||||||
_visibleButtons: new Set(interfaceConfig.TOOLBAR_BUTTONS)
|
_visibleButtons: visibleButtons
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ type Props = {
|
||||||
/**
|
/**
|
||||||
* The redux representation of the local participant.
|
* The redux representation of the local participant.
|
||||||
*/
|
*/
|
||||||
_localParticipant: Object,
|
_localParticipantName: ?string,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current location url of the conference.
|
* The current location url of the conference.
|
||||||
|
@ -316,11 +316,11 @@ class InfoDialog extends Component<Props, State> {
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
_getTextToCopy() {
|
_getTextToCopy() {
|
||||||
const { _localParticipant, liveStreamViewURL, t } = this.props;
|
const { _localParticipantName, liveStreamViewURL, t } = this.props;
|
||||||
const _inviteURL = _decodeRoomURI(this.props._inviteURL);
|
const _inviteURL = _decodeRoomURI(this.props._inviteURL);
|
||||||
|
|
||||||
let invite = _localParticipant && _localParticipant.name
|
let invite = _localParticipantName
|
||||||
? t('info.inviteURLFirstPartPersonal', { name: _localParticipant.name })
|
? t('info.inviteURLFirstPartPersonal', { name: _localParticipantName })
|
||||||
: t('info.inviteURLFirstPartGeneral');
|
: t('info.inviteURLFirstPartGeneral');
|
||||||
|
|
||||||
invite += t('info.inviteURLSecondPart', {
|
invite += t('info.inviteURLSecondPart', {
|
||||||
|
@ -613,6 +613,7 @@ class InfoDialog extends Component<Props, State> {
|
||||||
* _conference: Object,
|
* _conference: Object,
|
||||||
* _conferenceName: string,
|
* _conferenceName: string,
|
||||||
* _inviteURL: string,
|
* _inviteURL: string,
|
||||||
|
* _localParticipantName: ?string,
|
||||||
* _locationURL: string,
|
* _locationURL: string,
|
||||||
* _locked: string,
|
* _locked: string,
|
||||||
* _password: string
|
* _password: string
|
||||||
|
@ -625,6 +626,7 @@ function _mapStateToProps(state) {
|
||||||
password,
|
password,
|
||||||
room
|
room
|
||||||
} = state['features/base/conference'];
|
} = state['features/base/conference'];
|
||||||
|
const localParticipant = getLocalParticipant(state);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
_canEditPassword: isLocalParticipantModerator(state, state['features/base/config'].lockRoomGuestEnabled),
|
_canEditPassword: isLocalParticipantModerator(state, state['features/base/config'].lockRoomGuestEnabled),
|
||||||
|
@ -632,7 +634,7 @@ function _mapStateToProps(state) {
|
||||||
_conferenceName: room,
|
_conferenceName: room,
|
||||||
_passwordNumberOfDigits: state['features/base/config'].roomPasswordNumberOfDigits,
|
_passwordNumberOfDigits: state['features/base/config'].roomPasswordNumberOfDigits,
|
||||||
_inviteURL: getInviteURL(state),
|
_inviteURL: getInviteURL(state),
|
||||||
_localParticipant: getLocalParticipant(state),
|
_localParticipantName: localParticipant?.name,
|
||||||
_locationURL: state['features/base/connection'].locationURL,
|
_locationURL: state['features/base/connection'].locationURL,
|
||||||
_locked: locked,
|
_locked: locked,
|
||||||
_password: password
|
_password: password
|
||||||
|
|
|
@ -47,10 +47,10 @@ type Props = {
|
||||||
_liveStreamViewURL: ?string,
|
_liveStreamViewURL: ?string,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of real participants in the call. If in a lonely call, the
|
* True if the number of real participants in the call is less than 2. If in a lonely call, the
|
||||||
* {@code InfoDialog} will be automatically shown.
|
* {@code InfoDialog} will be automatically shown.
|
||||||
*/
|
*/
|
||||||
_participantCount: number,
|
_isLonelyCall: boolean,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether or not the toolbox, in which this component exists, is visible.
|
* Whether or not the toolbox, in which this component exists, is visible.
|
||||||
|
@ -108,7 +108,7 @@ class InfoDialogButton extends Component<Props, State> {
|
||||||
showDialog: (props._toolboxVisible && state.showDialog)
|
showDialog: (props._toolboxVisible && state.showDialog)
|
||||||
|| (!state.hasConnectedToConference
|
|| (!state.hasConnectedToConference
|
||||||
&& props._isConferenceJoined
|
&& props._isConferenceJoined
|
||||||
&& props._participantCount < 2
|
&& props._isLonelyCall
|
||||||
&& props._toolboxVisible
|
&& props._toolboxVisible
|
||||||
&& !props._disableAutoShow)
|
&& !props._disableAutoShow)
|
||||||
};
|
};
|
||||||
|
@ -243,7 +243,7 @@ class InfoDialogButton extends Component<Props, State> {
|
||||||
* _disableAutoShow: boolean,
|
* _disableAutoShow: boolean,
|
||||||
* _isConferenceIsJoined: boolean,
|
* _isConferenceIsJoined: boolean,
|
||||||
* _liveStreamViewURL: string,
|
* _liveStreamViewURL: string,
|
||||||
* _participantCount: number,
|
* _isLonelyCall: boolean,
|
||||||
* _toolboxVisible: boolean
|
* _toolboxVisible: boolean
|
||||||
* }}
|
* }}
|
||||||
*/
|
*/
|
||||||
|
@ -260,7 +260,7 @@ function _mapStateToProps(state) {
|
||||||
_liveStreamViewURL:
|
_liveStreamViewURL:
|
||||||
currentLiveStreamingSession
|
currentLiveStreamingSession
|
||||||
&& currentLiveStreamingSession.liveStreamViewURL,
|
&& currentLiveStreamingSession.liveStreamViewURL,
|
||||||
_participantCount: getParticipantCount(state),
|
_isLonelyCall: getParticipantCount(state) < 2,
|
||||||
_toolboxVisible: state['features/toolbox'].visible
|
_toolboxVisible: state['features/toolbox'].visible
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ export type AbstractCaptionsProps = {
|
||||||
* Mapped by id just to have the keys for convenience during the rendering
|
* Mapped by id just to have the keys for convenience during the rendering
|
||||||
* process.
|
* process.
|
||||||
*/
|
*/
|
||||||
_transcripts: Map<string, string>
|
_transcripts: ?Map<string, string>
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +36,7 @@ export class AbstractCaptions<P: AbstractCaptionsProps>
|
||||||
render() {
|
render() {
|
||||||
const { _requestingSubtitles, _transcripts } = this.props;
|
const { _requestingSubtitles, _transcripts } = this.props;
|
||||||
|
|
||||||
if (!_requestingSubtitles || !_transcripts.size) {
|
if (!_requestingSubtitles || !_transcripts || !_transcripts.size) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,9 +120,12 @@ function _constructTranscripts(state: Object): Map<string, string> {
|
||||||
*/
|
*/
|
||||||
export function _abstractMapStateToProps(state: Object) {
|
export function _abstractMapStateToProps(state: Object) {
|
||||||
const { _requestingSubtitles } = state['features/subtitles'];
|
const { _requestingSubtitles } = state['features/subtitles'];
|
||||||
|
const transcripts = _constructTranscripts(state);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
_requestingSubtitles,
|
_requestingSubtitles,
|
||||||
_transcripts: _constructTranscripts(state)
|
|
||||||
|
// avoid rerenders by setting to props new empty Map instances.
|
||||||
|
_transcripts: transcripts.size === 0 ? undefined : transcripts
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,6 +206,10 @@ type State = {
|
||||||
declare var APP: Object;
|
declare var APP: Object;
|
||||||
declare var interfaceConfig: Object;
|
declare var interfaceConfig: Object;
|
||||||
|
|
||||||
|
// XXX: We are not currently using state here, but in the future, when
|
||||||
|
// interfaceConfig is part of redux we will. This will have to be retrieved from the store.
|
||||||
|
const visibleButtons = new Set(interfaceConfig.TOOLBAR_BUTTONS);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements the conference toolbox on React/Web.
|
* Implements the conference toolbox on React/Web.
|
||||||
*
|
*
|
||||||
|
@ -1347,10 +1351,7 @@ function _mapStateToProps(state) {
|
||||||
|| sharedVideoStatus === 'start'
|
|| sharedVideoStatus === 'start'
|
||||||
|| sharedVideoStatus === 'pause',
|
|| sharedVideoStatus === 'pause',
|
||||||
_visible: isToolboxVisible(state),
|
_visible: isToolboxVisible(state),
|
||||||
|
_visibleButtons: visibleButtons
|
||||||
// XXX: We are not currently using state here, but in the future, when
|
|
||||||
// interfaceConfig is part of redux we will.
|
|
||||||
_visibleButtons: new Set(interfaceConfig.TOOLBAR_BUTTONS)
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue