From 96850e442f1082cbfea9c164c614b0c07a583d77 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Mon, 5 Dec 2022 14:05:37 +0100 Subject: [PATCH] Hide analyzed panel when it's empty This will hide the "Analyzed" panel when there are no scanned repos and it's completely empty. When all three panels are empty, this will also hide the search bar and filters, and will skip rendering anything for the panels. --- .../VariantAnalysis.stories.tsx | 16 +++++++ .../VariantAnalysisOutcomePanels.tsx | 44 ++++++++++++------- .../VariantAnalysisOutcomePanels.spec.tsx | 31 +++++++++++++ 3 files changed, 75 insertions(+), 16 deletions(-) diff --git a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx index a28b122d789..530c9f3dff8 100644 --- a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx +++ b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx @@ -385,3 +385,19 @@ Failed.args = { repoStates, repoResults, }; + +export const FailedInternal = Template.bind({}); +FailedInternal.args = { + variantAnalysis: { + ...variantAnalysis, + status: VariantAnalysisStatus.Failed, + failureReason: VariantAnalysisFailureReason.InternalError, + completedAt: new Date( + new Date(variantAnalysis.createdAt).getTime() + 100_000, + ).toISOString(), + scannedRepos: [], + skippedRepos: {}, + }, + repoStates, + repoResults, +}; diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx index f44a339bcd2..8e36aee3276 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx @@ -110,6 +110,14 @@ export const VariantAnalysisOutcomePanels = ({ ); + const noPanels = + scannedReposCount === 0 && + !noCodeqlDbRepos?.repositoryCount && + !notFoundRepos?.repositoryCount; + if (noPanels) { + return warnings; + } + if (!noCodeqlDbRepos?.repositoryCount && !notFoundRepos?.repositoryCount) { return ( <> @@ -138,12 +146,14 @@ export const VariantAnalysisOutcomePanels = ({ onChange={setFilterSortState} /> - - Analyzed - - {formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)} - - + {scannedReposCount > 0 && ( + + Analyzed + + {formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)} + + + )} {notFoundRepos?.repositoryCount && ( No access @@ -160,16 +170,18 @@ export const VariantAnalysisOutcomePanels = ({ )} - - - + {scannedReposCount > 0 && ( + + + + )} {notFoundRepos?.repositoryCount && ( { expect(screen.getByText("No database")).toBeInTheDocument(); }); + it("does not render analyzed panel when there are no scanned repos", () => { + render({ + scannedRepos: [], + skippedRepos: { + notFoundRepos: defaultVariantAnalysis.skippedRepos.notFoundRepos, + noCodeqlDbRepos: defaultVariantAnalysis.skippedRepos.noCodeqlDbRepos, + }, + }); + + expect(screen.queryByRole("Analyzed")).not.toBeInTheDocument(); + expect(screen.getByText("No access")).toBeInTheDocument(); + expect(screen.getByText("No database")).toBeInTheDocument(); + }); + + it("does not render any tabs when there are no repos", () => { + render({ + status: VariantAnalysisStatus.Failed, + failureReason: VariantAnalysisFailureReason.InternalError, + scannedRepos: [], + skippedRepos: {}, + }); + + expect(screen.queryByRole("Analyzed")).not.toBeInTheDocument(); + expect(screen.queryByRole("No access")).not.toBeInTheDocument(); + expect(screen.queryByRole("No database")).not.toBeInTheDocument(); + expect( + screen.getByText("Error: Something unexpected happened"), + ).toBeInTheDocument(); + }); + it("renders warning with canceled variant analysis", () => { render({ status: VariantAnalysisStatus.Canceled,