Skip to content

Commit 5c5c2e4

Browse files
robertbrignullkoesie10
authored andcommitted
Show download percentage in UI
1 parent 2dc45ae commit 5c5c2e4

File tree

5 files changed

+86
-25
lines changed

5 files changed

+86
-25
lines changed

extensions/ql-vscode/src/stories/variant-analysis/RepoRow.stories.tsx

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { createMockRepositoryWithMetadata } from "../../../test/factories/remote
1515

1616
import * as analysesResults from "../remote-queries/data/analysesResultsMessage.json";
1717
import * as rawResults from "../remote-queries/data/rawResults.json";
18-
import { RepoRow } from "../../view/variant-analysis/RepoRow";
18+
import { RepoRow, RepoRowProps } from "../../view/variant-analysis/RepoRow";
1919

2020
export default {
2121
title: "Variant Analysis/Repo Row",
@@ -29,7 +29,7 @@ export default {
2929
],
3030
} as ComponentMeta<typeof RepoRow>;
3131

32-
const Template: ComponentStory<typeof RepoRow> = (args) => (
32+
const Template: ComponentStory<typeof RepoRow> = (args: RepoRowProps) => (
3333
<RepoRow {...args} />
3434
);
3535

@@ -77,23 +77,44 @@ SucceededDownloading.args = {
7777
...Pending.args,
7878
status: VariantAnalysisRepoStatus.Succeeded,
7979
resultCount: 198,
80-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
80+
downloadState: {
81+
repositoryId: 63537249,
82+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
83+
},
84+
};
85+
86+
export const SucceededDownloadingWithPercentage = Template.bind({});
87+
SucceededDownloadingWithPercentage.args = {
88+
...Pending.args,
89+
status: VariantAnalysisRepoStatus.Succeeded,
90+
resultCount: 198,
91+
downloadState: {
92+
repositoryId: 63537249,
93+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
94+
downloadPercentage: 42,
95+
},
8196
};
8297

8398
export const SucceededSuccessfulDownload = Template.bind({});
8499
SucceededSuccessfulDownload.args = {
85100
...Pending.args,
86101
status: VariantAnalysisRepoStatus.Succeeded,
87102
resultCount: 198,
88-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
103+
downloadState: {
104+
repositoryId: 63537249,
105+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
106+
},
89107
};
90108

91109
export const SucceededFailedDownload = Template.bind({});
92110
SucceededFailedDownload.args = {
93111
...Pending.args,
94112
status: VariantAnalysisRepoStatus.Succeeded,
95113
resultCount: 198,
96-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
114+
downloadState: {
115+
repositoryId: 63537249,
116+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
117+
},
97118
};
98119

99120
export const InterpretedResults = Template.bind({});

extensions/ql-vscode/src/view/common/icon/Codicon.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const Codicon = ({ name, label, className, slot }: Props) => (
1717
<CodiconIcon
1818
role="img"
1919
aria-label={label}
20+
title={label}
2021
className={classNames("codicon", `codicon-${name}`, className)}
2122
slot={slot}
2223
/>

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

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
isCompletedAnalysisRepoStatus,
77
VariantAnalysisRepoStatus,
88
VariantAnalysisScannedRepositoryDownloadStatus,
9+
VariantAnalysisScannedRepositoryState,
910
} from "../../remote-queries/shared/variant-analysis";
1011
import { formatDecimal } from "../../pure/number";
1112
import {
@@ -91,7 +92,7 @@ export type RepoRowProps = {
9192
repository: Partial<RepositoryWithMetadata> &
9293
Pick<RepositoryWithMetadata, "fullName">;
9394
status?: VariantAnalysisRepoStatus;
94-
downloadStatus?: VariantAnalysisScannedRepositoryDownloadStatus;
95+
downloadState?: VariantAnalysisScannedRepositoryState;
9596
resultCount?: number;
9697

9798
interpretedResults?: AnalysisAlert[];
@@ -163,7 +164,7 @@ const filterRepoRowExpandedTelemetry = (v: boolean) => v;
163164
export const RepoRow = ({
164165
repository,
165166
status,
166-
downloadStatus,
167+
downloadState,
167168
resultCount,
168169
interpretedResults,
169170
rawResults,
@@ -185,7 +186,7 @@ export const RepoRow = ({
185186
if (
186187
resultsLoaded ||
187188
status !== VariantAnalysisRepoStatus.Succeeded ||
188-
downloadStatus !==
189+
downloadState?.downloadStatus !==
189190
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded
190191
) {
191192
setExpanded((oldIsExpanded) => !oldIsExpanded);
@@ -203,7 +204,7 @@ export const RepoRow = ({
203204
resultsLoaded,
204205
repository.fullName,
205206
status,
206-
downloadStatus,
207+
downloadState,
207208
setExpanded,
208209
]);
209210

@@ -234,10 +235,11 @@ export const RepoRow = ({
234235
[onSelectedChange, repository],
235236
);
236237

237-
const disabled = !canExpand(status, downloadStatus) || resultsLoading;
238+
const disabled =
239+
!canExpand(status, downloadState?.downloadStatus) || resultsLoading;
238240
const expandableContentLoaded = isExpandableContentLoaded(
239241
status,
240-
downloadStatus,
242+
downloadState?.downloadStatus,
241243
resultsLoaded,
242244
);
243245

@@ -252,7 +254,9 @@ export const RepoRow = ({
252254
onChange={onChangeCheckbox}
253255
onClick={onClickCheckbox}
254256
checked={selected}
255-
disabled={!repository.id || !canSelect(status, downloadStatus)}
257+
disabled={
258+
!repository.id || !canSelect(status, downloadState?.downloadStatus)
259+
}
256260
/>
257261
{isExpanded && (
258262
<ExpandCollapseCodicon name="chevron-down" label="Collapse" />
@@ -278,11 +282,17 @@ export const RepoRow = ({
278282
)}
279283
{!status && <WarningIcon />}
280284
</span>
281-
{downloadStatus ===
285+
{downloadState?.downloadStatus ===
282286
VariantAnalysisScannedRepositoryDownloadStatus.InProgress && (
283-
<LoadingIcon label="Downloading" />
287+
<LoadingIcon
288+
label={
289+
downloadState.downloadPercentage !== undefined
290+
? `Downloading: ${downloadState.downloadPercentage}%`
291+
: "Downloading"
292+
}
293+
/>
284294
)}
285-
{downloadStatus ===
295+
{downloadState?.downloadStatus ===
286296
VariantAnalysisScannedRepositoryDownloadStatus.Failed && (
287297
<WarningIcon label="Failed to download the results" />
288298
)}
@@ -296,7 +306,7 @@ export const RepoRow = ({
296306
{isExpanded && expandableContentLoaded && (
297307
<AnalyzedRepoItemContent
298308
status={status}
299-
downloadStatus={downloadStatus}
309+
downloadStatus={downloadState?.downloadStatus}
300310
interpretedResults={interpretedResults}
301311
rawResults={rawResults}
302312
/>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export const VariantAnalysisAnalyzedRepos = ({
8989
key={repository.repository.id}
9090
repository={repository.repository}
9191
status={repository.analysisStatus}
92-
downloadStatus={state?.downloadStatus}
92+
downloadState={state}
9393
resultCount={repository.resultCount}
9494
interpretedResults={results?.interpretedResults}
9595
rawResults={results?.rawResults}

extensions/ql-vscode/src/view/variant-analysis/__tests__/RepoRow.spec.tsx

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,10 @@ describe(RepoRow.name, () => {
8787
render({
8888
status: VariantAnalysisRepoStatus.Succeeded,
8989
resultCount: 178,
90-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Pending,
90+
downloadState: {
91+
repositoryId: 1,
92+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Pending,
93+
},
9194
});
9295

9396
expect(
@@ -101,7 +104,11 @@ describe(RepoRow.name, () => {
101104
render({
102105
status: VariantAnalysisRepoStatus.Succeeded,
103106
resultCount: 178,
104-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
107+
downloadState: {
108+
repositoryId: 1,
109+
downloadStatus:
110+
VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
111+
},
105112
});
106113

107114
expect(
@@ -115,7 +122,11 @@ describe(RepoRow.name, () => {
115122
render({
116123
status: VariantAnalysisRepoStatus.Succeeded,
117124
resultCount: 178,
118-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
125+
downloadState: {
126+
repositoryId: 1,
127+
downloadStatus:
128+
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
129+
},
119130
});
120131

121132
expect(
@@ -129,7 +140,10 @@ describe(RepoRow.name, () => {
129140
render({
130141
status: VariantAnalysisRepoStatus.Succeeded,
131142
resultCount: 178,
132-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
143+
downloadState: {
144+
repositoryId: 1,
145+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
146+
},
133147
});
134148

135149
expect(
@@ -320,7 +334,11 @@ describe(RepoRow.name, () => {
320334
it("can expand the repo item when succeeded and loaded", async () => {
321335
render({
322336
status: VariantAnalysisRepoStatus.Succeeded,
323-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
337+
downloadState: {
338+
repositoryId: 1,
339+
downloadStatus:
340+
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
341+
},
324342
interpretedResults: [],
325343
});
326344

@@ -340,7 +358,11 @@ describe(RepoRow.name, () => {
340358
it("can expand the repo item when succeeded and not loaded", async () => {
341359
const { rerender } = render({
342360
status: VariantAnalysisRepoStatus.Succeeded,
343-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
361+
downloadState: {
362+
repositoryId: 1,
363+
downloadStatus:
364+
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
365+
},
344366
});
345367

346368
await userEvent.click(
@@ -411,7 +433,10 @@ describe(RepoRow.name, () => {
411433
it("does not allow selecting the item if the item has not been downloaded successfully", async () => {
412434
render({
413435
status: VariantAnalysisRepoStatus.Succeeded,
414-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
436+
downloadState: {
437+
repositoryId: 1,
438+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
439+
},
415440
});
416441

417442
// It seems like sometimes the first render doesn't have the checkbox disabled
@@ -424,7 +449,11 @@ describe(RepoRow.name, () => {
424449
it("allows selecting the item if the item has been downloaded", async () => {
425450
render({
426451
status: VariantAnalysisRepoStatus.Succeeded,
427-
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
452+
downloadState: {
453+
repositoryId: 1,
454+
downloadStatus:
455+
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
456+
},
428457
});
429458

430459
expect(screen.getByRole("checkbox")).toBeEnabled();

0 commit comments

Comments
 (0)