Skip to content

Commit afa3d55

Browse files
committed
Factor header rows into a component
1 parent b9d1551 commit afa3d55

File tree

1 file changed

+49
-37
lines changed

1 file changed

+49
-37
lines changed

extensions/ql-vscode/src/view/compare-performance/ComparePerformance.tsx

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,32 @@ const HeaderTR = styled.tr`
262262
background-color: var(--vscode-sideBar-background);
263263
`;
264264

265+
interface HeaderRowProps {
266+
hasBefore?: boolean;
267+
hasAfter?: boolean;
268+
comparison: boolean;
269+
title: React.ReactNode;
270+
}
271+
272+
function HeaderRow(props: HeaderRowProps) {
273+
const { comparison, hasBefore, hasAfter, title } = props;
274+
return (
275+
<HeaderTR>
276+
<ChevronCell />
277+
{comparison ? (
278+
<>
279+
<NumberHeader>{hasBefore ? "Before" : ""}</NumberHeader>
280+
<NumberHeader>{hasAfter ? "After" : ""}</NumberHeader>
281+
<NumberHeader>{hasBefore && hasAfter ? "Delta" : ""}</NumberHeader>
282+
</>
283+
) : (
284+
<NumberHeader>Value</NumberHeader>
285+
)}
286+
<NameHeader>{title}</NameHeader>
287+
</HeaderTR>
288+
);
289+
}
290+
265291
interface HighLevelStatsProps {
266292
before: Optional<PredicateInfo>;
267293
after: Optional<PredicateInfo>;
@@ -277,15 +303,12 @@ function HighLevelStats(props: HighLevelStatsProps) {
277303
(hasAfter && after.evaluationCount > 1);
278304
return (
279305
<>
280-
<HeaderTR>
281-
<ChevronCell></ChevronCell>
282-
{comparison && <NumberHeader>{hasBefore ? "Before" : ""}</NumberHeader>}
283-
<NumberHeader>{hasAfter ? "After" : ""}</NumberHeader>
284-
{comparison && (
285-
<NumberHeader>{hasBefore && hasAfter ? "Delta" : ""}</NumberHeader>
286-
)}
287-
<NameHeader>Stats</NameHeader>
288-
</HeaderTR>
306+
<HeaderRow
307+
hasBefore={hasBefore}
308+
hasAfter={hasAfter}
309+
title="Stats"
310+
comparison={comparison}
311+
/>
289312
{showEvaluationCount && (
290313
<PipelineStep
291314
before={hasBefore ? before.evaluationCount : undefined}
@@ -607,13 +630,7 @@ function ComparePerformanceWithData(props: {
607630
)}
608631
<Table>
609632
<thead>
610-
<HeaderTR>
611-
<ChevronCell />
612-
{comparison && <NumberHeader>Before</NumberHeader>}
613-
<NumberHeader>{comparison ? "After" : "Value"}</NumberHeader>
614-
{comparison && <NumberHeader>Delta</NumberHeader>}
615-
<NameHeader>Predicate</NameHeader>
616-
</HeaderTR>
633+
<HeaderRow comparison={comparison} title="Predicate" />
617634
</thead>
618635
<tbody>
619636
<tr key="total">
@@ -765,27 +782,22 @@ function PredicateRow(props: PredicateRowProps) {
765782
isPresent(row.after) ? row.after.pipelines : {},
766783
).map(({ name, first, second }, pipelineIndex) => (
767784
<Fragment key={pipelineIndex}>
768-
<HeaderTR>
769-
<td></td>
770-
{comparison && (
771-
<NumberHeader>{first != null && "Before"}</NumberHeader>
772-
)}
773-
<NumberHeader>{second != null && "After"}</NumberHeader>
774-
{comparison && (
775-
<NumberHeader>
776-
{first != null && second != null && "Delta"}
777-
</NumberHeader>
778-
)}
779-
<NameHeader>
780-
Tuple counts for &apos;{name}&apos; pipeline
781-
{comparison &&
782-
(first == null
783-
? " (after)"
784-
: second == null
785-
? " (before)"
786-
: "")}
787-
</NameHeader>
788-
</HeaderTR>
785+
<HeaderRow
786+
hasBefore={first != null}
787+
hasAfter={second != null}
788+
comparison={comparison}
789+
title={
790+
<>
791+
Tuple counts for &apos;{name}&apos; pipeline
792+
{comparison &&
793+
(first == null
794+
? " (after)"
795+
: second == null
796+
? " (before)"
797+
: "")}
798+
</>
799+
}
800+
/>
789801
{abbreviateRASteps(first?.steps ?? second!.steps).map(
790802
(step, index) => (
791803
<PipelineStep

0 commit comments

Comments
 (0)