1+ import type { ChangeEvent } from "react" ;
12import { useMemo , useState , Fragment } from "react" ;
23import type {
34 SetPerformanceComparisonQueries ,
@@ -178,6 +179,8 @@ const PipelineStepTR = styled.tr`
178179 }
179180` ;
180181
182+ const SortOrderDropdown = styled . select `` ;
183+
181184interface PipelineStepProps {
182185 before : number | undefined ;
183186 after : number | undefined ;
@@ -204,6 +207,20 @@ function PipelineStep(props: PipelineStepProps) {
204207 ) ;
205208}
206209
210+ type TRow = {
211+ name : string ;
212+ before : PredicateInfo ;
213+ after : PredicateInfo ;
214+ diff : number ;
215+ } ;
216+
217+ function getSortOrder ( sortOrder : "delta" | "absDelta" ) {
218+ if ( sortOrder === "absDelta" ) {
219+ return orderBy ( ( row : TRow ) => - Math . abs ( row . diff ) ) ;
220+ }
221+ return orderBy ( ( row : TRow ) => row . diff ) ;
222+ }
223+
207224function Chevron ( { expanded } : { expanded : boolean } ) {
208225 return < Codicon name = { expanded ? "chevron-down" : "chevron-right" } /> ;
209226}
@@ -247,6 +264,8 @@ export function ComparePerformance(_: Record<string, never>) {
247264
248265 const [ hideCacheHits , setHideCacheHits ] = useState ( false ) ;
249266
267+ const [ sortOrder , setSortOrder ] = useState < "delta" | "absDelta" > ( "delta" ) ;
268+
250269 if ( ! datasets ) {
251270 return < div > Loading performance comparison...</ div > ;
252271 }
@@ -280,7 +299,7 @@ export function ComparePerformance(_: Record<string, never>) {
280299 return { name, before, after, diff } ;
281300 } )
282301 . filter ( ( x ) => ! ! x )
283- . sort ( orderBy ( ( row ) => row . diff ) ) ;
302+ . sort ( getSortOrder ( sortOrder ) ) ;
284303
285304 let totalBefore = 0 ;
286305 let totalAfter = 0 ;
@@ -314,6 +333,15 @@ export function ComparePerformance(_: Record<string, never>) {
314333 </ label >
315334 </ WarningBox >
316335 ) }
336+ < SortOrderDropdown
337+ onChange = { ( e : ChangeEvent < HTMLSelectElement > ) =>
338+ setSortOrder ( e . target . value as "delta" | "absDelta" )
339+ }
340+ value = { sortOrder }
341+ >
342+ < option value = "delta" > Delta</ option >
343+ < option value = "absDelta" > Absolute delta</ option >
344+ </ SortOrderDropdown >
317345 < Table >
318346 < thead >
319347 < tr >
0 commit comments