/
TrackedRepositoryFilter.tsx
40 lines (36 loc) 路 1.18 KB
/
TrackedRepositoryFilter.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { useEffect, useState } from "react";
import MultiSelect, { OptionKeys } from "components/atoms/Select/multi-select";
type TrackedRepositoryFilterProps = {
options: OptionKeys[];
handleSelect: (selected: OptionKeys[]) => void;
};
export default function TrackedRepositoryFilter({ options, handleSelect }: TrackedRepositoryFilterProps) {
const [isMultiSelectOpen, setIsMultiSelectOpen] = useState(false);
const [selected, setSelected] = useState<OptionKeys[]>([]);
useEffect(() => {
handleSelect(selected);
}, [selected]);
return (
<MultiSelect
placeholder="Filter"
inputPlaceholder="Search repositories"
className="px-3 text-sm"
options={options}
open={isMultiSelectOpen}
setOpen={setIsMultiSelectOpen}
selected={selected}
setSelected={setSelected}
handleSelect={(option) => {
setSelected((list) => {
// toggle: if already in, filter, else add into list
if (list.find((o) => o.value === option.value)) {
list = list.filter((o) => o.value !== option.value);
} else {
list = [...list, option];
}
return list;
});
}}
/>
);
}