Skip to content

Commit 4a87a6f

Browse files
authored
Merge pull request #2745 from github/shati-patel/result-format-view
Display "result format" dropdown in results view for (path-)problem queries
2 parents b6deb8e + f8d542d commit 4a87a6f

3 files changed

Lines changed: 79 additions & 19 deletions

File tree

extensions/ql-vscode/src/stories/variant-analysis/RepositoriesSearchSortRow.stories.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Meta } from "@storybook/react";
55

66
import { RepositoriesSearchSortRow as RepositoriesSearchSortRowComponent } from "../../view/variant-analysis/RepositoriesSearchSortRow";
77
import { defaultFilterSortState } from "../../variant-analysis/shared/variant-analysis-filter-sort";
8+
import { ResultFormat } from "../../variant-analysis/shared/variant-analysis-result-format";
89

910
export default {
1011
title: "Variant Analysis/Repositories Search and Sort Row",
@@ -19,9 +20,23 @@ export default {
1920
} as Meta<typeof RepositoriesSearchSortRowComponent>;
2021

2122
export const RepositoriesSearchSortRow = () => {
22-
const [value, setValue] = useState(defaultFilterSortState);
23+
const [filterSortValue, setFilterSortValue] = useState(
24+
defaultFilterSortState,
25+
);
26+
27+
const [resultFormatValue, setResultFormatValue] = useState(
28+
ResultFormat.Alerts,
29+
);
30+
31+
const variantAnalysisQueryKind = "problem";
2332

2433
return (
25-
<RepositoriesSearchSortRowComponent value={value} onChange={setValue} />
34+
<RepositoriesSearchSortRowComponent
35+
filterSortValue={filterSortValue}
36+
resultFormatValue={resultFormatValue}
37+
onFilterSortChange={setFilterSortValue}
38+
onResultFormatChange={setResultFormatValue}
39+
variantAnalysisQueryKind={variantAnalysisQueryKind}
40+
/>
2641
);
2742
};

extensions/ql-vscode/src/view/variant-analysis/RepositoriesSearchSortRow.tsx

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@ import {
99
import { RepositoriesSearch } from "./RepositoriesSearch";
1010
import { RepositoriesSort } from "./RepositoriesSort";
1111
import { RepositoriesFilter } from "./RepositoriesFilter";
12+
import { RepositoriesResultFormat } from "./RepositoriesResultFormat";
13+
import { ResultFormat } from "../../variant-analysis/shared/variant-analysis-result-format";
1214

1315
type Props = {
14-
value: RepositoriesFilterSortState;
15-
onChange: Dispatch<SetStateAction<RepositoriesFilterSortState>>;
16+
filterSortValue: RepositoriesFilterSortState;
17+
resultFormatValue: ResultFormat;
18+
onFilterSortChange: Dispatch<SetStateAction<RepositoriesFilterSortState>>;
19+
onResultFormatChange: Dispatch<SetStateAction<ResultFormat>>;
20+
variantAnalysisQueryKind: string | undefined;
1621
};
1722

1823
const Container = styled.div`
@@ -35,51 +40,83 @@ const RepositoriesSortColumn = styled(RepositoriesSort)`
3540
flex: 1;
3641
`;
3742

38-
export const RepositoriesSearchSortRow = ({ value, onChange }: Props) => {
43+
const RepositoriesResultFormatColumn = styled(RepositoriesResultFormat)`
44+
flex: 1;
45+
`;
46+
47+
function showResultFormatColumn(
48+
variantAnalysisQueryKind: string | undefined,
49+
): boolean {
50+
return (
51+
variantAnalysisQueryKind === "problem" ||
52+
variantAnalysisQueryKind === "path-problem"
53+
);
54+
}
55+
56+
export const RepositoriesSearchSortRow = ({
57+
filterSortValue,
58+
resultFormatValue,
59+
onFilterSortChange,
60+
onResultFormatChange,
61+
variantAnalysisQueryKind,
62+
}: Props) => {
3963
const handleSearchValueChange = useCallback(
4064
(searchValue: string) => {
41-
onChange((oldValue) => ({
65+
onFilterSortChange((oldValue) => ({
4266
...oldValue,
4367
searchValue,
4468
}));
4569
},
46-
[onChange],
70+
[onFilterSortChange],
4771
);
4872

4973
const handleFilterKeyChange = useCallback(
5074
(filterKey: FilterKey) => {
51-
onChange((oldValue) => ({
75+
onFilterSortChange((oldValue) => ({
5276
...oldValue,
5377
filterKey,
5478
}));
5579
},
56-
[onChange],
80+
[onFilterSortChange],
5781
);
5882

5983
const handleSortKeyChange = useCallback(
6084
(sortKey: SortKey) => {
61-
onChange((oldValue) => ({
85+
onFilterSortChange((oldValue) => ({
6286
...oldValue,
6387
sortKey,
6488
}));
6589
},
66-
[onChange],
90+
[onFilterSortChange],
91+
);
92+
93+
const handleResultFormatChange = useCallback(
94+
(resultFormat: ResultFormat) => {
95+
onResultFormatChange(resultFormat);
96+
},
97+
[onResultFormatChange],
6798
);
6899

69100
return (
70101
<Container>
71102
<RepositoriesSearchColumn
72-
value={value.searchValue}
103+
value={filterSortValue.searchValue}
73104
onChange={handleSearchValueChange}
74105
/>
75106
<RepositoriesFilterColumn
76-
value={value.filterKey}
107+
value={filterSortValue.filterKey}
77108
onChange={handleFilterKeyChange}
78109
/>
79110
<RepositoriesSortColumn
80-
value={value.sortKey}
111+
value={filterSortValue.sortKey}
81112
onChange={handleSortKeyChange}
82113
/>
114+
{showResultFormatColumn(variantAnalysisQueryKind) && (
115+
<RepositoriesResultFormatColumn
116+
value={resultFormatValue}
117+
onChange={handleResultFormatChange}
118+
/>
119+
)}
83120
</Container>
84121
);
85122
};

extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from "react";
2-
import { Dispatch, SetStateAction } from "react";
2+
import { Dispatch, SetStateAction, useState } from "react";
33
import { styled } from "styled-components";
44
import {
55
VSCodeBadge,
@@ -20,6 +20,7 @@ import { VariantAnalysisSkippedRepositoriesTab } from "./VariantAnalysisSkippedR
2020
import { RepositoriesFilterSortState } from "../../variant-analysis/shared/variant-analysis-filter-sort";
2121
import { RepositoriesSearchSortRow } from "./RepositoriesSearchSortRow";
2222
import { FailureReasonAlert } from "./FailureReasonAlert";
23+
import { ResultFormat } from "../../variant-analysis/shared/variant-analysis-result-format";
2324

2425
export type VariantAnalysisOutcomePanelProps = {
2526
variantAnalysis: VariantAnalysis;
@@ -70,6 +71,7 @@ export const VariantAnalysisOutcomePanels = ({
7071
const accessMismatchRepositoryCount =
7172
variantAnalysis.skippedRepos?.accessMismatchRepos?.repositoryCount ?? 0;
7273

74+
const [resultFormat, setResultFormat] = useState(ResultFormat.Alerts);
7375
const warnings = (
7476
<WarningsContainer>
7577
{variantAnalysis.status === VariantAnalysisStatus.Canceled && (
@@ -123,8 +125,11 @@ export const VariantAnalysisOutcomePanels = ({
123125
<>
124126
{warnings}
125127
<RepositoriesSearchSortRow
126-
value={filterSortState}
127-
onChange={setFilterSortState}
128+
filterSortValue={filterSortState}
129+
resultFormatValue={resultFormat}
130+
onFilterSortChange={setFilterSortState}
131+
onResultFormatChange={setResultFormat}
132+
variantAnalysisQueryKind={variantAnalysis.query.kind}
128133
/>
129134
<VariantAnalysisAnalyzedRepos
130135
variantAnalysis={variantAnalysis}
@@ -142,8 +147,11 @@ export const VariantAnalysisOutcomePanels = ({
142147
<>
143148
{warnings}
144149
<RepositoriesSearchSortRow
145-
value={filterSortState}
146-
onChange={setFilterSortState}
150+
filterSortValue={filterSortState}
151+
resultFormatValue={resultFormat}
152+
onFilterSortChange={setFilterSortState}
153+
onResultFormatChange={setResultFormat}
154+
variantAnalysisQueryKind={variantAnalysis.query.kind}
147155
/>
148156
<VSCodePanels>
149157
{scannedReposCount > 0 && (

0 commit comments

Comments
 (0)