Merge pull request #1574 from github/koesie10/view-loaded-message

Handle `viewLoaded` message
This commit is contained in:
Koen Vlaswinkel
2022-10-12 13:49:48 +02:00
committed by GitHub
7 changed files with 95 additions and 222 deletions

View File

@@ -314,10 +314,6 @@
"command": "codeQL.exportVariantAnalysisResults", "command": "codeQL.exportVariantAnalysisResults",
"title": "CodeQL: Export Variant Analysis Results" "title": "CodeQL: Export Variant Analysis Results"
}, },
{
"command": "codeQL.mockVariantAnalysisView",
"title": "CodeQL: Open Variant Analysis Mock View"
},
{ {
"command": "codeQL.runQueries", "command": "codeQL.runQueries",
"title": "CodeQL: Run Queries in Selected Files" "title": "CodeQL: Run Queries in Selected Files"
@@ -898,10 +894,6 @@
"command": "codeQL.exportVariantAnalysisResults", "command": "codeQL.exportVariantAnalysisResults",
"when": "config.codeQL.canary" "when": "config.codeQL.canary"
}, },
{
"command": "codeQL.mockVariantAnalysisView",
"when": "config.codeQL.canary && config.codeQL.variantAnalysis.liveResults"
},
{ {
"command": "codeQL.runQueries", "command": "codeQL.runQueries",
"when": "false" "when": "false"

View File

@@ -960,15 +960,6 @@ async function activateWithInstalledDistribution(
}) })
); );
ctx.subscriptions.push(
commandRunner('codeQL.mockVariantAnalysisView', async () => {
// Generate a random variant analysis ID for testing
const variantAnalysisId: number = Math.floor(Math.random() * 1000000);
await variantAnalysisManager.showView(variantAnalysisId);
})
);
ctx.subscriptions.push( ctx.subscriptions.push(
commandRunner('codeQL.loadVariantAnalysisRepoResults', async (variantAnalysisId: number, repositoryFullName: string) => { commandRunner('codeQL.loadVariantAnalysisRepoResults', async (variantAnalysisId: number, repositoryFullName: string) => {
await variantAnalysisManager.loadResults(variantAnalysisId, repositoryFullName); await variantAnalysisManager.loadResults(variantAnalysisId, repositoryFullName);

View File

@@ -71,6 +71,10 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
return this.views.get(variantAnalysisId); return this.views.get(variantAnalysisId);
} }
public async getVariantAnalysis(variantAnalysisId: number): Promise<VariantAnalysis | undefined> {
return this.variantAnalyses.get(variantAnalysisId);
}
public async loadResults(variantAnalysisId: number, repositoryFullName: string): Promise<void> { public async loadResults(variantAnalysisId: number, repositoryFullName: string): Promise<void> {
const variantAnalysis = this.variantAnalyses.get(variantAnalysisId); const variantAnalysis = this.variantAnalyses.get(variantAnalysisId);
if (!variantAnalysis) { if (!variantAnalysis) {

View File

@@ -1,3 +1,5 @@
import { VariantAnalysis } from './shared/variant-analysis';
export interface VariantAnalysisViewInterface { export interface VariantAnalysisViewInterface {
variantAnalysisId: number; variantAnalysisId: number;
openView(): Promise<void>; openView(): Promise<void>;
@@ -6,4 +8,6 @@ export interface VariantAnalysisViewInterface {
export interface VariantAnalysisViewManager<T extends VariantAnalysisViewInterface> { export interface VariantAnalysisViewManager<T extends VariantAnalysisViewInterface> {
registerView(view: T): void; registerView(view: T): void;
unregisterView(view: T): void; unregisterView(view: T): void;
getVariantAnalysis(variantAnalysisId: number): Promise<VariantAnalysis | undefined>;
} }

View File

@@ -5,13 +5,11 @@ import { FromVariantAnalysisMessage, ToVariantAnalysisMessage } from '../pure/in
import { assertNever } from '../pure/helpers-pure'; import { assertNever } from '../pure/helpers-pure';
import { import {
VariantAnalysis, VariantAnalysis,
VariantAnalysisQueryLanguage,
VariantAnalysisRepoStatus,
VariantAnalysisScannedRepositoryResult, VariantAnalysisScannedRepositoryResult,
VariantAnalysisScannedRepositoryState, VariantAnalysisScannedRepositoryState,
VariantAnalysisStatus
} from './shared/variant-analysis'; } from './shared/variant-analysis';
import { VariantAnalysisViewInterface, VariantAnalysisViewManager } from './variant-analysis-view-manager'; import { VariantAnalysisViewInterface, VariantAnalysisViewManager } from './variant-analysis-view-manager';
import { showAndLogWarningMessage } from '../helpers';
export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessage, FromVariantAnalysisMessage> implements VariantAnalysisViewInterface { export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessage, FromVariantAnalysisMessage> implements VariantAnalysisViewInterface {
public static readonly viewType = 'codeQL.variantAnalysis'; public static readonly viewType = 'codeQL.variantAnalysis';
@@ -82,14 +80,7 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
protected async onMessage(msg: FromVariantAnalysisMessage): Promise<void> { protected async onMessage(msg: FromVariantAnalysisMessage): Promise<void> {
switch (msg.t) { switch (msg.t) {
case 'viewLoaded': case 'viewLoaded':
this.onWebViewLoaded(); await this.onWebViewLoaded();
void logger.log('Variant analysis view loaded');
await this.postMessage({
t: 'setVariantAnalysis',
variantAnalysis: this.getVariantAnalysis(),
});
break; break;
case 'stopVariantAnalysis': case 'stopVariantAnalysis':
@@ -103,152 +94,21 @@ export class VariantAnalysisView extends AbstractWebview<ToVariantAnalysisMessag
} }
} }
private getVariantAnalysis(): VariantAnalysis { protected async onWebViewLoaded() {
return { super.onWebViewLoaded();
id: this.variantAnalysisId,
controllerRepoId: 1, void logger.log('Variant analysis view loaded');
actionsWorkflowRunId: 789263,
query: { const variantAnalysis = await this.manager.getVariantAnalysis(this.variantAnalysisId);
name: 'Example query',
filePath: 'example.ql', if (!variantAnalysis) {
language: VariantAnalysisQueryLanguage.Javascript, void showAndLogWarningMessage('Unable to load variant analysis');
}, return;
databases: {}, }
status: VariantAnalysisStatus.InProgress,
scannedRepos: [ await this.postMessage({
{ t: 'setVariantAnalysis',
repository: { variantAnalysis,
id: 1, });
fullName: 'octodemo/hello-world-1',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 2,
fullName: 'octodemo/hello-world-2',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 3,
fullName: 'octodemo/hello-world-3',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 4,
fullName: 'octodemo/hello-world-4',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 5,
fullName: 'octodemo/hello-world-5',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 6,
fullName: 'octodemo/hello-world-6',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 7,
fullName: 'octodemo/hello-world-7',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 8,
fullName: 'octodemo/hello-world-8',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 9,
fullName: 'octodemo/hello-world-9',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
{
repository: {
id: 10,
fullName: 'octodemo/hello-world-10',
private: false,
},
analysisStatus: VariantAnalysisRepoStatus.Pending,
},
],
skippedRepos: {
notFoundRepos: {
repositoryCount: 2,
repositories: [
{
fullName: 'octodemo/hello-globe'
},
{
fullName: 'octodemo/hello-planet'
}
]
},
noCodeqlDbRepos: {
repositoryCount: 4,
repositories: [
{
id: 100,
fullName: 'octodemo/no-db-1'
},
{
id: 101,
fullName: 'octodemo/no-db-2'
},
{
id: 102,
fullName: 'octodemo/no-db-3'
},
{
id: 103,
fullName: 'octodemo/no-db-4'
}
]
},
overLimitRepos: {
repositoryCount: 1,
repositories: [
{
id: 201,
fullName: 'octodemo/over-limit-1'
}
]
},
accessMismatchRepos: {
repositoryCount: 1,
repositories: [
{
id: 205,
fullName: 'octodemo/private'
}
]
}
},
};
} }
} }

View File

@@ -1,11 +1,16 @@
import React from 'react'; import React from 'react';
import { ComponentStory, ComponentMeta } from '@storybook/react'; import { ComponentMeta, ComponentStory } from '@storybook/react';
import { VariantAnalysis as VariantAnalysisComponent } from '../../view/variant-analysis/VariantAnalysis'; import { VariantAnalysis as VariantAnalysisComponent } from '../../view/variant-analysis/VariantAnalysis';
import { import {
VariantAnalysis as VariantAnalysisDomainModel, VariantAnalysis as VariantAnalysisDomainModel,
VariantAnalysisQueryLanguage, VariantAnalysisRepoStatus, VariantAnalysisStatus VariantAnalysisQueryLanguage,
VariantAnalysisRepoStatus,
VariantAnalysisScannedRepositoryDownloadStatus,
VariantAnalysisScannedRepositoryResult,
VariantAnalysisScannedRepositoryState,
VariantAnalysisStatus
} from '../../remote-queries/shared/variant-analysis'; } from '../../remote-queries/shared/variant-analysis';
export default { export default {
@@ -35,7 +40,7 @@ const variantAnalysis: VariantAnalysisDomainModel = {
fullName: 'octodemo/hello-world-1', fullName: 'octodemo/hello-world-1',
private: false, private: false,
}, },
analysisStatus: VariantAnalysisRepoStatus.Pending, analysisStatus: VariantAnalysisRepoStatus.Succeeded,
}, },
{ {
repository: { repository: {
@@ -43,7 +48,7 @@ const variantAnalysis: VariantAnalysisDomainModel = {
fullName: 'octodemo/hello-world-2', fullName: 'octodemo/hello-world-2',
private: false, private: false,
}, },
analysisStatus: VariantAnalysisRepoStatus.Pending, analysisStatus: VariantAnalysisRepoStatus.Succeeded,
}, },
{ {
repository: { repository: {
@@ -51,7 +56,7 @@ const variantAnalysis: VariantAnalysisDomainModel = {
fullName: 'octodemo/hello-world-3', fullName: 'octodemo/hello-world-3',
private: false, private: false,
}, },
analysisStatus: VariantAnalysisRepoStatus.Pending, analysisStatus: VariantAnalysisRepoStatus.Succeeded,
}, },
{ {
repository: { repository: {
@@ -67,7 +72,7 @@ const variantAnalysis: VariantAnalysisDomainModel = {
fullName: 'octodemo/hello-world-5', fullName: 'octodemo/hello-world-5',
private: false, private: false,
}, },
analysisStatus: VariantAnalysisRepoStatus.Pending, analysisStatus: VariantAnalysisRepoStatus.Failed,
}, },
{ {
repository: { repository: {
@@ -75,7 +80,7 @@ const variantAnalysis: VariantAnalysisDomainModel = {
fullName: 'octodemo/hello-world-6', fullName: 'octodemo/hello-world-6',
private: false, private: false,
}, },
analysisStatus: VariantAnalysisRepoStatus.Pending, analysisStatus: VariantAnalysisRepoStatus.InProgress,
}, },
{ {
repository: { repository: {
@@ -164,10 +169,64 @@ const variantAnalysis: VariantAnalysisDomainModel = {
}, },
}; };
const repoStates: VariantAnalysisScannedRepositoryState[] = [
{
repositoryId: 1,
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded
},
{
repositoryId: 2,
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
},
{
repositoryId: 3,
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
},
];
const repoResults: VariantAnalysisScannedRepositoryResult[] = [
{
variantAnalysisId: 1,
repositoryId: 1,
rawResults: {
schema: {
name: '#select',
rows: 1,
columns: [
{
kind: 'i'
}
]
},
resultSet: {
schema: {
name: '#select',
rows: 1,
columns: [
{
kind: 'i'
}
]
},
rows: [
[
60688
]
]
},
fileLinkPrefix: 'https://github.com/octodemo/hello-world-1/blob/59a2a6c7d9dde7a6ecb77c2f7e8197d6925c143b',
sourceLocationPrefix: '/home/runner/work/bulk-builder/bulk-builder',
capped: false
}
}
];
export const Loading = Template.bind({}); export const Loading = Template.bind({});
Loading.args = {}; Loading.args = {};
export const FullExample = Template.bind({}); export const FullExample = Template.bind({});
FullExample.args = { FullExample.args = {
variantAnalysis: variantAnalysis, variantAnalysis,
repoStates,
repoResults,
}; };

View File

@@ -12,43 +12,6 @@ import { VariantAnalysisLoading } from './VariantAnalysisLoading';
import { ToVariantAnalysisMessage } from '../../pure/interface-types'; import { ToVariantAnalysisMessage } from '../../pure/interface-types';
import { vscode } from '../vscode-api'; import { vscode } from '../vscode-api';
const repositoryResults: VariantAnalysisScannedRepositoryResult[] = [
{
variantAnalysisId: 1,
repositoryId: 1,
rawResults: {
schema: {
name: '#select',
rows: 1,
columns: [
{
kind: 'i'
}
]
},
resultSet: {
schema: {
name: '#select',
rows: 1,
columns: [
{
kind: 'i'
}
]
},
rows: [
[
60688
]
]
},
fileLinkPrefix: 'https://github.com/octodemo/hello-world-1/blob/59a2a6c7d9dde7a6ecb77c2f7e8197d6925c143b',
sourceLocationPrefix: '/home/runner/work/bulk-builder/bulk-builder',
capped: false
}
}
];
type Props = { type Props = {
variantAnalysis?: VariantAnalysisDomainModel; variantAnalysis?: VariantAnalysisDomainModel;
repoStates?: VariantAnalysisScannedRepositoryState[]; repoStates?: VariantAnalysisScannedRepositoryState[];
@@ -58,9 +21,9 @@ type Props = {
export function VariantAnalysis({ export function VariantAnalysis({
variantAnalysis: initialVariantAnalysis, variantAnalysis: initialVariantAnalysis,
repoStates: initialRepoStates = [], repoStates: initialRepoStates = [],
repoResults: initialRepoResults = repositoryResults, repoResults: initialRepoResults = [],
}: Props): JSX.Element { }: Props): JSX.Element {
const [variantAnalysis, setVariantAnalysis] = useState<VariantAnalysisDomainModel | undefined>(); const [variantAnalysis, setVariantAnalysis] = useState<VariantAnalysisDomainModel | undefined>(initialVariantAnalysis);
const [repoStates, setRepoStates] = useState<VariantAnalysisScannedRepositoryState[]>(initialRepoStates); const [repoStates, setRepoStates] = useState<VariantAnalysisScannedRepositoryState[]>(initialRepoStates);
const [repoResults, setRepoResults] = useState<VariantAnalysisScannedRepositoryResult[]>(initialRepoResults); const [repoResults, setRepoResults] = useState<VariantAnalysisScannedRepositoryResult[]>(initialRepoResults);