import {Controller} from "@hotwired/stimulus"; import "tom-select/dist/css/tom-select.bootstrap5.css"; import '../../css/tom-select_extensions.css'; import TomSelect from "tom-select"; export default class extends Controller { _tomSelect; connect() { let settings = { persistent: false, create: true, maxItems: 1, createOnBlur: true, render: { item: (data, escape) => { return '' + escape(data.label) + ''; }, option: (data, escape) => { if (data.image) { return "
" + data.label + "
" } return '
' + escape(data.label) + '
'; } } }; if(this.element.dataset.autocomplete) { const base_url = this.element.dataset.autocomplete; settings.searchField = "label"; settings.sortField = "label"; settings.valueField = "label"; settings.load = (query, callback) => { if(query.length < 2){ callback(); return; } const url = base_url.replace('__QUERY__', encodeURIComponent(query)); fetch(url) .then(response => response.json()) .then(json => { const data = json.map(x => { return { "label": x.name, "image": x.image, } }); callback(data); }).catch(()=>{ callback(); }); }; } this._tomSelect = new TomSelect(this.element, settings); } }