130 lines
3.8 KiB
JavaScript
Executable file
130 lines
3.8 KiB
JavaScript
Executable file
const React = require('react');
|
|
|
|
function getSortDetails(sortKey, activeSort) {
|
|
let newSort = { sortKey, order: 'desc' };
|
|
let sortClass = '';
|
|
if (activeSort && activeSort.sortKey === sortKey) {
|
|
sortClass = 'sorted';
|
|
if (activeSort.order === 'desc') {
|
|
sortClass += '-desc';
|
|
newSort.order = 'asc';
|
|
} else {
|
|
if (sortKey !== 'file') {
|
|
newSort = { sortKey: 'file', order: 'desc' };
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
newSort,
|
|
sortClass
|
|
};
|
|
}
|
|
|
|
function SummaryTableHeaderCell({ name, onSort, sortKey, activeSort }) {
|
|
const { newSort, sortClass } = getSortDetails(sortKey, activeSort);
|
|
return (
|
|
<th
|
|
className={'sortable headercell ' + sortClass}
|
|
onClick={() => onSort(newSort)}
|
|
>
|
|
{name}
|
|
<span className="sorter" />
|
|
</th>
|
|
);
|
|
}
|
|
|
|
function FileHeaderCell({ onSort, activeSort }) {
|
|
const { newSort, sortClass } = getSortDetails('file', activeSort);
|
|
|
|
return (
|
|
<th
|
|
className={'sortable file ' + sortClass}
|
|
onClick={() => onSort(newSort)}
|
|
>
|
|
File
|
|
<span className="sorter" />
|
|
</th>
|
|
);
|
|
}
|
|
|
|
function SubHeadings({ sortKeyPrefix, onSort, activeSort }) {
|
|
return (
|
|
<>
|
|
<SummaryTableHeaderCell
|
|
name="%"
|
|
onSort={onSort}
|
|
sortKey={sortKeyPrefix + '.pct'}
|
|
activeSort={activeSort}
|
|
/>
|
|
<th className="headercell"></th>
|
|
<SummaryTableHeaderCell
|
|
name="Covered"
|
|
onSort={onSort}
|
|
sortKey={sortKeyPrefix + '.covered'}
|
|
activeSort={activeSort}
|
|
/>
|
|
<SummaryTableHeaderCell
|
|
name="Missed"
|
|
onSort={onSort}
|
|
sortKey={sortKeyPrefix + '.missed'}
|
|
activeSort={activeSort}
|
|
/>
|
|
<SummaryTableHeaderCell
|
|
name="Total"
|
|
onSort={onSort}
|
|
sortKey={sortKeyPrefix + '.total'}
|
|
activeSort={activeSort}
|
|
/>
|
|
</>
|
|
);
|
|
}
|
|
|
|
module.exports = function SummaryTableHeader({
|
|
onSort,
|
|
activeSort,
|
|
metricsToShow
|
|
}) {
|
|
return (
|
|
<thead>
|
|
<tr className="topheading">
|
|
<th></th>
|
|
{metricsToShow.statements && <th colSpan={4}>Statements</th>}
|
|
{metricsToShow.branches && <th colSpan={4}>Branches</th>}
|
|
{metricsToShow.functions && <th colSpan={4}>Functions</th>}
|
|
{metricsToShow.lines && <th colSpan={4}>Lines</th>}
|
|
</tr>
|
|
<tr className="subheading">
|
|
<FileHeaderCell onSort={onSort} activeSort={activeSort} />
|
|
{metricsToShow.statements && (
|
|
<SubHeadings
|
|
sortKeyPrefix="statements"
|
|
onSort={onSort}
|
|
activeSort={activeSort}
|
|
/>
|
|
)}
|
|
{metricsToShow.branches && (
|
|
<SubHeadings
|
|
sortKeyPrefix="branches"
|
|
onSort={onSort}
|
|
activeSort={activeSort}
|
|
/>
|
|
)}
|
|
{metricsToShow.functions && (
|
|
<SubHeadings
|
|
sortKeyPrefix="functions"
|
|
onSort={onSort}
|
|
activeSort={activeSort}
|
|
/>
|
|
)}
|
|
{metricsToShow.lines && (
|
|
<SubHeadings
|
|
sortKeyPrefix="lines"
|
|
onSort={onSort}
|
|
activeSort={activeSort}
|
|
/>
|
|
)}
|
|
</tr>
|
|
</thead>
|
|
);
|
|
};
|