The text focus navigation functionality is implemented in the onKeyDown
of MenuList
(I implemented it about 6 months ago). Stopping propagation of that event on the MenuItem
(it would also work to stop propagation on the TextField
) prevents the event from reaching MenuList
.
import * as React from "react";
import { render } from "react-dom";
import TextField from "@material-ui/core/TextField";
import Select from "@material-ui/core/Select";
import MenuItem from "@material-ui/core/MenuItem";
import "./styles.css";
function App() {
const [selectedOption, setSelectedOption] = React.useState("");
const [filterExpression, setFilterExpression] = React.useState("");
const onChangeSelection = (
event: React.ChangeEvent<{ name?: string | undefined; value: unknown }>,
child: React.ReactNode
) => {
const value = event.target.value.toString();
setSelectedOption(value);
};
const onChangeExpression = (
event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
) => {
const value = event.target.value.toString();
console.log(`value:`, value);
setFilterExpression(value);
};
const stopImmediatePropagation = (e: any) => {
e.stopPropagation();
e.preventDefault();
};
return (
<div className="App">
<Select onChange={onChangeSelection} value={selectedOption}>
<MenuItem
dense
divider
value={""}
onClickCapture={stopImmediatePropagation}
onKeyDown={e => e.stopPropagation()}
>
<TextField value={filterExpression} onChange={onChangeExpression} />
</MenuItem>
<MenuItem dense key={"One"} value={"One"}>
One
</MenuItem>
<MenuItem dense key={"Two"} value={"Two"}>
Two
</MenuItem>
<MenuItem dense key={"Three"} value={"Three"}>
Three
</MenuItem>
</Select>
</div>
);
}
const rootElement = document.getElementById("root");
render(<App />, rootElement);