import _ from 'underscore' import React from 'react' import {connect} from 'react-redux' import {loadRouteserverRoutes, loadRouteserverRoutesFiltered} from '../actions' import {showBgpAttributes} from './bgp-attributes-modal-actions' import LoadingIndicator from 'components/loading-indicator/small' import FilterReason from 'components/routeservers/large-communities/filter-reason' import NoexportReason from 'components/routeservers/large-communities/noexport-reason' function _filteredRoutes(routes, filter) { let filtered = []; if(filter == "") { return routes; // nothing to do here } filter = filter.toLowerCase(); // Filter protocols filtered = _.filter(routes, (r) => { return (r.network.toLowerCase().indexOf(filter) != -1 || r.gateway.toLowerCase().indexOf(filter) != -1 || r.interface.toLowerCase().indexOf(filter) != -1); }); return filtered; } class RoutesTable extends React.Component { showAttributesModal(route) { this.props.dispatch( showBgpAttributes(route) ); } render() { let routes = this.props.routes; const routes_columns = this.props.routes_columns; routes = _filteredRoutes(routes, this.props.filter); if (!routes || !routes.length) { return null; } const _lookup = (r, path) => { const split = path.split(".").reduce((acc, elem) => acc[elem], r); if (Array.isArray(split)) { // this is for the ASN column, dirty hack. var baseUrl = "http://irrexplorer.nlnog.net/search/" let asnLinks = split.map((asn, i) => { return ({asn} ); }); return asnLinks; } return split; } let routesView = routes.map((r,i) => { return (
Network | {Object.values(routes_columns).map(col =>{col} | )}
---|
No routes matched your filter.
); } const received = routes.filter(r => filtered.indexOf(r) < 0); const mkHeader = (color, action) => (Routes {action}
); const filtdHeader = mkHeader("orange", "filtered"); const recvdHeader = mkHeader("green", "accepted"); const noexHeader = mkHeader("red", "not exported"); return (