Мне кажется, я смог довольно близко приблизиться к тому, чего вы хотите достичь. Ниже приведен обновленный файл custom-antd.css .
.ant-select-selection-selected-value {
border-radius: 0px 8px 8px 0px;
height: 53px;
}
.ant-select-selection.ant-select-selection--single {
height: 53px;
}
.ant-select-selection.ant-select-selection--single
> div
> div
> div
> div
+ div {
margin-top: -5px;
padding: 4px 5px 5px 14px !important;
}
.ant-select-selection.ant-select-selection--single > div > div > div > div {
margin-top: -20px;
}
.ant-select-selection.ant-select-selection--single[aria-expanded="true"]
> div
> div
> div
> div {
margin-top: -10px;
}
/*style for when the menu is expanded: show shipment description above icon and name*/
.ant-select-selection.ant-select-selection--single[aria-expanded="true"]
> div
> div
> div
> div
+ div {
margin-top: -15px;
}
Полный код изолированной программной среды можно найти здесь .
По сути то, что вывы хотите использовать комбинаторы для выбора конкретных div
для имени, описания и т. д., которые муравьиные дизайны вкладывают довольно глубоко в свою структуру.
РЕДАКТИРОВАТЬ
Чтобы в раскрывающемся меню отображались различные данные в зависимости от того, что выбрано в настоящее время (показывать LCL только при выборе FCL, и наоборот), вы можете использовать функцию handleChange, которая фильтрует исходные данные отгрузки, чтобы она возвращала все, чтов настоящее время не выбран (т.е. показывает LCL без FCL, когда выбран FCL). Сохраняя исходные данные отгрузки в состоянии вместе со вторым массивом (отфильтрованные данные меню), вы можете использовать / обновить второй массив для ваших вариантов выбора.
Вот ваше состояние.
this.state = {
shipmentArr: [],
shipmentType: {
sea: [
{ name: "FCL", desc: "FULL CONTAINER LOAD" },
{ name: "LCL", desc: "LESS CONTAINER LOAD" }
],
air: [{ name: "AIR", desc: "AIR DELIVERY" }]
}
};
Вот новое handleChange
.
handleChange = value => {
var newShipmentType = this.state.shipmentType.sea.filter(x => {
return x.name !== value;
});
this.setState({
shipmentArr: newShipmentType
});
};
Вот componentDidMount
(используется handleChange
).
componentDidMount = () => {
this.handleChange(this.state.shipmentType.sea[0].name);
};
Ниже приведен обновленный компонент Select
.
<Select
className="container-dropdown"
onChange={this.handleChange}
open={true} // USE THIS FOR DEBUGGING.
defaultValue={
<DisplayContainer data={this.state.shipmentType.sea[0]} />
}
key={this.state.shipmentArr[0]}
>
{this.state.shipmentArr.map(x => {
return (
<Option value={x.name}>
<DisplayContainer data={x} />
</Option>
);
})}
</Select>
См. Полный обновленный код ручки .