Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions extensions/ql-vscode/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## [UNRELEASED]

- Add settings `codeQL.variantAnalysis.defaultResultsFilter` and `codeQL.variantAnalysis.defaultResultsSort` for configuring how variant analysis results are filtered and sorted in the results view. The default is to show all repositories, and to sort by the number of results. [#2392](https://github.com/github/vscode-codeql/pull/2392)
- Update text of copy and export buttons in variant analysis results view to clarify that they only copy/export the selected/filtered results. [#2427](https://github.com/github/vscode-codeql/pull/2427)

## 1.8.4 - 3 May 2023

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ export type VariantAnalysisActionsProps = {
onExportResultsClick: () => void;
copyRepositoryListDisabled?: boolean;
exportResultsDisabled?: boolean;

hasSelectedRepositories?: boolean;
hasFilteredRepositories?: boolean;
};

const Container = styled.div`
Expand All @@ -26,6 +29,28 @@ const Button = styled(VSCodeButton)`
white-space: nowrap;
`;

const chooseText = ({
hasSelectedRepositories,
hasFilteredRepositories,
normalText,
selectedText,
filteredText,
}: {
hasSelectedRepositories?: boolean;
hasFilteredRepositories?: boolean;
normalText: string;
selectedText: string;
filteredText: string;
}) => {
if (hasSelectedRepositories) {
return selectedText;
}
if (hasFilteredRepositories) {
return filteredText;
}
return normalText;
};

export const VariantAnalysisActions = ({
variantAnalysisStatus,
onStopQueryClick,
Expand All @@ -35,6 +60,8 @@ export const VariantAnalysisActions = ({
onExportResultsClick,
copyRepositoryListDisabled,
exportResultsDisabled,
hasSelectedRepositories,
hasFilteredRepositories,
}: VariantAnalysisActionsProps) => {
return (
<Container>
Expand All @@ -45,14 +72,26 @@ export const VariantAnalysisActions = ({
onClick={onCopyRepositoryListClick}
disabled={copyRepositoryListDisabled}
>
Copy repository list
{chooseText({
hasSelectedRepositories,
hasFilteredRepositories,
normalText: "Copy repository list",
selectedText: "Copy selected repositories as a list",
filteredText: "Copy filtered repositories as a list",
})}
</Button>
<Button
appearance="primary"
onClick={onExportResultsClick}
disabled={exportResultsDisabled}
>
Export results
{chooseText({
hasSelectedRepositories,
hasFilteredRepositories,
normalText: "Export results",
selectedText: "Export selected results",
filteredText: "Export filtered results",
})}
</Button>
</>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,13 @@ export const VariantAnalysisHeader = ({
stopQueryDisabled={!variantAnalysis.actionsWorkflowRunId}
exportResultsDisabled={!hasDownloadedRepos}
copyRepositoryListDisabled={!hasReposWithResults}
hasFilteredRepositories={
variantAnalysis.scannedRepos?.length !==
filteredRepositories?.length
}
hasSelectedRepositories={
selectedRepositoryIds && selectedRepositoryIds.length > 0
}
/>
</Row>
<VariantAnalysisStats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,32 @@ describe(VariantAnalysisActions.name, () => {

expect(container.querySelectorAll("vscode-button").length).toEqual(0);
});

it("changes the text on the buttons when repositories are selected", async () => {
render({
variantAnalysisStatus: VariantAnalysisStatus.Succeeded,
showResultActions: true,
hasSelectedRepositories: true,
hasFilteredRepositories: true,
});

expect(screen.getByText("Export selected results")).toBeInTheDocument();
expect(
screen.getByText("Copy selected repositories as a list"),
).toBeInTheDocument();
});

it("changes the text on the buttons when repositories are filtered", async () => {
render({
variantAnalysisStatus: VariantAnalysisStatus.Succeeded,
showResultActions: true,
hasSelectedRepositories: false,
hasFilteredRepositories: true,
});

expect(screen.getByText("Export filtered results")).toBeInTheDocument();
expect(
screen.getByText("Copy filtered repositories as a list"),
).toBeInTheDocument();
});
});