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

105 lines
2.4 KiB
React
Raw Normal View History

2018-08-02 14:52:53 +02:00
/*
* Routes Rendering Columns
*/
2018-09-07 14:53:50 +02:00
import _ from 'underscore'
2018-08-02 14:52:53 +02:00
import React from 'react'
2018-09-17 22:44:21 +02:00
import {connect} from 'react-redux'
2018-08-02 14:52:53 +02:00
import FilterReason
from 'components/routeservers/large-communities/filter-reason'
import NoexportReason
from 'components/routeservers/large-communities/noexport-reason'
import {ROUTES_RECEIVED,
ROUTES_FILTERED,
2018-09-17 23:22:41 +02:00
ROUTES_NOT_EXPORTED} from '../actions'
2018-08-02 14:52:53 +02:00
2018-09-07 14:53:50 +02:00
2018-09-17 23:22:41 +02:00
import {PrimaryIndicator,
BlackholeIndicator,
RpkiIndicator} from './flags'
2018-08-02 14:52:53 +02:00
2018-09-17 22:44:21 +02:00
// Helper: Lookup value in route path
export const _lookup = (r, path) => {
return path.split(".").reduce((acc, elem) => acc[elem], r);
}
2018-08-02 14:52:53 +02:00
export const ColDefault = function(props) {
return (
<td>
<span onClick={props.onClick}>{_lookup(props.route, props.column)}</span>
</td>
);
2018-08-02 14:52:53 +02:00
}
// Include filter and noexport reason in this column.
export const ColNetwork = function(props) {
return (
<td className="col-route-network">
<span className="route-network" onClick={props.onClick}>
{props.route.network}
</span>
2018-10-03 17:56:25 +02:00
<FilterReason route={props.route} />
<NoexportReason route={props.route} />
2018-08-02 14:52:53 +02:00
</td>
);
}
// Special AS Path Widget
export const ColAsPath = function(props) {
const asns = _lookup(props.route, "bgp.as_path");
const baseUrl = "http://irrexplorer.nlnog.net/search/"
let asnLinks = asns.map((asn, i) => {
return (<a key={`${asn}_${i}`} href={baseUrl + asn} target="_blank">{asn} </a>);
});
return (
<td>
{asnLinks}
</td>
);
}
2018-09-07 16:57:16 +02:00
export const ColFlags = function(props) {
return (
<td className="col-route-flags">
<span className="route-prefix-flags">
2018-09-17 23:22:41 +02:00
<RpkiIndicator route={props.route} />
2018-09-23 17:22:15 +02:00
<PrimaryIndicator route={props.route} />
2018-09-17 22:44:21 +02:00
<BlackholeIndicator route={props.route}
blackholes={props.blackholes} />
2018-09-07 16:57:16 +02:00
</span>
</td>
);
}
2018-08-02 14:52:53 +02:00
// Meta component, decides what to render based on on
// prop 'column'.
export default function(props) {
2018-08-02 14:52:53 +02:00
const widgets = {
"network": ColNetwork,
2018-09-07 16:57:16 +02:00
"flags": ColFlags,
2018-08-02 14:52:53 +02:00
"bgp.as_path": ColAsPath,
"ASPath": ColAsPath,
};
let Widget = widgets[props.column] || ColDefault;
return (
<Widget column={props.column} route={props.route}
displayReasons={props.displayReasons}
2018-09-17 19:49:55 +02:00
blackholes={props.blackholes}
2018-08-02 14:52:53 +02:00
onClick={props.onClick} />
);
}