Не рекомендуется объединять React, в котором написано WebChat, и JQuery, поскольку React не распознает любые изменения, внесенные JQuery. При этом вы можете добавить flexdatalist в поле ввода WebChat, но вам также необходимо отправить действия в хранилище WebChat, чтобы уведомить его об изменениях. Смотрите фрагменты кода ниже.
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>One Bot to Rule Them All</title>
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.0.min.js"></script>
<link href="/jquery-flexdatalist-2.2.4/jquery.flexdatalist.css" rel="stylesheet" type="text/css">
<script src="/jquery-flexdatalist-2.2.4/jquery.flexdatalist.min.js"></script>
<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<style>
html, body { height: 100% }
body {
margin: 0;
}
#webchat,
#webchat > * {
height: 100%;
}
</style>
</head>
<body>
<div id="webchat" role="main"></div>
<script>
(async function() {
const res = await fetch('http://localhost:3978/directline/token', { method: 'POST' });
const { token } = await res.json();
const store = window.WebChat.createStore({},
({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
// Clear the input field when the message is sent
$("input[data-id='webchat-sendbox-input']").val("")
}
return next(action);
});
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token }),
store,
}, document.getElementById('webchat'));
$("input[data-id='webchat-sendbox-input']").flexdatalist({
minLength: 1,
searchIn: 'name',
data: 'countries.json'
});
$("input[data-id='webchat-sendbox-input']").on('select:flexdatalist', (event, set, options) =>
store.dispatch({
type: 'WEB_CHAT/SET_SEND_BOX',
payload: {
text: set.name
}
})
);
$("input[data-id='webchat-sendbox-input']").on('change:flexdatalist', (event, set, options) => {
console.log(event)
store.dispatch({
type: 'WEB_CHAT/SET_SEND_BOX',
payload: {
text: set.value
}
})
}
);
})().catch(err => console.log(err));
</script>
</body>
Обратите внимание, что следующий подход отключает отправку сообщения, когда пользователь нажимает клавишу ввода, поэтому пользователь должен нажать кнопку отправки. К сожалению, я не смог найти для этого функциональную тренировку.
Надеюсь, это поможет!