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.
This commit is contained in:
Koen Vlaswinkel
2022-12-05 14:05:37 +01:00
parent 795a0bc46d
commit 96850e442f
3 changed files with 75 additions and 16 deletions

View File

@@ -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,
};

View File

@@ -110,6 +110,14 @@ export const VariantAnalysisOutcomePanels = ({
</WarningsContainer>
);
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}
/>
<VSCodePanels>
<Tab>
Analyzed
<VSCodeBadge appearance="secondary">
{formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)}
</VSCodeBadge>
</Tab>
{scannedReposCount > 0 && (
<Tab>
Analyzed
<VSCodeBadge appearance="secondary">
{formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)}
</VSCodeBadge>
</Tab>
)}
{notFoundRepos?.repositoryCount && (
<Tab>
No access
@@ -160,16 +170,18 @@ export const VariantAnalysisOutcomePanels = ({
</VSCodeBadge>
</Tab>
)}
<VSCodePanelView>
<VariantAnalysisAnalyzedRepos
variantAnalysis={variantAnalysis}
repositoryStates={repositoryStates}
repositoryResults={repositoryResults}
filterSortState={filterSortState}
selectedRepositoryIds={selectedRepositoryIds}
setSelectedRepositoryIds={setSelectedRepositoryIds}
/>
</VSCodePanelView>
{scannedReposCount > 0 && (
<VSCodePanelView>
<VariantAnalysisAnalyzedRepos
variantAnalysis={variantAnalysis}
repositoryStates={repositoryStates}
repositoryResults={repositoryResults}
filterSortState={filterSortState}
selectedRepositoryIds={selectedRepositoryIds}
setSelectedRepositoryIds={setSelectedRepositoryIds}
/>
</VSCodePanelView>
)}
{notFoundRepos?.repositoryCount && (
<VSCodePanelView>
<VariantAnalysisSkippedRepositoriesTab

View File

@@ -2,6 +2,7 @@ import * as React from "react";
import { render as reactRender, screen } from "@testing-library/react";
import {
VariantAnalysis,
VariantAnalysisFailureReason,
VariantAnalysisRepoStatus,
VariantAnalysisStatus,
} from "../../../remote-queries/shared/variant-analysis";
@@ -144,6 +145,36 @@ describe(VariantAnalysisOutcomePanels.name, () => {
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,