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={4}>Statements</th>}
|
---|
93 | {metricsToShow.branches && <th colSpan={4}>Branches</th>}
|
---|
94 | {metricsToShow.functions && <th colSpan={4}>Functions</th>}
|
---|
95 | {metricsToShow.lines && <th colSpan={4}>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 | };
|
---|