import { Autocomplete, Checkbox, CircularProgress, TextField, } from "@mui/material"; import CheckBoxOutlineBlankIcon from "@mui/icons-material/CheckBoxOutlineBlank"; import CheckBoxIcon from "@mui/icons-material/CheckBox"; export interface MultiSelectOption { readonly value: TValue; readonly label: string; } interface MultiSelectProps { readonly options: MultiSelectOption[]; readonly value: TValue[]; readonly onChange: (values: TValue[]) => void; readonly label?: string; readonly placeholder?: string; readonly loading?: boolean; readonly disabled?: boolean; readonly error?: boolean; readonly helperText?: string; readonly size?: "small" | "medium"; readonly fullWidth?: boolean; } export function MultiSelect({ options, value, onChange, label, placeholder, loading = false, disabled = false, error = false, helperText, size = "small", fullWidth = true, }: MultiSelectProps) { const selectedOptions = options.filter((opt) => value.includes(opt.value)); return ( option.label} isOptionEqualToValue={(option, selected) => option.value === selected.value} onChange={(_, newSelected) => { onChange(newSelected.map((opt) => opt.value)); }} renderOption={(props, option, { selected }) => { const { key, ...rest } = props as React.HTMLAttributes & { key: React.Key }; return (
  • } checkedIcon={} style={{ marginRight: 8 }} checked={selected} /> {option.label}
  • ); }} renderInput={(params) => ( {loading && } {params.InputProps.endAdornment} ), }, }} /> )} /> ); }