mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 18:20:27 +00:00
56 lines
2.1 KiB
JavaScript
56 lines
2.1 KiB
JavaScript
import React from 'react';
|
|
import { defaultSortDesc, getTableColumnsStyles } from '../../utils/node-details-utils';
|
|
import { NODE_DETAILS_TABLE_CW, NODE_DETAILS_TABLE_XS_LABEL } from '../../constants/styles';
|
|
|
|
|
|
export default class NodeDetailsTableHeaders extends React.Component {
|
|
handleClick(ev, headerId, currentSortedBy, currentSortedDesc) {
|
|
ev.preventDefault();
|
|
const header = this.props.headers.find(h => h.id === headerId);
|
|
const sortedBy = header.id;
|
|
const sortedDesc = sortedBy === currentSortedBy
|
|
? !currentSortedDesc : defaultSortDesc(header);
|
|
this.props.onClick(sortedBy, sortedDesc);
|
|
}
|
|
|
|
render() {
|
|
const { headers, sortedBy, sortedDesc } = this.props;
|
|
const colStyles = getTableColumnsStyles(headers);
|
|
return (
|
|
<tr>
|
|
{headers.map((header, index) => {
|
|
const headerClasses = ['node-details-table-header', 'truncate'];
|
|
const onClick = (ev) => {
|
|
this.handleClick(ev, header.id, sortedBy, sortedDesc);
|
|
};
|
|
// sort by first metric by default
|
|
const isSorted = header.id === sortedBy;
|
|
const isSortedDesc = isSorted && sortedDesc;
|
|
const isSortedAsc = isSorted && !isSortedDesc;
|
|
|
|
if (isSorted) {
|
|
headerClasses.push('node-details-table-header-sorted');
|
|
}
|
|
|
|
const style = colStyles[index];
|
|
const label =
|
|
(style.width === NODE_DETAILS_TABLE_CW.XS && NODE_DETAILS_TABLE_XS_LABEL[header.id]) ?
|
|
NODE_DETAILS_TABLE_XS_LABEL[header.id] : header.label;
|
|
|
|
return (
|
|
<td className={headerClasses.join(' ')} style={style} title={header.label} key={header.id}>
|
|
<div className="node-details-table-header-sortable" onClick={onClick}>
|
|
{isSortedAsc
|
|
&& <span className="node-details-table-header-sorter fa fa-caret-up" />}
|
|
{isSortedDesc
|
|
&& <span className="node-details-table-header-sorter fa fa-caret-down" />}
|
|
{label}
|
|
</div>
|
|
</td>
|
|
);
|
|
})}
|
|
</tr>
|
|
);
|
|
}
|
|
}
|