Skip to content

Commit 7c935b3

Browse files
committed
Receive setRepoStates message in webview
1 parent 339fc9a commit 7c935b3

File tree

4 files changed

+71
-34
lines changed

4 files changed

+71
-34
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import * as React from 'react';
22
import { useCallback, useState } from 'react';
33
import styled from 'styled-components';
44
import { VSCodeBadge, VSCodeCheckbox } from '@vscode/webview-ui-toolkit/react';
5-
import { isCompletedAnalysisRepoStatus, VariantAnalysisRepoStatus } from '../../remote-queries/shared/variant-analysis';
5+
import {
6+
isCompletedAnalysisRepoStatus,
7+
VariantAnalysisRepoStatus,
8+
VariantAnalysisScannedRepositoryDownloadStatus
9+
} from '../../remote-queries/shared/variant-analysis';
610
import { formatDecimal } from '../../pure/number';
711
import { Codicon, ErrorIcon, LoadingIcon, SuccessIcon, WarningIcon } from '../common';
812
import { Repository } from '../../remote-queries/shared/repository';
@@ -62,6 +66,7 @@ export type RepoRowProps = {
6266
// Only fullName is required
6367
repository: Partial<Repository> & Pick<Repository, 'fullName'>;
6468
status?: VariantAnalysisRepoStatus;
69+
downloadStatus?: VariantAnalysisScannedRepositoryDownloadStatus;
6570
resultCount?: number;
6671

6772
interpretedResults?: AnalysisAlert[];

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

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import { ToVariantAnalysisMessage } from '../../pure/interface-types';
55
import {
66
VariantAnalysis as VariantAnalysisDomainModel,
77
VariantAnalysisQueryLanguage,
8-
VariantAnalysisRepoStatus, VariantAnalysisScannedRepositoryResult,
8+
VariantAnalysisRepoStatus, VariantAnalysisScannedRepositoryResult, VariantAnalysisScannedRepositoryState,
99
VariantAnalysisStatus
1010
} from '../../remote-queries/shared/variant-analysis';
11-
import { VariantAnalysisContainer } from './VariantAnalysisContainer';
1211
import { VariantAnalysisHeader } from './VariantAnalysisHeader';
1312
import { VariantAnalysisOutcomePanels } from './VariantAnalysisOutcomePanels';
1413
import { VariantAnalysisLoading } from './VariantAnalysisLoading';
@@ -200,40 +199,19 @@ const repositoryResults: VariantAnalysisScannedRepositoryResult[] = [
200199
}
201200
];
202201

203-
function getContainerContents(variantAnalysis: VariantAnalysisDomainModel, repoResults: VariantAnalysisScannedRepositoryResult[]) {
204-
if (variantAnalysis.actionsWorkflowRunId === undefined) {
205-
return <VariantAnalysisLoading />;
206-
}
207-
208-
return (
209-
<>
210-
<VariantAnalysisHeader
211-
variantAnalysis={variantAnalysis}
212-
onOpenQueryFileClick={() => console.log('Open query')}
213-
onViewQueryTextClick={() => console.log('View query')}
214-
onStopQueryClick={() => console.log('Stop query')}
215-
onCopyRepositoryListClick={() => console.log('Copy repository list')}
216-
onExportResultsClick={() => console.log('Export results')}
217-
onViewLogsClick={() => console.log('View logs')}
218-
/>
219-
<VariantAnalysisOutcomePanels
220-
variantAnalysis={variantAnalysis}
221-
repositoryResults={repoResults}
222-
/>
223-
</>
224-
);
225-
}
226-
227202
type Props = {
228203
variantAnalysis?: VariantAnalysisDomainModel;
204+
repoStates?: VariantAnalysisScannedRepositoryState[];
229205
repoResults?: VariantAnalysisScannedRepositoryResult[];
230206
}
231207

232208
export function VariantAnalysis({
233209
variantAnalysis: initialVariantAnalysis = variantAnalysis,
210+
repoStates: initialRepoStates = [],
234211
repoResults: initialRepoResults = repositoryResults,
235212
}: Props): JSX.Element {
236213
const [variantAnalysis, setVariantAnalysis] = useState<VariantAnalysisDomainModel>(initialVariantAnalysis);
214+
const [repoStates, setRepoStates] = useState<VariantAnalysisScannedRepositoryState[]>(initialRepoStates);
237215
const [repoResults, setRepoResults] = useState<VariantAnalysisScannedRepositoryResult[]>(initialRepoResults);
238216

239217
useEffect(() => {
@@ -247,6 +225,11 @@ export function VariantAnalysis({
247225
const newRepoIds = msg.repoResults.map(r => r.repositoryId);
248226
return [...oldRepoResults.filter(v => !newRepoIds.includes(v.repositoryId)), ...msg.repoResults];
249227
});
228+
} else if (msg.t === 'setRepoStates') {
229+
setRepoStates(oldRepoStates => {
230+
const newRepoIds = msg.repoStates.map(r => r.repositoryId);
231+
return [...oldRepoStates.filter(v => !newRepoIds.includes(v.repositoryId)), ...msg.repoStates];
232+
});
250233
}
251234
} else {
252235
// sanitize origin
@@ -256,9 +239,26 @@ export function VariantAnalysis({
256239
});
257240
});
258241

242+
if (variantAnalysis.actionsWorkflowRunId === undefined) {
243+
return <VariantAnalysisLoading />;
244+
}
245+
259246
return (
260-
<VariantAnalysisContainer>
261-
{getContainerContents(variantAnalysis, repoResults)}
262-
</VariantAnalysisContainer>
247+
<>
248+
<VariantAnalysisHeader
249+
variantAnalysis={variantAnalysis}
250+
onOpenQueryFileClick={() => console.log('Open query')}
251+
onViewQueryTextClick={() => console.log('View query')}
252+
onStopQueryClick={() => console.log('Stop query')}
253+
onCopyRepositoryListClick={() => console.log('Copy repository list')}
254+
onExportResultsClick={() => console.log('Export results')}
255+
onViewLogsClick={() => console.log('View logs')}
256+
/>
257+
<VariantAnalysisOutcomePanels
258+
variantAnalysis={variantAnalysis}
259+
repositoryStates={repoStates}
260+
repositoryResults={repoResults}
261+
/>
262+
</>
263263
);
264264
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import * as React from 'react';
22
import styled from 'styled-components';
3-
import { VariantAnalysis, VariantAnalysisScannedRepositoryResult } from '../../remote-queries/shared/variant-analysis';
43
import { RepoRow } from './RepoRow';
4+
import {
5+
VariantAnalysis,
6+
VariantAnalysisScannedRepositoryResult,
7+
VariantAnalysisScannedRepositoryState
8+
} from '../../remote-queries/shared/variant-analysis';
59
import { useMemo } from 'react';
610

711
const Container = styled.div`
@@ -12,13 +16,23 @@ const Container = styled.div`
1216

1317
export type VariantAnalysisAnalyzedReposProps = {
1418
variantAnalysis: VariantAnalysis;
19+
repositoryStates?: VariantAnalysisScannedRepositoryState[];
1520
repositoryResults?: VariantAnalysisScannedRepositoryResult[];
1621
}
1722

1823
export const VariantAnalysisAnalyzedRepos = ({
1924
variantAnalysis,
25+
repositoryStates,
2026
repositoryResults,
2127
}: VariantAnalysisAnalyzedReposProps) => {
28+
const repositoryStateById = useMemo(() => {
29+
const map = new Map<number, VariantAnalysisScannedRepositoryState>();
30+
repositoryStates?.forEach((repository) => {
31+
map.set(repository.repositoryId, repository);
32+
});
33+
return map;
34+
}, [repositoryStates]);
35+
2236
const repositoryResultsById = useMemo(() => {
2337
const map = new Map<number, VariantAnalysisScannedRepositoryResult>();
2438
repositoryResults?.forEach((repository) => {
@@ -30,13 +44,15 @@ export const VariantAnalysisAnalyzedRepos = ({
3044
return (
3145
<Container>
3246
{variantAnalysis.scannedRepos?.map(repository => {
47+
const state = repositoryStateById.get(repository.repository.id);
3348
const results = repositoryResultsById.get(repository.repository.id);
3449

3550
return (
3651
<RepoRow
3752
key={repository.repository.id}
3853
repository={repository.repository}
3954
status={repository.analysisStatus}
55+
downloadStatus={state?.downloadStatus}
4056
resultCount={repository.resultCount}
4157
interpretedResults={results?.interpretedResults}
4258
rawResults={results?.rawResults}

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@ import * as React from 'react';
22
import styled from 'styled-components';
33
import { VSCodeBadge, VSCodePanels, VSCodePanelTab, VSCodePanelView } from '@vscode/webview-ui-toolkit/react';
44
import { formatDecimal } from '../../pure/number';
5-
import { VariantAnalysis, VariantAnalysisScannedRepositoryResult } from '../../remote-queries/shared/variant-analysis';
5+
import {
6+
VariantAnalysis,
7+
VariantAnalysisScannedRepositoryResult,
8+
VariantAnalysisScannedRepositoryState
9+
} from '../../remote-queries/shared/variant-analysis';
610
import { VariantAnalysisAnalyzedRepos } from './VariantAnalysisAnalyzedRepos';
711
import { Alert } from '../common';
812
import { VariantAnalysisSkippedRepositoriesTab } from './VariantAnalysisSkippedRepositoriesTab';
913

1014
export type VariantAnalysisOutcomePanelProps = {
1115
variantAnalysis: VariantAnalysis;
16+
repositoryStates?: VariantAnalysisScannedRepositoryState[];
1217
repositoryResults?: VariantAnalysisScannedRepositoryResult[];
1318
};
1419

@@ -34,6 +39,7 @@ const WarningsContainer = styled.div`
3439

3540
export const VariantAnalysisOutcomePanels = ({
3641
variantAnalysis,
42+
repositoryStates,
3743
repositoryResults,
3844
}: VariantAnalysisOutcomePanelProps) => {
3945
const noCodeqlDbRepos = variantAnalysis.skippedRepos?.noCodeqlDbRepos;
@@ -64,7 +70,11 @@ export const VariantAnalysisOutcomePanels = ({
6470
return (
6571
<>
6672
{warnings}
67-
<VariantAnalysisAnalyzedRepos variantAnalysis={variantAnalysis} repositoryResults={repositoryResults} />
73+
<VariantAnalysisAnalyzedRepos
74+
variantAnalysis={variantAnalysis}
75+
repositoryStates={repositoryStates}
76+
repositoryResults={repositoryResults}
77+
/>
6878
</>
6979
);
7080
}
@@ -89,7 +99,13 @@ export const VariantAnalysisOutcomePanels = ({
8999
<VSCodeBadge appearance="secondary">{formatDecimal(noCodeqlDbRepos.repositoryCount)}</VSCodeBadge>
90100
</Tab>
91101
)}
92-
<VSCodePanelView><VariantAnalysisAnalyzedRepos variantAnalysis={variantAnalysis} repositoryResults={repositoryResults} /></VSCodePanelView>
102+
<VSCodePanelView>
103+
<VariantAnalysisAnalyzedRepos
104+
variantAnalysis={variantAnalysis}
105+
repositoryStates={repositoryStates}
106+
repositoryResults={repositoryResults}
107+
/>
108+
</VSCodePanelView>
93109
{notFoundRepos?.repositoryCount &&
94110
<VSCodePanelView>
95111
<VariantAnalysisSkippedRepositoriesTab

0 commit comments

Comments
 (0)