1
0
mirror of https://github.com/alice-lg/alice-lg.git synced 2024-05-11 05:55:03 +00:00

106 lines
2.4 KiB
React
Raw Normal View History

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
// 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">
<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);