<script>
$.fn.extend({
autoComplete() {
this.each((idx, el) => {
const element = $(el);
const criteriaName = element.data('criteria-name');
const choiceName = element.data('choice-name');
const choiceValue = element.data('choice-value');
const autocompleteValue = element.find('input.autocomplete').val();
const loadForEditUrl = element.data('load-edit-url');
element.dropdown({
delay: {
search: 250,
},
forceSelection: false,
saveRemoteData: false,
apiSettings: {
dataType: 'JSON',
cache: false,
beforeSend(settings) {
element.find('.menu').html('');
/* eslint-disable-next-line no-param-reassign */
settings.data[criteriaName] = settings.urlData.query;
const taxonSelectEl = element.parent().parent().find('select');
settings.data['taxonCode'] = taxonSelectEl.val();
return settings;
},
onResponse(response) {
let results = response.map(item => ({
name: item[choiceName],
value: item[choiceValue],
}));
if (!element.hasClass('multiple')) {
results.unshift({
name: ' ',
value: '',
});
}
return {
success: true,
results: results,
};
},
},
});
if (autocompleteValue.split(',').filter(String).length > 0) {
const menuElement = element.find('div.menu');
menuElement.api({
on: 'now',
method: 'GET',
url: loadForEditUrl,
beforeSend(settings) {
/* eslint-disable-next-line no-param-reassign */
settings.data[choiceValue] = autocompleteValue.split(',').filter(String);
return settings;
},
onSuccess(response) {
response.forEach((item) => {
menuElement.append((
$(`<div class="item" data-value="${item[choiceValue]}">${item[choiceName]}</div>`)
));
});
element.dropdown('refresh');
element.dropdown('set selected', element.find('input.autocomplete').val().split(',').filter(String));
},
});
}
});
},
});
$('.sylius-autocomplete').autoComplete();
</script>