Right now there is a default option but if I click a clear icon, this unchecks all of the options.
I want to have one option always selected. How can I achieve this with Autocomplete material-ui?
import * as React from "react";
import Checkbox from "@mui/material/Checkbox";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";
import CheckBoxOutlineBlankIcon from "@mui/icons-material/CheckBoxOutlineBlank";
import CheckBoxIcon from "@mui/icons-material/CheckBox";
import DeleteIcon from "@mui/icons-material/Delete";
const icon = <CheckBoxOutlineBlankIcon fontSize="small" />;
const checkedIcon = <CheckBoxIcon fontSize="small" />;
const clearIcon = <DeleteIcon fontSize="small" />;
export default function CheckboxesTags() {
return (
<Autocomplete
multiple
open={true}
limitTags={1}
id="checkboxes-tags-demo"
clearIcon={clearIcon}
options={top100Films}
disableCloseOnSelect
defaultValue={[top100Films[0]]}
getOptionLabel={(option) => option.title}
renderOption={(props, option, { selected }) => (
<li {...props}>
<Checkbox
icon={icon}
checkedIcon={checkedIcon}
style={{ marginRight: 8 }}
checked={selected}
/>
{option.title}
</li>
)}
style={{ width: 500 }}
renderInput={(params) => (
<TextField {...params} label="Checkboxes" placeholder="Search Labels" />
)}
/>
);
}
const top100Films = [
{ title: "The Shawshank Redemption", year: 1994 },
{ title: "The Godfather", year: 1972 },
{ title: "The Godfather: Part II", year: 1974 },
{ title: "The Dark Knight", year: 2008 },
{ title: "12 Angry Men", year: 1957 },
{ title: "Schindler's List", year: 1993 },
{ title: "Pulp Fiction", year: 1994 },
];
Attempt
I switched value
to defaultValue
but this didn't work.
CodePudding user response:
It works now
import * as React from 'react';
import Checkbox from '@mui/material/Checkbox';
import TextField from '@mui/material/TextField';
import Autocomplete from '@mui/material/Autocomplete';
import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
import CheckBoxIcon from '@mui/icons-material/CheckBox';
import DeleteIcon from '@mui/icons-material/Delete';
const icon = <CheckBoxOutlineBlankIcon fontSize="small" />;
const checkedIcon = <CheckBoxIcon fontSize="small" />;
const clearIcon = <DeleteIcon fontSize="small" />;
export default function CheckboxesTags() {
const [defaultValue, setDefaultValue] = React.useState([top100Films[0]]);
const handleChange = (e, newValue, reason) => {
if (reason === 'clear') return setDefaultValue([top100Films[0]]);
setDefaultValue(newValue);
};
return (
<Autocomplete
multiple
open={true}
limitTags={1}
id="checkboxes-tags-demo"
clearIcon={clearIcon}
options={top100Films}
disableCloseOnSelect
value={defaultValue}
onChange={handleChange}
getOptionLabel={(option) => option.title}
renderOption={(props, option, { selected }) => (
<li {...props}>
<Checkbox
icon={icon}
checkedIcon={checkedIcon}
style={{ marginRight: 8 }}
checked={selected}
/>
{option.title}
</li>
)}
style={{ width: 500 }}
renderInput={(params) => (
<TextField {...params} label="Checkboxes" placeholder="Search Labels" />
)}
/>
);
}
const top100Films = [
{ title: 'The Shawshank Redemption', year: 1994 },
{ title: 'The Godfather', year: 1972 },
{ title: 'The Godfather: Part II', year: 1974 },
{ title: 'The Dark Knight', year: 2008 },
{ title: '12 Angry Men', year: 1957 },
{ title: "Schindler's List", year: 1993 },
{ title: 'Pulp Fiction', year: 1994 },
];