2018-11-22 11:05:47 +08:00
|
|
|
import React, { Fragment } from 'react';
|
2018-10-15 15:51:29 +08:00
|
|
|
import PropTypes from 'prop-types';
|
2018-11-08 10:36:41 +08:00
|
|
|
import { Nav, NavItem, NavLink } from 'reactstrap';
|
|
|
|
import classnames from 'classnames';
|
2018-10-15 15:51:29 +08:00
|
|
|
import { gettext } from '../../utils/constants';
|
|
|
|
import ReviewListItem from './review-list-item';
|
|
|
|
|
|
|
|
const propTypes = {
|
|
|
|
isItemFreezed: PropTypes.bool.isRequired,
|
|
|
|
itemsList: PropTypes.array.isRequired,
|
2018-11-22 17:00:23 +08:00
|
|
|
getReviewList: PropTypes.func.isRequired,
|
|
|
|
activeTab: PropTypes.string.isRequired,
|
2018-10-15 15:51:29 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
class ReviewListView extends React.Component {
|
|
|
|
|
2018-11-22 17:00:23 +08:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
this.toggle = this.toggle.bind(this);
|
|
|
|
}
|
2018-11-08 10:36:41 +08:00
|
|
|
|
|
|
|
toggle(tab) {
|
2018-11-14 11:02:07 +08:00
|
|
|
if (this.props.activeTab !== tab) {
|
2018-11-22 17:00:23 +08:00
|
|
|
this.props.getReviewList(tab);
|
2018-11-08 10:36:41 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-10-15 15:51:29 +08:00
|
|
|
render() {
|
|
|
|
let items = this.props.itemsList;
|
|
|
|
return (
|
2018-11-22 11:05:47 +08:00
|
|
|
<Fragment>
|
2018-12-06 11:28:16 +08:00
|
|
|
<Nav pills>
|
2018-11-08 10:36:41 +08:00
|
|
|
<NavItem>
|
|
|
|
<NavLink
|
2018-11-14 11:02:07 +08:00
|
|
|
className={classnames({ active: this.props.activeTab === 'open' })}
|
2018-11-08 10:36:41 +08:00
|
|
|
onClick={() => { this.toggle('open');}}
|
2018-11-22 17:00:23 +08:00
|
|
|
>
|
2018-11-09 17:32:36 +08:00
|
|
|
{gettext('Open')}
|
2018-11-08 10:36:41 +08:00
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
<NavItem>
|
|
|
|
<NavLink
|
2018-11-14 11:02:07 +08:00
|
|
|
className={classnames({ active: this.props.activeTab === 'finished' })}
|
2018-11-08 10:36:41 +08:00
|
|
|
onClick={() => { this.toggle('finished');}}
|
2018-11-22 17:00:23 +08:00
|
|
|
>
|
2018-11-09 17:32:36 +08:00
|
|
|
{gettext('Published')}
|
2018-11-08 10:36:41 +08:00
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
<NavItem>
|
|
|
|
<NavLink
|
2018-11-14 11:02:07 +08:00
|
|
|
className={classnames({ active: this.props.activeTab === 'closed' })}
|
2018-11-08 10:36:41 +08:00
|
|
|
onClick={() => { this.toggle('closed');}}
|
2018-11-22 17:00:23 +08:00
|
|
|
>
|
2018-11-09 17:32:36 +08:00
|
|
|
{gettext('Closed')}
|
2018-11-08 10:36:41 +08:00
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
</Nav>
|
2018-10-15 15:51:29 +08:00
|
|
|
<table>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th style={{width: '4%'}}>{/*img*/}</th>
|
|
|
|
<th style={{width: '26%'}}>{gettext('Name')}</th>
|
2018-11-14 11:02:07 +08:00
|
|
|
<th style={{width: '25%'}}>{gettext('Library')}</th>
|
2018-10-15 15:51:29 +08:00
|
|
|
<th style={{width: '20%'}}>{gettext('Last Update')}</th>
|
2018-11-14 11:02:07 +08:00
|
|
|
<th style={{width: '10%'}}>{gettext('Author')}</th>
|
|
|
|
<th style={{width: '15%'}}>{gettext('Reviewers')}</th>
|
2018-10-15 15:51:29 +08:00
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
{ items && items.map((item) => {
|
2018-11-14 11:02:07 +08:00
|
|
|
return (
|
2018-11-22 17:00:23 +08:00
|
|
|
<ReviewListItem
|
|
|
|
key={item.id}
|
|
|
|
item={item}
|
|
|
|
isItemFreezed={this.props.isItemFreezed}
|
|
|
|
/>
|
2018-11-14 11:02:07 +08:00
|
|
|
);
|
2018-10-15 15:51:29 +08:00
|
|
|
})}
|
|
|
|
</tbody>
|
|
|
|
</table>
|
2018-11-22 11:05:47 +08:00
|
|
|
</Fragment>
|
2018-10-15 15:51:29 +08:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ReviewListView.propTypes = propTypes;
|
|
|
|
|
|
|
|
export default ReviewListView;
|