import React from 'react';
import MessageItem from './message-item.jsx'
import PropTypes from 'prop-types';
class HeaderMessages extends React.Component {
constructor(props) {
super(props);
this.state = { open: false };
this.toggleDropdown = this.toggleDropdown.bind(this);
}
toggleDropdown(e) {
if ((e.type === 'blur' && this.state.open) || e.type !== 'blur') {
this.setState({ open: !this.state.open });
}
}
render() {
const messageList = this.props.messages.map((msgDetails, i) => {
return (
<MessageItem
key={i}
title={msgDetails.title}
displayImg={msgDetails.displayImg}
time={msgDetails.time}
content={msgDetails.content}
link={msgDetails.link}
onClick={msgDetails.onClick}
/>
);
});
return (
<li className={`dropdown messages-menu${this.state.open ? ' open' : ''}`} tabIndex="0" onBlur={this.toggleDropdown}>
<a className="dropdown-toggle" data-toggle="dropdown-menu" onClick={this.toggleDropdown}>
<i className="fa fa-envelope-o" />
<span className="label label-success">{this.props.count || this.props.messages.length}</span>
</a>
<ul className="dropdown-menu">
<li className="header">You have {this.props.count || this.props.messages.length} messages</li>
<li>
<div className="slimScrollDiv">
<ul className="menu">
{messageList}
</ul>
<div className="slimScrollBar" />
<div className="slimScrollRail" />
</div>
</li>
{this.props.clickHandler ? (
<li className="footer">
<a onClick={this.props.clickHandler}>
See All Messages
</a>
</li>
) : ''}
</ul>
</li>
);
}
}
HeaderMessages.propTypes = {
count: PropTypes.number,
messages: PropTypes.array,
clickHandler: PropTypes.func
};
HeaderMessages.defaultProps = {
messages: []
};
export default HeaderMessages;
|