blob: 9d0182253c957225269b2c71cb3dcf6e39eacbb5 [file] [log] [blame]
import React from 'react';
import { Link } from 'react-router-dom';
import Icon from 'components/Icon';
import Pagination from 'components/Pagination';
export default class RoleList extends React.Component {
constructor(props) {
super(props);
this.state = {
filter: props.filter,
reverseSort: props.reverseSort || false,
sortBy: props.sortBy || 'role'
};
}
setFilter(e) {
this.setState({filter: e.target.value, sortBy: 'role'});
}
setSort(sortBy) {
// If they change sort key, it's always ascending the first time.
const reverseSort = (sortBy === this.state.sortBy) ? !this.state.reverseSort : false;
this.setState({reverseSort, sortBy});
}
_renderRow(r) {
return (<tr key={r.role}>
<td><Link to={`/scheduler/${r.role}`}>{r.role}</Link></td>
<td>{r.jobCount}</td>
<td>{r.cronJobCount}</td>
</tr>);
}
render() {
return (<div className='role-list'>
<div className='table-input-wrapper'>
<Icon name='search' />
<input
autoFocus
onChange={(e) => this.setFilter(e)}
placeholder='Search for roles'
type='text' />
</div>
<table className='aurora-table'>
<thead>
<tr>
<th onClick={(e) => this.setSort('role')}>Role</th>
<th onClick={(e) => this.setSort('jobCount')}>Jobs</th>
<th onClick={(e) => this.setSort('cronJobCount')}>Crons</th>
</tr>
</thead>
<Pagination
data={this.props.roles}
filter={(r) => (this.state.filter) ? r.role.includes(this.state.filter) : true}
hideIfSinglePage
isTable
numberPerPage={25}
renderer={this._renderRow}
reverseSort={this.state.reverseSort}
sortBy={this.state.sortBy} />
</table>
</div>);
}
}