2017-05-16 13:34:00 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Routeservers List component
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2018-10-22 11:02:48 +02:00
|
|
|
import _ from 'underscore'
|
|
|
|
|
2017-05-16 13:34:00 +02:00
|
|
|
import React from 'react'
|
2018-09-25 21:37:28 +02:00
|
|
|
import {connect} from 'react-redux'
|
|
|
|
import {Link} from 'react-router'
|
2017-05-16 13:34:00 +02:00
|
|
|
|
2018-10-22 11:02:48 +02:00
|
|
|
import {loadRouteservers,
|
|
|
|
selectGroup}
|
|
|
|
from 'components/routeservers/actions'
|
2017-05-16 13:34:00 +02:00
|
|
|
|
2017-06-26 16:42:07 +02:00
|
|
|
// Components
|
2017-05-16 13:34:00 +02:00
|
|
|
import Status from './status'
|
|
|
|
|
2018-10-22 11:02:48 +02:00
|
|
|
const GroupSelect = (props) => {
|
|
|
|
if (props.groups.length < 2) {
|
|
|
|
return null; // why bother?
|
|
|
|
}
|
|
|
|
|
|
|
|
const options = props.groups.map((group) => (
|
2018-10-22 11:41:56 +02:00
|
|
|
<li key={group}>
|
|
|
|
<button className="btn btn-link btn-option" onClick={() => props.onChange(group)}>
|
|
|
|
{group}
|
|
|
|
</button>
|
|
|
|
</li>
|
2018-10-22 11:02:48 +02:00
|
|
|
));
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="routeservers-groups-select">
|
2018-10-22 11:41:56 +02:00
|
|
|
<div className="dropdown">
|
|
|
|
<button className="btn btn-default dropdown-toggle btn-select"
|
|
|
|
type="button"
|
|
|
|
id="select-routeservers-group"
|
|
|
|
data-toggle="dropdown"
|
|
|
|
aria-haspopup="true"
|
|
|
|
aria-expanded="true">
|
|
|
|
{props.selected}
|
|
|
|
<span className="caret"></span>
|
|
|
|
</button>
|
|
|
|
<ul className="dropdown-menu" aria-labelledby="select-routeservers-group">
|
|
|
|
{options}
|
|
|
|
</ul>
|
|
|
|
</div>
|
2018-10-22 11:02:48 +02:00
|
|
|
</div>
|
|
|
|
);
|
2018-10-22 11:41:56 +02:00
|
|
|
|
2018-10-22 11:02:48 +02:00
|
|
|
}
|
2017-05-16 13:34:00 +02:00
|
|
|
|
|
|
|
|
2018-10-22 11:02:48 +02:00
|
|
|
class RouteserversList extends React.Component {
|
2017-05-16 13:34:00 +02:00
|
|
|
componentDidMount() {
|
|
|
|
this.props.dispatch(
|
|
|
|
loadRouteservers()
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2018-10-22 11:02:48 +02:00
|
|
|
onSelectGroup(group) {
|
|
|
|
this.props.dispatch(selectGroup(group));
|
|
|
|
}
|
|
|
|
|
2017-05-16 13:34:00 +02:00
|
|
|
render() {
|
2018-10-22 11:02:48 +02:00
|
|
|
const rsGroup = _.where(this.props.routeservers, {
|
|
|
|
group: this.props.selectedGroup,
|
|
|
|
});
|
|
|
|
|
|
|
|
const routeservers = rsGroup.map((rs) =>
|
|
|
|
<li key={rs.id}>
|
2018-09-25 21:37:28 +02:00
|
|
|
<Link to={`/routeservers/${rs.id}`} className="routeserver-id">{rs.name}</Link>
|
2017-05-16 13:34:00 +02:00
|
|
|
<Status routeserverId={rs.id} />
|
|
|
|
</li>
|
|
|
|
);
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="routeservers-list">
|
2018-06-26 16:59:01 +02:00
|
|
|
<h2>route servers</h2>
|
2018-10-22 11:02:48 +02:00
|
|
|
<GroupSelect groups={this.props.groups}
|
|
|
|
selected={this.props.selectedGroup}
|
|
|
|
onChange={(group) => this.onSelectGroup(group)} />
|
|
|
|
<ul>
|
2017-05-16 13:34:00 +02:00
|
|
|
{routeservers}
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default connect(
|
|
|
|
(state) => {
|
|
|
|
return {
|
2018-10-22 11:02:48 +02:00
|
|
|
routeservers: state.routeservers.all,
|
|
|
|
|
|
|
|
groups: state.routeservers.groups,
|
|
|
|
isGrouped: state.routeservers.isGrouped,
|
|
|
|
selectedGroup: state.routeservers.selectedGroup,
|
2017-05-16 13:34:00 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
)(RouteserversList);
|
|
|
|
|
|
|
|
|