2018-09-12 17:01:48 +08:00
|
|
|
import React from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import moment from 'moment';
|
|
|
|
import NodeMenuControl from '../menu-component/node-menu-control';
|
|
|
|
|
|
|
|
moment.locale(window.app.config.lang);
|
|
|
|
const propTypes = {
|
|
|
|
isItemFrezeed: PropTypes.bool.isRequired,
|
|
|
|
isFirstItem: PropTypes.bool.isRequired,
|
|
|
|
item: PropTypes.object.isRequired,
|
|
|
|
currentItem: PropTypes.object.isRequired,
|
|
|
|
onMenuControlClick: PropTypes.func.isRequired,
|
|
|
|
onHistoryItemClick: PropTypes.func.isRequired,
|
|
|
|
};
|
|
|
|
|
|
|
|
class HistoryListItem extends React.Component {
|
|
|
|
|
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
this.state = {
|
|
|
|
isShowOperationIcon: false
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
onMouseEnter = () => {
|
|
|
|
if (!this.props.isItemFrezeed) {
|
|
|
|
this.setState({isShowOperationIcon: true});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
onMouseLeave = () => {
|
|
|
|
if (!this.props.isItemFrezeed) {
|
|
|
|
this.setState({isShowOperationIcon: false});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
onItemClick = () => {
|
|
|
|
if (this.props.item.commit_id === this.props.currentItem.commit_id) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
this.setState({isShowOperationIcon: false}); //restore to default state
|
2018-09-26 02:27:14 -07:00
|
|
|
this.props.onHistoryItemClick(this.props.item, this.props.preCommitID);
|
2018-09-12 17:01:48 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
onMenuControlClick = (e) => {
|
|
|
|
e.nativeEvent.stopImmediatePropagation();
|
|
|
|
this.props.onMenuControlClick(e, this.props.item , this.props.isFirstItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
let item = this.props.item;
|
2018-09-21 11:05:51 +08:00
|
|
|
let time = moment.parseZone(item.ctime).format('YYYY-MM-DD HH:mm');
|
2018-09-12 17:01:48 +08:00
|
|
|
let isHigtlightItem = false;
|
|
|
|
if (this.props.item && this.props.currentItem) {
|
|
|
|
isHigtlightItem = this.props.item.commit_id === this.props.currentItem.commit_id;
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
<li
|
|
|
|
className={`history-list-item ${isHigtlightItem ? 'item-active' : ''}`}
|
|
|
|
onMouseEnter={this.onMouseEnter}
|
|
|
|
onMouseLeave={this.onMouseLeave}
|
|
|
|
onClick={this.onItemClick}
|
|
|
|
>
|
|
|
|
<div className="history-info">
|
|
|
|
<div className="time">{time}</div>
|
|
|
|
<div className="owner">
|
|
|
|
<span className="squire-icon"></span>
|
|
|
|
<span>{item.creator_name}</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className="history-operation">
|
|
|
|
<NodeMenuControl
|
|
|
|
isShow={this.state.isShowOperationIcon || isHigtlightItem}
|
|
|
|
onClick={this.onMenuControlClick}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</li>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
HistoryListItem.propTypes = propTypes;
|
|
|
|
|
|
|
|
export default HistoryListItem;
|