in src/components/CompareResults/SubtestsResults/SubtestsRevisionRow.tsx [139:264]
function SubtestsRevisionRow(props: RevisionRowProps) {
const id = useId();
const { result, gridTemplateColumns } = props;
const {
test,
base_avg_value: baseAvgValue,
base_measurement_unit: baseUnit,
new_avg_value: newAvgValue,
new_measurement_unit: newUnit,
is_improvement: improvement,
is_regression: regression,
delta_percentage: deltaPercent,
confidence_text: confidenceText,
base_runs: baseRuns,
new_runs: newRuns,
graphs_link: graphLink,
base_app: baseApp,
new_app: newApp,
} = result;
const [expanded, setExpanded] = useState(false);
const toggleIsExpanded = () => {
setExpanded(!expanded);
};
const themeMode = useAppSelector((state) => state.theme.mode);
return (
<>
<Box
className={`revisionRow ${styles[themeMode].revisionRow} ${styles[themeMode].typography}`}
sx={{ gridTemplateColumns }}
role='row'
>
<div title={test} className='subtests' role='cell'>
{test}
</div>
<div className='browser-name cell' role='cell'>
{formatNumber(baseAvgValue)} {baseUnit}
{getBrowserDisplay(baseApp, newApp, expanded) && (
<span className={FontSize.xSmall}>({baseApp})</span>
)}
</div>
<div className='comparison-sign cell' role='cell'>
{determineSign(baseAvgValue, newAvgValue)}
</div>
<div className='browser-name cell' role='cell'>
{formatNumber(newAvgValue)} {newUnit}
{getBrowserDisplay(baseApp, newApp, expanded) && (
<span className={FontSize.xSmall}>({newApp})</span>
)}
</div>
<div className='status cell' role='cell'>
<Box
sx={{
bgcolor: improvement
? 'status.improvement'
: regression
? 'status.regression'
: 'none',
}}
className={`status-hint ${determineStatusHintClass(
improvement,
regression,
)}`}
>
{improvement ? <ThumbUpIcon color='success' /> : null}
{regression ? <ThumbDownIcon color='error' /> : null}
{determineStatus(improvement, regression)}
</Box>
</div>
<div className='delta cell' role='cell'>
{' '}
{deltaPercent} %{' '}
</div>
<div className='confidence cell' role='cell'>
{confidenceText && confidenceIcons[confidenceText]}
{confidenceText}
</div>
<div className='total-runs cell' role='cell'>
<span>
<span title='Base runs'>B:</span>
<strong>{baseRuns.length}</strong>
</span>
<span>
<span title='New runs'>N:</span>
<strong>{newRuns.length}</strong>
</span>
</div>
<div className='row-buttons cell'>
<div className='graph' role='cell'>
<div className='graph-link-button-container'>
<IconButton
title={Strings.components.revisionRow.title.graphLink}
color='primary'
size='small'
href={graphLink}
target='_blank'
>
<TimelineIcon />
</IconButton>
</div>
</div>
</div>
<div className='expand-button cell' role='cell'>
<IconButton
title={
expanded
? Strings.components.expandableRow.title.shrink
: Strings.components.expandableRow.title.expand
}
color='primary'
size='small'
onClick={toggleIsExpanded}
aria-expanded={expanded}
aria-controls={id}
>
{expanded ? <ExpandLessIcon /> : <ExpandMoreIcon />}
</IconButton>
</div>
</Box>
{expanded && <RevisionRowExpandable id={id} result={result} />}
</>
);
}