-
Notifications
You must be signed in to change notification settings - Fork 610
Expand file tree
/
Copy pathSelect.tsx
More file actions
73 lines (67 loc) · 1.67 KB
/
Select.tsx
File metadata and controls
73 lines (67 loc) · 1.67 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
73
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,
fullWidth = false,
}) => {
return (
<Autocomplete<SelectOption, false, true, false>
disableClearable
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