|
| 1 | +import type { ChangeEvent } from "react"; |
1 | 2 | import { useMemo, useState, Fragment } from "react"; |
2 | 3 | import type { |
3 | 4 | SetPerformanceComparisonQueries, |
@@ -184,6 +185,8 @@ const PipelineStepTR = styled.tr` |
184 | 185 | } |
185 | 186 | `; |
186 | 187 |
|
| 188 | +const SortOrderDropdown = styled.select``; |
| 189 | + |
187 | 190 | interface PipelineStepProps { |
188 | 191 | before: number | undefined; |
189 | 192 | after: number | undefined; |
@@ -253,6 +256,20 @@ function HighLevelStats(props: HighLevelStatsProps) { |
253 | 256 | ); |
254 | 257 | } |
255 | 258 |
|
| 259 | +type TRow = { |
| 260 | + name: string; |
| 261 | + before: PredicateInfo; |
| 262 | + after: PredicateInfo; |
| 263 | + diff: number; |
| 264 | +}; |
| 265 | + |
| 266 | +function getSortOrder(sortOrder: "delta" | "absDelta") { |
| 267 | + if (sortOrder === "absDelta") { |
| 268 | + return orderBy((row: TRow) => -Math.abs(row.diff)); |
| 269 | + } |
| 270 | + return orderBy((row: TRow) => row.diff); |
| 271 | +} |
| 272 | + |
256 | 273 | function Chevron({ expanded }: { expanded: boolean }) { |
257 | 274 | return <Codicon name={expanded ? "chevron-down" : "chevron-right"} />; |
258 | 275 | } |
@@ -296,6 +313,8 @@ export function ComparePerformance(_: Record<string, never>) { |
296 | 313 |
|
297 | 314 | const [hideCacheHits, setHideCacheHits] = useState(false); |
298 | 315 |
|
| 316 | + const [sortOrder, setSortOrder] = useState<"delta" | "absDelta">("delta"); |
| 317 | + |
299 | 318 | if (!datasets) { |
300 | 319 | return <div>Loading performance comparison...</div>; |
301 | 320 | } |
@@ -329,7 +348,7 @@ export function ComparePerformance(_: Record<string, never>) { |
329 | 348 | return { name, before, after, diff }; |
330 | 349 | }) |
331 | 350 | .filter((x) => !!x) |
332 | | - .sort(orderBy((row) => row.diff)); |
| 351 | + .sort(getSortOrder(sortOrder)); |
333 | 352 |
|
334 | 353 | let totalBefore = 0; |
335 | 354 | let totalAfter = 0; |
@@ -363,6 +382,15 @@ export function ComparePerformance(_: Record<string, never>) { |
363 | 382 | </label> |
364 | 383 | </WarningBox> |
365 | 384 | )} |
| 385 | + <SortOrderDropdown |
| 386 | + onChange={(e: ChangeEvent<HTMLSelectElement>) => |
| 387 | + setSortOrder(e.target.value as "delta" | "absDelta") |
| 388 | + } |
| 389 | + value={sortOrder} |
| 390 | + > |
| 391 | + <option value="delta">Delta</option> |
| 392 | + <option value="absDelta">Absolute delta</option> |
| 393 | + </SortOrderDropdown> |
366 | 394 | <Table> |
367 | 395 | <thead> |
368 | 396 | <tr> |
|
0 commit comments