From 4138ca1085629559340ad51a9a5f13bcc496a3f7 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Tue, 4 Oct 2022 11:50:56 +0200 Subject: [PATCH] Receive setRepoResults message in React component --- extensions/ql-vscode/src/pure/interface-types.ts | 10 ++++++++-- .../src/view/variant-analysis/VariantAnalysis.tsx | 14 +++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/extensions/ql-vscode/src/pure/interface-types.ts b/extensions/ql-vscode/src/pure/interface-types.ts index 0ac1d76d8..2620c05f1 100644 --- a/extensions/ql-vscode/src/pure/interface-types.ts +++ b/extensions/ql-vscode/src/pure/interface-types.ts @@ -2,7 +2,7 @@ import * as sarif from 'sarif'; import { AnalysisResults } from '../remote-queries/shared/analysis-result'; import { AnalysisSummary, RemoteQueryResult } from '../remote-queries/shared/remote-query-result'; import { RawResultSet, ResultRow, ResultSetSchema, Column, ResolvableLocationValue } from './bqrs-cli-types'; -import { VariantAnalysis } from '../remote-queries/shared/variant-analysis'; +import { VariantAnalysis, VariantAnalysisScannedRepositoryResult } from '../remote-queries/shared/variant-analysis'; /** * This module contains types and code that are shared between @@ -436,8 +436,14 @@ export interface SetVariantAnalysisMessage { variantAnalysis: VariantAnalysis; } +export interface SetRepoResultsMessage { + t: 'setRepoResults'; + repoResults: VariantAnalysisScannedRepositoryResult[]; +} + export type ToVariantAnalysisMessage = - | SetVariantAnalysisMessage; + | SetVariantAnalysisMessage + | SetRepoResultsMessage; export type FromVariantAnalysisMessage = | ViewLoadedMsg; diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx index 9d0d0afb5..100bfbab9 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx @@ -200,7 +200,7 @@ const repositoryResults: VariantAnalysisScannedRepositoryResult[] = [ } ]; -function getContainerContents(variantAnalysis: VariantAnalysisDomainModel) { +function getContainerContents(variantAnalysis: VariantAnalysisDomainModel, repoResults: VariantAnalysisScannedRepositoryResult[]) { if (variantAnalysis.actionsWorkflowRunId === undefined) { return ; } @@ -218,7 +218,7 @@ function getContainerContents(variantAnalysis: VariantAnalysisDomainModel) { /> ); @@ -226,12 +226,15 @@ function getContainerContents(variantAnalysis: VariantAnalysisDomainModel) { type Props = { variantAnalysis?: VariantAnalysisDomainModel; + repoResults?: VariantAnalysisScannedRepositoryResult[]; } export function VariantAnalysis({ variantAnalysis: initialVariantAnalysis = variantAnalysis, + repoResults: initialRepoResults = repositoryResults, }: Props): JSX.Element { const [variantAnalysis, setVariantAnalysis] = useState(initialVariantAnalysis); + const [repoResults, setRepoResults] = useState(initialRepoResults); useEffect(() => { window.addEventListener('message', (evt: MessageEvent) => { @@ -239,6 +242,11 @@ export function VariantAnalysis({ const msg: ToVariantAnalysisMessage = evt.data; if (msg.t === 'setVariantAnalysis') { setVariantAnalysis(msg.variantAnalysis); + } else if (msg.t === 'setRepoResults') { + setRepoResults(oldRepoResults => { + const newRepoIds = msg.repoResults.map(r => r.repositoryId); + return [...oldRepoResults.filter(v => !newRepoIds.includes(v.repositoryId)), ...msg.repoResults]; + }); } } else { // sanitize origin @@ -250,7 +258,7 @@ export function VariantAnalysis({ return ( - {getContainerContents(variantAnalysis)} + {getContainerContents(variantAnalysis, repoResults)} ); }