Я пытаюсь использовать Раскрывающийся пользовательский интерфейс на моем веб-сайте, используя библиотеку Reaction-select . Проблема в том, что когда я использую опцию длиннее, чем ширина раскрывающегося меню, это ставит под угрозу пользовательский интерфейс.
Может кто-нибудь, пожалуйста, помогите мне здесь.
Вот мой код реагирования :
import React, { useState } from "react";
import "./styles.css";
import SelectDropdown from "./EditableDropdown";
export default function App() {
const [description, setDesc] = useState("");
const options = [
{
label: "a11 b33 c88 o99 t66 j44 z99",
value: "a11 b33 c88 o99 t66 j44 z99"
},
{
label: "Switches",
value: "Switches"
}
];
return (
<div style={{ width: "25%" }}>
<SelectDropdown
label="Description"
value={description}
onChange={setDesc}
options={options}
/>
</div>
);
}
Вот код для редактируемого компонента
import React from "react";
import {
MuiThemeProvider,
createMuiTheme,
MenuItem,
Paper,
withStyles,
TextField
} from "@material-ui/core";
import Select from "react-select";
const styles = {
input: {
padding: 0,
marginSides: "8px",
minHeight: "inherit",
lineHeight: "22px",
fontWeight: 200
},
valueContainer: {
alignItems: "center",
fontFamily: "Helvetica Neue,Arial,Helvetica,sans-serif",
fontWeight: 400,
fontSize: "14px !important"
}
};
function inputComponent({ inputRef, ...props }) {
return <div ref={inputRef} {...props} />;
}
function Control(props) {
return (
<TextField
fullWidth
InputProps={{
inputComponent,
inputProps: {
className: props.selectProps.classes.input,
children: props.children,
...props.innerProps
}
}}
{...props.selectProps.textFieldProps}
/>
);
}
function Option(props) {
return (
<MenuItem
buttonRef={props.innerRef}
selected={props.isFocused}
component="div"
style={{
fontWeight: props.isSelected ? 500 : 400,
backgroundColor: props.isSelected
? "rgba(59,234,31,0.2)"
: props.isFocused
? "#F0F0F0"
: null,
fontFamily: "Helvetica Neue,Arial,Helvetica,sans-serif",
height: "34px",
color: "#343434"
}}
{...props.innerProps}
>
{props.children}
</MenuItem>
);
}
function SingleValue(props) {
return (
<div
className={props.selectProps.classes.singleValue}
{...props.innerProps}
>
{typeof props.children !== "object" ? props.children : ""}
</div>
);
}
function ValueContainer(props) {
let valueContainerClass = props.selectProps.classes.valueContainer;
return (
<div className={valueContainerClass} ref={props.inputRef}>
{props.children}
</div>
);
}
function Menu(props) {
return (
<Paper square {...props.innerProps}>
{props.children}
</Paper>
);
}
const dropDownStyle = {
overrides: {
MuiOutlinedInput: {
root: {
padding: "12px 12px 12px 16px !important"
}
},
MuiInputBase: {
root: {
cursor: "pointer"
}
}
}
};
class SelectDropdown extends React.Component {
state = {
focused: false
};
handleTextFieldChange = ({ target: { value } }) => {
this.props.onChange({
label: value,
value
});
};
components = {
Control,
Menu,
Option,
SingleValue,
ValueContainer,
IndicatorSeparator: () => null,
DropdownIndicator: () => null
};
render() {
const { classes, options, onChange, value } = this.props;
const selectStyles = {
clearIndicator: () => ({
display: "none"
}),
noOptionsMessage: () => ({
display: "none"
})
};
return (
<MuiThemeProvider theme={createMuiTheme(dropDownStyle)}>
<Select
styles={selectStyles}
isClearable={true}
classes={classes}
onChange={onChange}
backspaceRemovesValue={true}
textFieldProps={{
label: this.props.label,
variant: "outlined",
InputLabelProps: value ? { shrink: true } : {},
onChange: this.handleTextFieldChange
}}
value={value}
components={this.components}
isSearchable={true}
placeholder=""
options={options}
/>
</MuiThemeProvider>
);
}
}
export default withStyles(styles, { withTheme: true })(SelectDropdown);
, а вот ссылка на тот же код в песочнице: https://codesandbox.io/s/editable-dropdown-ckf1r