diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index 696c9924b..f481fe913 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -5,6 +5,7 @@ - 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) - Fix bug to ensure error messages have complete stack trace in message logs. [#2425](https://github.com/github/vscode-codeql/pull/2425) - Fix bug where the `CodeQL: Compare Query` command did not work for comparing quick-eval queries. [#2422](https://github.com/github/vscode-codeql/pull/2422) +- 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 diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisActions.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisActions.tsx index 4df2a9157..26ce0b3e7 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisActions.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisActions.tsx @@ -14,6 +14,9 @@ export type VariantAnalysisActionsProps = { onExportResultsClick: () => void; copyRepositoryListDisabled?: boolean; exportResultsDisabled?: boolean; + + hasSelectedRepositories?: boolean; + hasFilteredRepositories?: boolean; }; const Container = styled.div` @@ -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, @@ -35,6 +60,8 @@ export const VariantAnalysisActions = ({ onExportResultsClick, copyRepositoryListDisabled, exportResultsDisabled, + hasSelectedRepositories, + hasFilteredRepositories, }: VariantAnalysisActionsProps) => { return ( @@ -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", + })} )} diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx index a579a4268..1c146f19f 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx @@ -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 + } /> { 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(); + }); });