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 ( {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 ( {isSortedAsc && } {isSortedDesc && } {label} ); })} ); } }