Take into account filters for action buttons
This will disable the export and copy buttons when no results would be exported by executing the command. In contrast to the "normal" filtering in the view, this will also take into account the checkboxes since those are also used in the extension host.
This commit is contained in:
@@ -145,6 +145,8 @@ export function VariantAnalysis({
|
||||
<VariantAnalysisHeader
|
||||
variantAnalysis={variantAnalysis}
|
||||
repositoryStates={repoStates}
|
||||
filterSortState={filterSortState}
|
||||
selectedRepositoryIds={selectedRepositoryIds}
|
||||
onOpenQueryFileClick={openQueryFile}
|
||||
onViewQueryTextClick={openQueryText}
|
||||
onStopQueryClick={stopQuery}
|
||||
|
||||
@@ -12,6 +12,7 @@ export type VariantAnalysisActionsProps = {
|
||||
showResultActions?: boolean;
|
||||
onCopyRepositoryListClick: () => void;
|
||||
onExportResultsClick: () => void;
|
||||
copyRepositoryListDisabled?: boolean;
|
||||
exportResultsDisabled?: boolean;
|
||||
};
|
||||
|
||||
@@ -32,13 +33,18 @@ export const VariantAnalysisActions = ({
|
||||
showResultActions,
|
||||
onCopyRepositoryListClick,
|
||||
onExportResultsClick,
|
||||
copyRepositoryListDisabled,
|
||||
exportResultsDisabled,
|
||||
}: VariantAnalysisActionsProps) => {
|
||||
return (
|
||||
<Container>
|
||||
{showResultActions && (
|
||||
<>
|
||||
<Button appearance="secondary" onClick={onCopyRepositoryListClick}>
|
||||
<Button
|
||||
appearance="secondary"
|
||||
onClick={onCopyRepositoryListClick}
|
||||
disabled={copyRepositoryListDisabled}
|
||||
>
|
||||
Copy repository list
|
||||
</Button>
|
||||
<Button
|
||||
|
||||
@@ -14,10 +14,17 @@ import { VariantAnalysisActions } from "./VariantAnalysisActions";
|
||||
import { VariantAnalysisStats } from "./VariantAnalysisStats";
|
||||
import { parseDate } from "../../pure/date";
|
||||
import { basename } from "../common/path";
|
||||
import {
|
||||
defaultFilterSortState,
|
||||
filterAndSortRepositoriesWithResults,
|
||||
RepositoriesFilterSortState,
|
||||
} from "../../pure/variant-analysis-filter-sort";
|
||||
|
||||
export type VariantAnalysisHeaderProps = {
|
||||
variantAnalysis: VariantAnalysis;
|
||||
repositoryStates?: VariantAnalysisScannedRepositoryState[];
|
||||
filterSortState?: RepositoriesFilterSortState;
|
||||
selectedRepositoryIds?: number[];
|
||||
|
||||
onOpenQueryFileClick: () => void;
|
||||
onViewQueryTextClick: () => void;
|
||||
@@ -44,6 +51,8 @@ const Row = styled.div`
|
||||
export const VariantAnalysisHeader = ({
|
||||
variantAnalysis,
|
||||
repositoryStates,
|
||||
filterSortState,
|
||||
selectedRepositoryIds,
|
||||
onOpenQueryFileClick,
|
||||
onViewQueryTextClick,
|
||||
onStopQueryClick,
|
||||
@@ -66,15 +75,36 @@ export const VariantAnalysisHeader = ({
|
||||
const hasSkippedRepos = useMemo(() => {
|
||||
return getSkippedRepoCount(variantAnalysis.skippedRepos) > 0;
|
||||
}, [variantAnalysis.skippedRepos]);
|
||||
const filteredRepositories = useMemo(() => {
|
||||
return filterAndSortRepositoriesWithResults(variantAnalysis.scannedRepos, {
|
||||
...defaultFilterSortState,
|
||||
...filterSortState,
|
||||
repositoryIds: selectedRepositoryIds,
|
||||
});
|
||||
}, [filterSortState, selectedRepositoryIds, variantAnalysis.scannedRepos]);
|
||||
const hasDownloadedRepos = useMemo(() => {
|
||||
return (
|
||||
repositoryStates?.some(
|
||||
(repo) =>
|
||||
repo.downloadStatus ===
|
||||
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
|
||||
) ?? false
|
||||
const repositoryStatesById = new Map<
|
||||
number,
|
||||
VariantAnalysisScannedRepositoryState
|
||||
>();
|
||||
if (repositoryStates) {
|
||||
for (const repositoryState of repositoryStates) {
|
||||
repositoryStatesById.set(repositoryState.repositoryId, repositoryState);
|
||||
}
|
||||
}
|
||||
|
||||
return filteredRepositories?.some((repo) => {
|
||||
return (
|
||||
repositoryStatesById.get(repo.repository.id)?.downloadStatus ===
|
||||
VariantAnalysisScannedRepositoryDownloadStatus.Succeeded
|
||||
);
|
||||
});
|
||||
}, [repositoryStates, filteredRepositories]);
|
||||
const hasReposWithResults = useMemo(() => {
|
||||
return filteredRepositories?.some(
|
||||
(repo) => repo.resultCount && repo.resultCount > 0,
|
||||
);
|
||||
}, [repositoryStates]);
|
||||
}, [filteredRepositories]);
|
||||
|
||||
return (
|
||||
<Container>
|
||||
@@ -93,6 +123,7 @@ export const VariantAnalysisHeader = ({
|
||||
onExportResultsClick={onExportResultsClick}
|
||||
stopQueryDisabled={!variantAnalysis.actionsWorkflowRunId}
|
||||
exportResultsDisabled={!hasDownloadedRepos}
|
||||
copyRepositoryListDisabled={!hasReposWithResults}
|
||||
/>
|
||||
</Row>
|
||||
<VariantAnalysisStats
|
||||
|
||||
Reference in New Issue
Block a user