123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- const React = require('react');
- function MetricCells({ metrics }) {
- const { classForPercent, pct, covered, missed, total } = metrics;
- return (
- <>
- <td className={'pct ' + classForPercent}>{Math.round(pct)}% </td>
- <td className={classForPercent}>
- <div className="bar">
- <div
- className={`bar__data ${classForPercent} ${classForPercent}--dark`}
- style={{ width: pct + '%' }}
- ></div>
- </div>
- </td>
- <td className={'abs ' + classForPercent}>{covered}</td>
- <td className={'abs ' + classForPercent}>{missed}</td>
- <td className={'abs ' + classForPercent}>{total}</td>
- </>
- );
- }
- function FileCell({
- file,
- prefix,
- expandedLines,
- setExpandedLines,
- hasChildren,
- setFileFilter
- }) {
- if (hasChildren) {
- const expandedIndex = expandedLines.indexOf(prefix + file);
- const isExpanded = expandedIndex >= 0;
- const newExpandedLines = isExpanded
- ? [
- ...expandedLines.slice(0, expandedIndex),
- ...expandedLines.slice(expandedIndex + 1)
- ]
- : [...expandedLines, prefix + file];
- return (
- <>
- <button
- type="button"
- onClick={() => setExpandedLines(newExpandedLines)}
- className="expandbutton"
- >
- {isExpanded ? String.fromCharCode(0x2013) : '+'}
- </button>
- <a
- href="javascript:void(0)"
- onClick={() => setFileFilter(prefix + file)}
- >
- {file}
- </a>
- </>
- );
- } else {
- return <a href={`./${prefix}${file}.html`}>{file}</a>;
- }
- }
- function getWorstMetricClassForPercent(metricsToShow, metrics) {
- let classForPercent = 'none';
- for (const metricToShow in metricsToShow) {
- if (metricsToShow[metricToShow]) {
- const metricClassForPercent = metrics[metricToShow].classForPercent;
- // ignore none metrics so they don't change whats shown
- if (metricClassForPercent === 'none') {
- continue;
- }
- // if the metric low or lower than whats currently being used, replace it
- if (
- metricClassForPercent == 'low' ||
- (metricClassForPercent === 'medium' &&
- classForPercent !== 'low') ||
- (metricClassForPercent === 'high' &&
- classForPercent !== 'low' &&
- classForPercent !== 'medium')
- ) {
- classForPercent = metricClassForPercent;
- }
- }
- }
- return classForPercent;
- }
- module.exports = function SummaryTableLine({
- prefix,
- metrics,
- file,
- children,
- tabSize,
- metricsToShow,
- expandedLines,
- setExpandedLines,
- fileFilter,
- setFileFilter
- }) {
- tabSize = tabSize || 0;
- if (children && tabSize > 0) {
- tabSize--;
- }
- prefix = (fileFilter ? fileFilter + '/' : '') + (prefix || '');
- return (
- <>
- <tr>
- <td
- className={
- 'file ' +
- getWorstMetricClassForPercent(metricsToShow, metrics)
- }
- >
- {/* eslint-disable-line prefer-spread */ Array.apply(null, {
- length: tabSize
- }).map((nothing, index) => (
- <span className="filetab" key={index} />
- ))}
- <FileCell
- file={file}
- prefix={prefix}
- expandedLines={expandedLines}
- setExpandedLines={setExpandedLines}
- hasChildren={Boolean(children)}
- setFileFilter={setFileFilter}
- />
- </td>
- {metricsToShow.statements && (
- <MetricCells metrics={metrics.statements} />
- )}
- {metricsToShow.branches && (
- <MetricCells metrics={metrics.branches} />
- )}
- {metricsToShow.functions && (
- <MetricCells metrics={metrics.functions} />
- )}
- {metricsToShow.lines && <MetricCells metrics={metrics.lines} />}
- </tr>
- {children &&
- expandedLines.indexOf(prefix + file) >= 0 &&
- children.map(child => (
- <SummaryTableLine
- {...child}
- tabSize={tabSize + 2}
- key={child.file}
- prefix={prefix + file + '/'}
- metricsToShow={metricsToShow}
- expandedLines={expandedLines}
- setExpandedLines={setExpandedLines}
- setFileFilter={setFileFilter}
- />
- ))}
- </>
- );
- };
|