12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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
- && <i className="node-details-table-header-sorter fa fa-caret-up" />}
- {isSortedDesc
- && <i className="node-details-table-header-sorter fa fa-caret-down" />}
- {label}
- </div>
- </td>
- );
- })}
- </tr>
- );
- }
- }
|