diff options
Diffstat (limited to 'node_modules/istanbul-reports/lib/html-spa/src/summaryTableLine.js')
-rw-r--r-- | node_modules/istanbul-reports/lib/html-spa/src/summaryTableLine.js | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/node_modules/istanbul-reports/lib/html-spa/src/summaryTableLine.js b/node_modules/istanbul-reports/lib/html-spa/src/summaryTableLine.js new file mode 100644 index 0000000..6dc56e6 --- /dev/null +++ b/node_modules/istanbul-reports/lib/html-spa/src/summaryTableLine.js @@ -0,0 +1,159 @@ +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} + /> + ))} + </> + ); +}; |