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> ); } }