Skip to content

Commit 1ca623f

Browse files
committed
Add display of duration and completion status
This will use the new fields on the API to display the duration and completion status of a variant analysis.
1 parent 53c404b commit 1ca623f

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

extensions/ql-vscode/src/pure/date.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,16 @@ export function formatDate(value: Date): string {
2424

2525
return dateFormatter.format(value);
2626
}
27+
28+
// These are overloads for the function that allow us to not add an extra
29+
// type check when the value is definitely not undefined.
30+
export function parseDate(value: string): Date;
31+
export function parseDate(value: string | undefined | null): Date | undefined;
32+
33+
export function parseDate(value: string | undefined | null): Date | undefined {
34+
if (value === undefined || value === null) {
35+
return undefined;
36+
}
37+
38+
return new Date(value);
39+
}

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ import {
1010
import { QueryDetails } from './QueryDetails';
1111
import { VariantAnalysisActions } from './VariantAnalysisActions';
1212
import { VariantAnalysisStats } from './VariantAnalysisStats';
13+
import { parseDate } from '../../pure/date';
1314

1415
export type VariantAnalysisHeaderProps = {
1516
variantAnalysis: VariantAnalysis;
1617

17-
duration?: number | undefined;
18-
completedAt?: Date | undefined;
19-
2018
onOpenQueryFileClick: () => void;
2119
onViewQueryTextClick: () => void;
2220

@@ -41,8 +39,6 @@ const Row = styled.div`
4139

4240
export const VariantAnalysisHeader = ({
4341
variantAnalysis,
44-
duration,
45-
completedAt,
4642
onOpenQueryFileClick,
4743
onViewQueryTextClick,
4844
onStopQueryClick,
@@ -63,6 +59,16 @@ export const VariantAnalysisHeader = ({
6359
return getSkippedRepoCount(variantAnalysis.skippedRepos) > 0;
6460
}, [variantAnalysis.skippedRepos]);
6561

62+
const duration = useMemo(() => {
63+
if (!variantAnalysis?.completedAt) {
64+
return undefined;
65+
}
66+
67+
const createdAt = parseDate(variantAnalysis.createdAt);
68+
const completedAt = parseDate(variantAnalysis.completedAt);
69+
return completedAt.getTime() - createdAt.getTime();
70+
}, [variantAnalysis?.completedAt, variantAnalysis?.createdAt]);
71+
6672
return (
6773
<Container>
6874
<Row>
@@ -86,7 +92,7 @@ export const VariantAnalysisHeader = ({
8692
resultCount={resultCount}
8793
hasWarnings={hasSkippedRepos}
8894
duration={duration}
89-
completedAt={completedAt}
95+
completedAt={parseDate(variantAnalysis.completedAt)}
9096
onViewLogsClick={onViewLogsClick}
9197
/>
9298
</Container>

0 commit comments

Comments
 (0)