templates/bundles/SyliusAdminBundle/Script/_product_auto_complete.html.twig line 1

Open in your IDE?
  1. <script>
  2.     $.fn.extend({
  3.         autoComplete() {
  4.             this.each((idx, el) => {
  5.                 const element = $(el);
  6.                 const criteriaName = element.data('criteria-name');
  7.                 const choiceName = element.data('choice-name');
  8.                 const choiceValue = element.data('choice-value');
  9.                 const autocompleteValue = element.find('input.autocomplete').val();
  10.                 const loadForEditUrl = element.data('load-edit-url');
  11.                 element.dropdown({
  12.                     delay: {
  13.                         search: 250,
  14.                     },
  15.                     forceSelection: false,
  16.                     saveRemoteData: false,
  17.                     apiSettings: {
  18.                         dataType: 'JSON',
  19.                         cache: false,
  20.                         beforeSend(settings) {
  21.                             element.find('.menu').html('');
  22.                             /* eslint-disable-next-line no-param-reassign */
  23.                             settings.data[criteriaName] = settings.urlData.query;
  24.                             const taxonSelectEl = element.parent().parent().find('select');
  25.                             settings.data['taxonCode'] = taxonSelectEl.val();
  26.                             return settings;
  27.                         },
  28.                         onResponse(response) {
  29.                             let results = response.map(item => ({
  30.                                 name: item[choiceName],
  31.                                 value: item[choiceValue],
  32.                             }));
  33.                             if (!element.hasClass('multiple')) {
  34.                                 results.unshift({
  35.                                     name: '&nbsp;',
  36.                                     value: '',
  37.                                 });
  38.                             }
  39.                             return {
  40.                                 success: true,
  41.                                 results: results,
  42.                             };
  43.                         },
  44.                     },
  45.                 });
  46.                 if (autocompleteValue.split(',').filter(String).length > 0) {
  47.                     const menuElement = element.find('div.menu');
  48.                     menuElement.api({
  49.                         on: 'now',
  50.                         method: 'GET',
  51.                         url: loadForEditUrl,
  52.                         beforeSend(settings) {
  53.                             /* eslint-disable-next-line no-param-reassign */
  54.                             settings.data[choiceValue] = autocompleteValue.split(',').filter(String);
  55.                             return settings;
  56.                         },
  57.                         onSuccess(response) {
  58.                             response.forEach((item) => {
  59.                                 menuElement.append((
  60.                                     $(`<div class="item" data-value="${item[choiceValue]}">${item[choiceName]}</div>`)
  61.                                 ));
  62.                             });
  63.                             element.dropdown('refresh');
  64.                             element.dropdown('set selected', element.find('input.autocomplete').val().split(',').filter(String));
  65.                         },
  66.                     });
  67.                 }
  68.             });
  69.         },
  70.     });
  71.     $('.sylius-autocomplete').autoComplete();
  72. </script>