mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-05-13 22:52:30 +00:00
Move visible logic inside each button Move click functionality inside each button Extract getButtons function from Toolbox components to functions file
118 lines
3.1 KiB
TypeScript
118 lines
3.1 KiB
TypeScript
import { connect } from 'react-redux';
|
|
|
|
import { createToolbarEvent } from '../../../analytics/AnalyticsEvents';
|
|
import { sendAnalytics } from '../../../analytics/functions';
|
|
import { IReduxState } from '../../../app/types';
|
|
import { translate } from '../../../base/i18n/functions';
|
|
import { getLocalParticipant } from '../../../base/participants/functions';
|
|
import { ILocalParticipant } from '../../../base/participants/types';
|
|
import AbstractButton, { IProps as AbstractButtonProps } from '../../../base/toolbox/components/AbstractButton';
|
|
import { openSettingsDialog } from '../../../settings/actions';
|
|
import { SETTINGS_TABS } from '../../../settings/constants';
|
|
|
|
import ProfileButtonAvatar from './ProfileButtonAvatar';
|
|
|
|
/**
|
|
* The type of the React {@code Component} props of {@link ProfileButton}.
|
|
*/
|
|
interface IProps extends AbstractButtonProps {
|
|
|
|
/**
|
|
* Default displayed name for local participant.
|
|
*/
|
|
_defaultLocalDisplayName: string;
|
|
|
|
/**
|
|
* The redux representation of the local participant.
|
|
*/
|
|
_localParticipant?: ILocalParticipant;
|
|
|
|
/**
|
|
* Whether the button support clicking or not.
|
|
*/
|
|
_unclickable: boolean;
|
|
}
|
|
|
|
/**
|
|
* Implementation of a button for opening profile dialog.
|
|
*/
|
|
class ProfileButton extends AbstractButton<IProps> {
|
|
accessibilityLabel = 'toolbar.accessibilityLabel.profile';
|
|
icon = ProfileButtonAvatar;
|
|
|
|
/**
|
|
* Retrieves the label.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
_getLabel() {
|
|
const {
|
|
_defaultLocalDisplayName,
|
|
_localParticipant
|
|
} = this.props;
|
|
let displayName;
|
|
|
|
if (_localParticipant?.name) {
|
|
displayName = _localParticipant.name;
|
|
} else {
|
|
displayName = _defaultLocalDisplayName;
|
|
}
|
|
|
|
return displayName;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the tooltip.
|
|
*
|
|
* @returns {string}
|
|
*/
|
|
_getTooltip() {
|
|
return this._getLabel();
|
|
}
|
|
|
|
/**
|
|
* Handles clicking / pressing the button, and opens the appropriate dialog.
|
|
*
|
|
* @protected
|
|
* @returns {void}
|
|
*/
|
|
_handleClick() {
|
|
const { dispatch, _unclickable } = this.props;
|
|
|
|
if (!_unclickable) {
|
|
sendAnalytics(createToolbarEvent('profile'));
|
|
dispatch(openSettingsDialog(SETTINGS_TABS.PROFILE));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates whether the button should be disabled or not.
|
|
*
|
|
* @protected
|
|
* @returns {void}
|
|
*/
|
|
_isDisabled() {
|
|
return this.props._unclickable;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function that maps parts of Redux state tree into component props.
|
|
*
|
|
* @param {Object} state - Redux state.
|
|
* @returns {Object}
|
|
*/
|
|
const mapStateToProps = (state: IReduxState) => {
|
|
const { defaultLocalDisplayName, disableProfile } = state['features/base/config'];
|
|
|
|
return {
|
|
_defaultLocalDisplayName: defaultLocalDisplayName ?? '',
|
|
_localParticipant: getLocalParticipant(state),
|
|
_unclickable: !interfaceConfig.SETTINGS_SECTIONS.includes('profile'),
|
|
customClass: 'profile-button-avatar',
|
|
visible: !disableProfile
|
|
};
|
|
};
|
|
|
|
export default translate(connect(mapStateToProps)(ProfileButton));
|