@@ -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+
265291interface 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 '{ name } ' 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 '{ name } ' 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