-
Notifications
You must be signed in to change notification settings - Fork 609
Expand file tree
/
Copy pathSelectMultiple.tsx
More file actions
72 lines (66 loc) · 1.65 KB
/
SelectMultiple.tsx
File metadata and controls
72 lines (66 loc) · 1.65 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import * as React from "react"
import { TextField } from "@mui/material"
import { Dispatch } from "../types"
import Autocomplete from "@mui/material/Autocomplete"
export interface SelectOption {
value: string
displayName: string
}
interface SelectProps {
options: SelectOption[]
value: SelectOption[] | undefined
setValue?: Dispatch<SelectOption[] | undefined>
onChange?: (nu: SelectOption[] | undefined) => void
label: JSX.Element | string
className?: string
required?: boolean
helperText?: string
fullWidth?: boolean
}
const Select: React.FC<SelectProps> = ({
value,
setValue,
options,
label,
className,
required,
onChange,
helperText,
}) => {
return (
<Autocomplete<SelectOption, true, true, false>
multiple
className={className}
autoHighlight
autoSelect
options={options}
getOptionLabel={option => option.displayName}
isOptionEqualToValue={(a, b) => a.value === b.value}
value={(value || null) as any}
onChange={(_event, value) => {
if (onChange !== undefined) {
onChange(value === null ? undefined : (value as SelectOption[]))
}
if (setValue !== undefined) {
setValue(value === null ? undefined : (value as SelectOption[]))
}
}}
renderOption={(props, option) => (
<li {...props}>
{option.displayName}
</li>
)}
renderInput={params => (
<TextField
{...params}
required={required}
label={label}
helperText={helperText}
size="small"
variant="outlined"
/>
)}
/>
)
}
export default Select