mirror of https://github.com/jitsi/jitsi-meet
parent
70de9a683f
commit
66da77bcf5
@ -0,0 +1,126 @@ |
||||
/* @flow */ |
||||
|
||||
import React, { Component } from 'react'; |
||||
import { connect } from 'react-redux'; |
||||
|
||||
import { DEFAULT_AVATAR_RELATIVE_PATH } from '../../base/participants'; |
||||
import UIEvents from '../../../../service/UI/UIEvents'; |
||||
|
||||
import ToolbarButton from './ToolbarButton'; |
||||
|
||||
declare var APP: Object; |
||||
declare var JitsiMeetJS: Object; |
||||
|
||||
/** |
||||
* The default configuration for the button. |
||||
* |
||||
* @type {Object} |
||||
*/ |
||||
const DEFAULT_BUTTON_CONFIGURATION = { |
||||
buttonName: 'profile', |
||||
classNames: [ 'button' ], |
||||
enabled: true, |
||||
id: 'toolbar_button_profile', |
||||
tooltipKey: 'profile.setDisplayNameLabel' |
||||
}; |
||||
|
||||
/** |
||||
* React {@code Component} for the profile button. |
||||
* |
||||
* @extends Component |
||||
*/ |
||||
class ProfileButton extends Component { |
||||
_onClick: Function; |
||||
|
||||
/** |
||||
* {@code ProfileButton}'s property types. |
||||
* |
||||
* @static |
||||
*/ |
||||
static propTypes = { |
||||
/** |
||||
* Whether the button support clicking or not. |
||||
*/ |
||||
_unclickable: React.PropTypes.bool, |
||||
|
||||
/** |
||||
* Whether the side panel is opened or not. |
||||
*/ |
||||
toggled: React.PropTypes.bool, |
||||
|
||||
/** |
||||
* From which side tooltips should display. Will be re-used for |
||||
* displaying the inline dialog for video quality adjustment. |
||||
*/ |
||||
tooltipPosition: React.PropTypes.string |
||||
}; |
||||
|
||||
/** |
||||
* Initializes a new {@code ProfileButton} instance. |
||||
* |
||||
* @param {Object} props - The read-only properties with which the new |
||||
* instance is to be initialized. |
||||
*/ |
||||
constructor(props) { |
||||
super(props); |
||||
|
||||
// Bind event handlers so they are only bound once for every instance.
|
||||
this._onClick = this._onClick.bind(this); |
||||
} |
||||
|
||||
/** |
||||
* Implements React's {@link Component#render()}. |
||||
* |
||||
* @inheritdoc |
||||
* @returns {ReactElement} |
||||
*/ |
||||
render() { |
||||
const { _unclickable, tooltipPosition, toggled } = this.props; |
||||
const buttonConfiguration = { |
||||
...DEFAULT_BUTTON_CONFIGURATION, |
||||
unclickable: _unclickable, |
||||
toggled |
||||
}; |
||||
|
||||
return ( |
||||
<ToolbarButton |
||||
button = { buttonConfiguration } |
||||
onClick = { this._onClick } |
||||
tooltipPosition = { tooltipPosition }> |
||||
<img |
||||
id = 'avatar' |
||||
src = { DEFAULT_AVATAR_RELATIVE_PATH } /> |
||||
</ToolbarButton> |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Click handler for the button. |
||||
* |
||||
* @returns {void} |
||||
*/ |
||||
_onClick() { |
||||
if (!this.props._unclickable) { |
||||
JitsiMeetJS.analytics.sendEvent('toolbar.profile.toggled'); |
||||
APP.UI.emitEvent(UIEvents.TOGGLE_PROFILE); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Maps (parts of) the Redux state to the associated {@code ProfileButton} |
||||
* component's props. |
||||
* |
||||
* @param {Object} state - The Redux state. |
||||
* @private |
||||
* @returns {{ |
||||
* _unclickable: boolean |
||||
* }} |
||||
*/ |
||||
function _mapStateToProps(state) { |
||||
return { |
||||
_unclickable: !state['features/jwt'].isGuest |
||||
}; |
||||
} |
||||
|
||||
export default connect(_mapStateToProps)(ProfileButton); |
Loading…
Reference in new issue