| 1 | const React = require('react');
|
|---|
| 2 |
|
|---|
| 3 | function getSortDetails(sortKey, activeSort) {
|
|---|
| 4 | let newSort = { sortKey, order: 'desc' };
|
|---|
| 5 | let sortClass = '';
|
|---|
| 6 | if (activeSort && activeSort.sortKey === sortKey) {
|
|---|
| 7 | sortClass = 'sorted';
|
|---|
| 8 | if (activeSort.order === 'desc') {
|
|---|
| 9 | sortClass += '-desc';
|
|---|
| 10 | newSort.order = 'asc';
|
|---|
| 11 | } else {
|
|---|
| 12 | if (sortKey !== 'file') {
|
|---|
| 13 | newSort = { sortKey: 'file', order: 'desc' };
|
|---|
| 14 | }
|
|---|
| 15 | }
|
|---|
| 16 | }
|
|---|
| 17 |
|
|---|
| 18 | return {
|
|---|
| 19 | newSort,
|
|---|
| 20 | sortClass
|
|---|
| 21 | };
|
|---|
| 22 | }
|
|---|
| 23 |
|
|---|
| 24 | function SummaryTableHeaderCell({ name, onSort, sortKey, activeSort }) {
|
|---|
| 25 | const { newSort, sortClass } = getSortDetails(sortKey, activeSort);
|
|---|
| 26 | return (
|
|---|
| 27 | <th
|
|---|
| 28 | className={'sortable headercell ' + sortClass}
|
|---|
| 29 | onClick={() => onSort(newSort)}
|
|---|
| 30 | >
|
|---|
| 31 | {name}
|
|---|
| 32 | <span className="sorter" />
|
|---|
| 33 | </th>
|
|---|
| 34 | );
|
|---|
| 35 | }
|
|---|
| 36 |
|
|---|
| 37 | function FileHeaderCell({ onSort, activeSort }) {
|
|---|
| 38 | const { newSort, sortClass } = getSortDetails('file', activeSort);
|
|---|
| 39 |
|
|---|
| 40 | return (
|
|---|
| 41 | <th
|
|---|
| 42 | className={'sortable file ' + sortClass}
|
|---|
| 43 | onClick={() => onSort(newSort)}
|
|---|
| 44 | >
|
|---|
| 45 | File
|
|---|
| 46 | <span className="sorter" />
|
|---|
| 47 | </th>
|
|---|
| 48 | );
|
|---|
| 49 | }
|
|---|
| 50 |
|
|---|
| 51 | function SubHeadings({ sortKeyPrefix, onSort, activeSort }) {
|
|---|
| 52 | return (
|
|---|
| 53 | <>
|
|---|
| 54 | <SummaryTableHeaderCell
|
|---|
| 55 | name="%"
|
|---|
| 56 | onSort={onSort}
|
|---|
| 57 | sortKey={sortKeyPrefix + '.pct'}
|
|---|
| 58 | activeSort={activeSort}
|
|---|
| 59 | />
|
|---|
| 60 | <th className="headercell"></th>
|
|---|
| 61 | <SummaryTableHeaderCell
|
|---|
| 62 | name="Covered"
|
|---|
| 63 | onSort={onSort}
|
|---|
| 64 | sortKey={sortKeyPrefix + '.covered'}
|
|---|
| 65 | activeSort={activeSort}
|
|---|
| 66 | />
|
|---|
| 67 | <SummaryTableHeaderCell
|
|---|
| 68 | name="Missed"
|
|---|
| 69 | onSort={onSort}
|
|---|
| 70 | sortKey={sortKeyPrefix + '.missed'}
|
|---|
| 71 | activeSort={activeSort}
|
|---|
| 72 | />
|
|---|
| 73 | <SummaryTableHeaderCell
|
|---|
| 74 | name="Total"
|
|---|
| 75 | onSort={onSort}
|
|---|
| 76 | sortKey={sortKeyPrefix + '.total'}
|
|---|
| 77 | activeSort={activeSort}
|
|---|
| 78 | />
|
|---|
| 79 | </>
|
|---|
| 80 | );
|
|---|
| 81 | }
|
|---|
| 82 |
|
|---|
| 83 | module.exports = function SummaryTableHeader({
|
|---|
| 84 | onSort,
|
|---|
| 85 | activeSort,
|
|---|
| 86 | metricsToShow
|
|---|
| 87 | }) {
|
|---|
| 88 | return (
|
|---|
| 89 | <thead>
|
|---|
| 90 | <tr className="topheading">
|
|---|
| 91 | <th></th>
|
|---|
| 92 | {metricsToShow.statements && <th colSpan={5}>Statements</th>}
|
|---|
| 93 | {metricsToShow.branches && <th colSpan={5}>Branches</th>}
|
|---|
| 94 | {metricsToShow.functions && <th colSpan={5}>Functions</th>}
|
|---|
| 95 | {metricsToShow.lines && <th colSpan={5}>Lines</th>}
|
|---|
| 96 | </tr>
|
|---|
| 97 | <tr className="subheading">
|
|---|
| 98 | <FileHeaderCell onSort={onSort} activeSort={activeSort} />
|
|---|
| 99 | {metricsToShow.statements && (
|
|---|
| 100 | <SubHeadings
|
|---|
| 101 | sortKeyPrefix="statements"
|
|---|
| 102 | onSort={onSort}
|
|---|
| 103 | activeSort={activeSort}
|
|---|
| 104 | />
|
|---|
| 105 | )}
|
|---|
| 106 | {metricsToShow.branches && (
|
|---|
| 107 | <SubHeadings
|
|---|
| 108 | sortKeyPrefix="branches"
|
|---|
| 109 | onSort={onSort}
|
|---|
| 110 | activeSort={activeSort}
|
|---|
| 111 | />
|
|---|
| 112 | )}
|
|---|
| 113 | {metricsToShow.functions && (
|
|---|
| 114 | <SubHeadings
|
|---|
| 115 | sortKeyPrefix="functions"
|
|---|
| 116 | onSort={onSort}
|
|---|
| 117 | activeSort={activeSort}
|
|---|
| 118 | />
|
|---|
| 119 | )}
|
|---|
| 120 | {metricsToShow.lines && (
|
|---|
| 121 | <SubHeadings
|
|---|
| 122 | sortKeyPrefix="lines"
|
|---|
| 123 | onSort={onSort}
|
|---|
| 124 | activeSort={activeSort}
|
|---|
| 125 | />
|
|---|
| 126 | )}
|
|---|
| 127 | </tr>
|
|---|
| 128 | </thead>
|
|---|
| 129 | );
|
|---|
| 130 | };
|
|---|