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