Skip to content

Commit 7fb9975

Browse files
Add UI for repository filter component
1 parent 2701cd4 commit 7fb9975

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import * as React from "react";
2+
import { useCallback } from "react";
3+
import styled from "styled-components";
4+
import { VSCodeDropdown, VSCodeOption } from "@vscode/webview-ui-toolkit/react";
5+
import { Codicon } from "../common";
6+
import { FilterKey } from "../../pure/variant-analysis-filter-sort";
7+
8+
const Dropdown = styled(VSCodeDropdown)`
9+
width: 100%;
10+
`;
11+
12+
type Props = {
13+
value: FilterKey;
14+
onChange: (value: FilterKey) => void;
15+
16+
className?: string;
17+
};
18+
19+
export const RepositoriesFilter = ({ value, onChange, className }: Props) => {
20+
const handleInput = useCallback(
21+
(e: InputEvent) => {
22+
const target = e.target as HTMLSelectElement;
23+
24+
onChange(target.value as FilterKey);
25+
},
26+
[onChange],
27+
);
28+
29+
return (
30+
<Dropdown value={value} onInput={handleInput} className={className}>
31+
<Codicon name="list-filter" label="Filter..." slot="indicator" />
32+
<VSCodeOption value={FilterKey.All}>All</VSCodeOption>
33+
<VSCodeOption value={FilterKey.WithResults}>With results</VSCodeOption>
34+
</Dropdown>
35+
);
36+
};

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ import * as React from "react";
22
import { Dispatch, SetStateAction, useCallback } from "react";
33
import styled from "styled-components";
44
import {
5+
FilterKey,
56
RepositoriesFilterSortState,
67
SortKey,
78
} from "../../pure/variant-analysis-filter-sort";
89
import { RepositoriesSearch } from "./RepositoriesSearch";
910
import { RepositoriesSort } from "./RepositoriesSort";
11+
import { RepositoriesFilter } from "./RepositoriesFilter";
1012

1113
type Props = {
1214
value: RepositoriesFilterSortState;
@@ -25,6 +27,10 @@ const RepositoriesSearchColumn = styled(RepositoriesSearch)`
2527
flex: 3;
2628
`;
2729

30+
const RepositoriesFilterColumn = styled(RepositoriesFilter)`
31+
flex: 1;
32+
`;
33+
2834
const RepositoriesSortColumn = styled(RepositoriesSort)`
2935
flex: 1;
3036
`;
@@ -40,6 +46,16 @@ export const RepositoriesSearchSortRow = ({ value, onChange }: Props) => {
4046
[onChange],
4147
);
4248

49+
const handleFilterKeyChange = useCallback(
50+
(filterKey: FilterKey) => {
51+
onChange((oldValue) => ({
52+
...oldValue,
53+
filterKey,
54+
}));
55+
},
56+
[onChange],
57+
);
58+
4359
const handleSortKeyChange = useCallback(
4460
(sortKey: SortKey) => {
4561
onChange((oldValue) => ({
@@ -56,6 +72,10 @@ export const RepositoriesSearchSortRow = ({ value, onChange }: Props) => {
5672
value={value.searchValue}
5773
onChange={handleSearchValueChange}
5874
/>
75+
<RepositoriesFilterColumn
76+
value={value.filterKey}
77+
onChange={handleFilterKeyChange}
78+
/>
5979
<RepositoriesSortColumn
6080
value={value.sortKey}
6181
onChange={handleSortKeyChange}

0 commit comments

Comments
 (0)