У меня выпадающий список из пакета semanti c -ui, который отлично работает, когда я не включаю модальный код подтверждения в свой проект. Вот что у меня сейчас:
<Dropdown
loading={settingConfig}
disabled={!configEditable}
options={configs && configs.length > 0 ? configs.map(formatConfig) : teltonikaConfigs.map(formatTeltonikaConfig)}
onChange={this.handleConfigChange} />
<EditButton editingEnabled={configEditable} onClick={this.toggleConfigEdit} />
Параметры форматируются следующим образом:
const formatConfig = conf => ( { key: conf.id, text: conf.name + '-' + conf.scriptVersionId + '.' + conf.configVersionId, value: conf.id, image: getRisk(conf.risk)} );
const formatTeltonikaConfig = conf => ({key: conf.id, text: conf.name, value: conf.id});
Когда выбран параметр, вызывается следующая функция:
handleConfigChange = ( e, data ) => {
const forceUpdate = true;
// Not an Atom B Device
if (this.props.device.type !== "HARDWIRED-BM") {
const configId = data.value;
this.setState( { settingConfig: true, configEditable: false } );
updateConfiguration(this.props.device.imei, configId, forceUpdate)
.then( this.props.handleDeviceUpdate )
.catch( error => toast.error( "There has been an error whilst updating the device.. This will need to be updated manually. " + error.message ) )
.then(() => this.setState( { settingConfig: false } ) )
} else {
const configId = data.value;
console.log(" Id " + configId);
this.setState( { settingConfig: true, configEditable: false } );
updateTeltonikaDeviceConfig(this.props.device.imei, configId, forceUpdate)
.then(this.props.handleDeviceUpdate)
.catch(error => toast.error("There has been an error whilst updating the device.. This will need to be updated manually. " + error.message))
.then(() => this.setState({settingConfig: false}))
}
};
Это тогда получит configId от data.value
в соответствии с отформатированными конфигами и работает нормально ...
Однако, когда я добавляю диалог подтверждения / модальный, так, когда пользователь выбирает опцию, они должны подтвердить, да или нет, configId/data.value
не определено. Код для этого выглядит следующим образом:
Изменяется выпадающий список (изменяется метод onChange):
<Dropdown
loading={settingConfig}
disabled={!configEditable}
options={configs && configs.length > 0 ? configs.map(formatConfig) : teltonikaConfigs.map(formatTeltonikaConfig)}
onChange={this.show} />
<EditButton editingEnabled={configEditable} onClick={this.toggleConfigEdit} />
У меня также есть этот код, чтобы показать раскрывающийся список:
show = () => this.setState({ open: true })
handleConfirm = (e, data) => {
this.handleConfigChange(e, data);
this.setState({ open: false })
}
handleCancel = () => this.setState({ open: false })
Тогда код диалога подтверждения выглядит следующим образом:
<div>
<Confirm
open={this.state.open}
cancelButton='No'
confirmButton="Yes"
onCancel={this.handleCancel}
onConfirm={this.handleConfirm}
/>
</div>
Таким образом, при выборе опции открывается диалоговое окно, и когда пользователь нажимает YES
e,data
отправляется в handleConfirmMethod
.. Теперь моя проблема в том, что данные содержат следующие значения, а не configId
, который передается без диалогового окна подтверждения:
Данные, передаваемые через, соответствуют тому, что содержится в коде диалогового окна подтверждения. Кто-нибудь может мне помочь с этим, так как мне нужно пройти через configId как данные?
Надеюсь, это имеет смысл!