Пользовательский интерфейс материала - автозаполнение стилей - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь стилизовать заполнение так, чтобы значок перемещался в крайнюю правую часть компонента пользовательского интерфейса материала автозаполнения, который в настоящее время переопределяется этим стилем:

.MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon .MuiAutocomplete-inputRoot [class * = "MuiOutlinedInput- root"]

Это код:

const useStyles = makeStyles(theme => ({
  inputRoot: {
    color: "blue",
    fontFamily: "Roboto Mono",
    backgroundColor: fade("#f2f2f2", 0.05),
    "& .MuiOutlinedInput-notchedOutline": {
      borderWidth: '2px',
      borderColor: "blue"
    },
    "&:hover .MuiOutlinedInput-notchedOutline": {
      borderWidth: "2px",
      borderColor: "blue"
    },
    "&.Mui-focused .MuiOutlinedInput-notchedOutline": {
      borderWidth: "2px",
      borderColor: "blue"
    }
  }
}));

const textStyles = makeStyles({
  formControlRoot: {
    fontFamily: "Roboto Mono",
    width: "50vw",
    color: "#ffffff",
    borderRadius: "7px",
    position: "relative",
    "& label.Mui-focused": {
      color: "blue"
    },
  },
  inputLabelRoot: {
    color: "#ffffff",
    fontFamily: "Roboto Mono",
    "&.focused": {
      color: "#ffffff"
    }
  },
});

export default function ComboBox() {
  const classes = useStyles();
  const textClasses = textStyles();

  return (
    <Autocomplete
      id="combo-box-demo"
      classes={classes}
      // options={top100Films}
      getOptionLabel={option => option.title}
      renderInput={params => {
        return (
          <TextField
            {...params}
            label="Combo box"
            variant="outlined"
            classes={{ root: textClasses.formControlRoot }}
            fullWidth
            InputProps={{
              ...params.InputProps,
              endAdornment: (
                <InputAdornment position="end">
                  <SearchIcon />
                </InputAdornment>
              )
            }}
            InputLabelProps={{ classes: {root: textClasses.inputLabelRoot}}}
          />
        );
      }}
    />
  );
}

И вот результат:

enter image description here

1 Ответ

1 голос
/ 16 апреля 2020

Вы указываете endAdornment для Input, но Autocomplete также пытается указать endAdornment . Ваш endAdornment выигрывает, но Autocomplete все еще пытается применить все CSS, относящиеся к его окончательному украшению (место для значка всплывающего окна и значка очистки).

Вы можете отключить CSS относится к окончательному украшению автозаполнения, передавая реквизиты, которые отключают эти функции:

    <Autocomplete
      disableClearable
      forcePopupIcon={false}

Edit Autocomplete with custom endAdornment

...