import React from 'react';
import PropTypes from 'prop-types';
class HeaderUserMenu extends React.Component{
constructor(props) {
super(props);
this.state = { open: false };
this.toggleDropdown = this.toggleDropdown.bind(this);
this.clickLinks = this.clickLinks.bind(this);
}
toggleDropdown(e) {
if ((e.type === 'blur' && this.state.open) || e.type !== 'blur') {
this.setState({ open: !this.state.open });
}
}
clickLinks(e) {
e.preventDefault();
e.stopPropagation();
switch (e.currentTarget.id.replace('user-menu-', '')) {
case ('followers'):
if (this.props.followersOnClick) { this.props.followersOnClick(); }
break;
case ('sales'):
if (this.props.salesOnClick) { this.props.salesOnClick(); }
break;
case ('friends'):
if (this.props.friendsOnClick) { this.props.friendsOnClick(); }
break;
case ('profile'):
if (this.props.profileOnClick) { this.props.profileOnClick(); }
break;
default: break;
}
}
render() {
return (
<li className={`dropdown user user-menu${this.state.open ? ' open' : ''}`} tabIndex="0" onBlur={this.toggleDropdown}>
<a className="dropdown-toggle" data-toggle="dropdown-menu" onClick={this.toggleDropdown}>
{this.props.img ? <img src={this.props.img} className="user-image" alt="User Avatar" /> : ''}
<span className="hidden-xs">{this.props.username}</span>
</a>
<ul className="dropdown-menu">
<li className="user-header">
{this.props.img ? <img src={this.props.img} className="img-circle" alt="User Avatar" /> : ''}
<p>
{this.props.name}
{this.props.jobTitle ? ` - ${this.props.jobTitle}` : ''}
<small>Member since {this.props.joined}</small>
</p>
</li>
{this.props.friendsLink || this.props.salesLink || this.props.followersLink || this.props.friendsOnClick || this.props.salesOnClick || this.props.followersOnClick || this.props.children ? (
<li className="user-body">
{this.props.children}
{this.props.followersLink || this.props.followersOnClick ? (
<div className="col-xs-4 text-center">
<a id="user-menu-followers" href={this.props.followersLink} onClick={this.clickLinks}>Followers</a>
</div>
) : ''}
{this.props.salesLink || this.props.salesOnClick ? (
<div className="col-xs-4 text-center">
<a id="user-menu-sales" href={this.props.salesLink} onClick={this.clickLinks}>Sales</a>
</div>
) : ''}
{this.props.friendsLink || this.props.friendsOnClick ? (
<div className="col-xs-4 text-center">
<a id="user-menu-friends" href={this.props.friendsLink} onClick={this.clickLinks}>Friends</a>
</div>
) : ''}
</li>
) : ''}
<li className="user-footer">
{this.props.profileLink || this.props.profileOnClick ? (
<div className="pull-left">
<a id="user-menu-profile" href={this.props.profileLink} onClick={this.clickLinks} className="btn btn-default btn-flat">Profile</a>
</div>
) : ''}
{this.props.signOut ? (
<div className={this.props.profileLink || this.props.profileOnClick ? 'pull-right' : 'text-center'}>
<a className="btn btn-default btn-flat" onClick={this.props.signOut}>
Sign Out
</a>
</div>
) : ''}
</li>
</ul>
</li>
);
}
}
HeaderUserMenu.propTypes = {
username: PropTypes.string,
name: PropTypes.string,
jobTitle: PropTypes.string,
img: PropTypes.string,
profileLink: PropTypes.string,
profileOnClick: PropTypes.func,
followersLink: PropTypes.string,
followersOnClick: PropTypes.func,
salesLink: PropTypes.string,
salesOnClick: PropTypes.func,
friendsLink: PropTypes.string,
friendsOnClick: PropTypes.func,
joined: PropTypes.string,
signOut: PropTypes.func
};
HeaderUserMenu.defaultProps = {
username: '',
name: '',
joined: ''
};
export default HeaderUserMenu;
|