// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import * as Utils from 'utils/utils.jsx'; import Client from 'client/web_client.jsx'; import UserStore from 'stores/user_store.jsx'; import WebrtcStore from 'stores/webrtc_store.jsx'; import * as GlobalActions from 'actions/global_actions.jsx'; import * as WebrtcActions from 'actions/webrtc_actions.jsx'; import Constants from 'utils/constants.jsx'; const UserStatuses = Constants.UserStatuses; const PreReleaseFeatures = Constants.PRE_RELEASE_FEATURES; import {Popover, OverlayTrigger} from 'react-bootstrap'; import {FormattedMessage} from 'react-intl'; import React from 'react'; export default class UserProfile extends React.Component { constructor(props) { super(props); this.initWebrtc = this.initWebrtc.bind(this); this.state = { currentUserId: UserStore.getCurrentId() }; } initWebrtc() { if (this.props.status !== UserStatuses.OFFLINE && !WebrtcStore.isBusy()) { GlobalActions.emitCloseRightHandSide(); WebrtcActions.initWebrtc(this.props.user.id, true); } } shouldComponentUpdate(nextProps) { if (!Utils.areObjectsEqual(nextProps.user, this.props.user)) { return true; } if (nextProps.overwriteName !== this.props.overwriteName) { return true; } if (nextProps.overwriteImage !== this.props.overwriteImage) { return true; } if (nextProps.disablePopover !== this.props.disablePopover) { return true; } if (nextProps.displayNameType !== this.props.displayNameType) { return true; } if (nextProps.status !== this.props.status) { return true; } if (nextProps.isBusy !== this.props.isBusy) { return true; } return false; } render() { let name = '...'; let email = ''; let profileImg = ''; if (this.props.user) { name = Utils.displayUsername(this.props.user.id); email = this.props.user.email; profileImg = Client.getUsersRoute() + '/' + this.props.user.id + '/image?time=' + this.props.user.update_at; } if (this.props.overwriteName) { name = this.props.overwriteName; } if (this.props.overwriteImage) { profileImg = this.props.overwriteImage; } if (this.props.disablePopover) { return
{name}
; } let webrtc; const userMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; const webrtcEnabled = global.mm_config.EnableWebrtc === 'true' && global.mm_license.Webrtc === 'true' && global.mm_config.EnableDeveloper === 'true' && userMedia && Utils.isFeatureEnabled(PreReleaseFeatures.WEBRTC_PREVIEW); if (webrtcEnabled && this.props.user.id !== this.state.currentUserId) { const isOnline = this.props.status !== UserStatuses.OFFLINE; let webrtcMessage; let circleClass = 'offline'; if (isOnline && !this.props.isBusy) { circleClass = ''; webrtcMessage = ( ); } else if (this.props.isBusy) { webrtcMessage = ( ); } webrtc = (
this.initWebrtc()} disabled={!isOnline} > {webrtcMessage}
); } var dataContent = []; dataContent.push( ); const fullname = Utils.getFullName(this.props.user); if (fullname) { dataContent.push(

{fullname}

); } dataContent.push(webrtc); if (global.window.mm_config.ShowEmailAddress === 'true' || UserStore.isSystemAdminForCurrentUser() || this.props.user === UserStore.getCurrentUser()) { dataContent.push(
{email}
); } return ( {dataContent} } >
{name}
); } } UserProfile.defaultProps = { user: {}, overwriteName: '', overwriteImage: '', disablePopover: false }; UserProfile.propTypes = { user: React.PropTypes.object, overwriteName: React.PropTypes.string, overwriteImage: React.PropTypes.string, disablePopover: React.PropTypes.bool, displayNameType: React.PropTypes.string, status: React.PropTypes.string, isBusy: React.PropTypes.bool };